pdfmd-cli 3.28.49__tar.gz → 3.29.24__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pdfmd_cli-3.28.49/pdfmd_cli.egg-info → pdfmd_cli-3.29.24}/PKG-INFO +179 -9
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/README.md +178 -8
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd.py +1316 -56
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24/pdfmd_cli.egg-info}/PKG-INFO +179 -9
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/SOURCES.txt +24 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/entry_points.txt +1 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_css/__init__.py +56 -9
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_help/__init__.py +1 -1
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_images/remote.py +1 -1
- pdfmd_cli-3.29.24/pdfmd_lua/cover.lua +53 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/csv_table.lua +26 -1
- pdfmd_cli-3.29.24/pdfmd_lua/ebook.lua +51 -0
- pdfmd_cli-3.29.24/pdfmd_lua/ebook_input.lua +53 -0
- pdfmd_cli-3.29.24/pdfmd_lua/markup.lua +692 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_setup/inventory.py +4 -1
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_setup/registry.py +20 -1
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_tables/convert.py +6 -0
- pdfmd_cli-3.29.24/pdfmd_tables/sheets.py +130 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pyproject.toml +2 -0
- pdfmd_cli-3.29.24/tests/test_browser_engine.py +114 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_build_record.py +1 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_calibre.py +10 -6
- pdfmd_cli-3.29.24/tests/test_calibre_markdown.py +138 -0
- pdfmd_cli-3.29.24/tests/test_calibre_targets.py +506 -0
- pdfmd_cli-3.29.24/tests/test_cover.py +131 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_css.py +3 -2
- pdfmd_cli-3.29.24/tests/test_css_v2.py +148 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_doctor.py +13 -0
- pdfmd_cli-3.29.24/tests/test_ebook_input.py +156 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_engine_chain.py +37 -3
- pdfmd_cli-3.29.24/tests/test_folder_settings.py +132 -0
- pdfmd_cli-3.29.24/tests/test_install_calibre.py +222 -0
- pdfmd_cli-3.29.24/tests/test_install_core_tex.py +145 -0
- pdfmd_cli-3.29.24/tests/test_markup_appendix.py +62 -0
- pdfmd_cli-3.29.24/tests/test_markup_callouts.py +201 -0
- pdfmd_cli-3.29.24/tests/test_markup_center.py +103 -0
- pdfmd_cli-3.29.24/tests/test_markup_highlight.py +95 -0
- pdfmd_cli-3.29.24/tests/test_markup_keep.py +82 -0
- pdfmd_cli-3.29.24/tests/test_markup_landscape.py +103 -0
- pdfmd_cli-3.29.24/tests/test_markup_toc.py +108 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_native.py +9 -2
- pdfmd_cli-3.29.24/tests/test_pan_tec.py +36 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_polish.py +5 -5
- pdfmd_cli-3.29.24/tests/test_show_comments.py +142 -0
- pdfmd_cli-3.29.24/tests/test_spreadsheets.py +137 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_check/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_check/lint.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_chem/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_chem/__main__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_chem/batch.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_chem/render.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_chem/siunitx.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/dependency_links.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/requires.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_cli.egg-info/top_level.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_direct/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_direct/defaults.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_direct/html.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_direct/typst.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_edit/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_flat/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_flat/asciify.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_flat/keep.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_history/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_history/git.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_history/hst.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_history/versions.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_images/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_images/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_images/svg.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/VENDORED.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/_kerning_data.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/assets/fonts/DejaVuSans-LICENSE.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/assets/fonts/DejaVuSans.ttf +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/ast.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/cidfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/embedded.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/embedded_metrics.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/emoji_font.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/html_filter.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/image_loader.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/layout.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/parser.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/pdf.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/py.typed +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/render.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/truetype.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_inkmd/url_filter.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_labels/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_labels/replay.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_labels/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/ascii.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/chem.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/chem_client.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/code.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/code_wrap.tex +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/diagram.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/flat.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/graphicx.tex +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/graphviz.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/images.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/katex.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/mathjax.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/pagebreak.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/pdf_images.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/raw.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/select.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/table_width.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/title_meta.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/typst.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_lua/weasyprint.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_mhchem/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_mhchem/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_mhchem/parser.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/docx.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/docx_post.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/fragments.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/labels.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/odt.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/office.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/properties.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/spec.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_office/units.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_raw/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_setup/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_setup/fancy.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_setup/plain.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_tables/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_tables/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_tables/verify.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/article/refs.bib +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/10-introduction.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/20-methods.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/book/parts/30-results.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/notes/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/data.csv +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/report/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_templates/data/slides/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/_catalog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/_scripts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/_tessdata_catalog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/colorfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/install.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/plan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/scripts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/tessdata.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/pdfmd_unicode/translit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/setup.cfg +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_api.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_apple_emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_ascii.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_attach.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_attach_format.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_autolog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_bopen.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_budget.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_cache_location.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_check.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_check_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_chem.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_code_blocks.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_compat.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_completion.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_config.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_csv_table.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_diagrams.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_direct.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_display_path.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_docx_tables.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_edit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_edit_pdf.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_embedding.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_engine_filters.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_flat.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_header_includes.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_help.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_history.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_images.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_install_diagram.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_install_ocr.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_install_python.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_jobs.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_katex_scale.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_keep_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_labels.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_latex_errors.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_lookup.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_lua_trust.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_markdown_features.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_mathfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_mathjax.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_mhchem.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_office.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_office_latex.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_old_python_syntax.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_package_helper.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_packaging.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_pagebreak.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_pdf_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_picture_cache_protocol.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_plot_cache.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_presets.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_raw.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_rawcode.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_reader.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_remote_csl.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_sections.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_setup.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_soffice_parts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_standalone_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_table_widths.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_tables.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_templates.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_tessdata.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_texpackages.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_text_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_translit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_typst_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_unicode.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.24}/tests/test_versions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pdfmd-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.29.24
|
|
4
4
|
Summary: One command from Markdown to a good-looking PDF: a Pandoc wrapper with smart defaults, project-file discovery and a multi-engine fallback chain
|
|
5
5
|
Author: Ali Perdekhan
|
|
6
6
|
License-Expression: MIT AND Apache-2.0
|
|
@@ -245,8 +245,60 @@ when none can. `pdf-engine:` in `pdfmd-options`, the front matter, a metadata fi
|
|
|
245
245
|
instead: Pandoc writes one HTML page (math as MathML, which Calibre draws with its own
|
|
246
246
|
MathJax) and Calibre turns it into a PDF with the document's paper, margins, `fontsize:` and
|
|
247
247
|
language, page numbers, and bookmarks from the headings. LaTeX in the document is made native
|
|
248
|
-
or drawn as a picture, as for a Word file. Calibre is
|
|
249
|
-
name it (`-e calibre`, or `pdf-engine: calibre` in `pdfmd-options:`).
|
|
248
|
+
or drawn as a picture, as for a Word file. Calibre is not in the numbered chain: it comes first when you
|
|
249
|
+
name it (`-e calibre`, or `pdf-engine: calibre` in `pdfmd-options:`), and (v3.29.1) it and the browsers
|
|
250
|
+
(`-e edge`, `chrome`, `chromium`, `brave`: Pandoc's HTML page, printed headless) are tried last when no engine is named
|
|
251
|
+
and LaTeX, Typst and the HTML engines have all failed, ahead of LibreOffice; `--doctor` lists them as last resorts.
|
|
252
|
+
A comma list of your own never adds them (`-e pandoc` is every engine Pandoc drives, not these).
|
|
253
|
+
|
|
254
|
+
With no Pandoc at all, Calibre reads the Markdown itself (v3.29): its own Markdown reader (tables, footnotes, fenced code, lists)
|
|
255
|
+
prints it, before the rough built-in renderers, with the document's paper and margins. It has no math (formulas are text) and
|
|
256
|
+
none of Pandoc's syntax, and says so (`NOTE`, `WARN`). `-e calibre` or `-e native` without Pandoc picks it; with Pandoc,
|
|
257
|
+
`-e calibre` is the HTML route above.
|
|
258
|
+
|
|
259
|
+
`pdfmd --install calibre` (v3.29) gets Calibre when it is missing (190 to 360 MB). In a terminal on a Mac or Windows it offers
|
|
260
|
+
`brew install --cask calibre` or `winget install --id calibre.calibre -e` first. Otherwise (or on answering `d`) pdfmd downloads the
|
|
261
|
+
release file for your machine and checks it against the SHA-256 GitHub lists for it, and refuses a download whose checksum is not
|
|
262
|
+
listed: on macOS it opens the disk image read-only and copies `calibre.app` into `~/Applications`, on Linux (x86-64, ARM)
|
|
263
|
+
it unpacks the archive into pdfmd's data folder (no root, no desktop entries), and either way runs `ebook-convert --version`
|
|
264
|
+
to check. Windows: `winget`, or the installer from calibre-ebook.com. Calibre is a program pdfmd runs, never one it contains.
|
|
265
|
+
|
|
266
|
+
A browser prints a Markdown document too (v3.29): `-e edge`, `-e chrome`, `-e chromium` or `-e brave` (or `-e browser` for the
|
|
267
|
+
first one installed) has Pandoc write one self-contained HTML page and the browser, headless, print it with the document's
|
|
268
|
+
paper and margins (`papersize`, `geometry`, `margin`: as `@page`) and 12pt text. The math is MathML, which the browser draws
|
|
269
|
+
itself; LaTeX in the document is made native or drawn as a picture, as for a Word file. Like Calibre, a browser comes first when you
|
|
270
|
+
name it and last when you do not (see above); an `.html` file already goes to one first when it has scripts or MathML.
|
|
271
|
+
|
|
272
|
+
Calibre also writes ebooks (v3.29): `pdfmd book.md -o book.azw3` (or `--to azw3`) has Pandoc write an EPUB 3 (chapters,
|
|
273
|
+
contents, the metadata, the math as MathML) and Calibre turn it into the target, `book.azw3` beside the document. The
|
|
274
|
+
twelve targets only Calibre writes are `azw3`, `mobi`, `kepub`, `lit`, `lrf`, `pdb`, `rb`, `snb`, `tcr`, `pmlz`, `htmlz`
|
|
275
|
+
and `txtz`; each was converted back to text to check that its words, list and table are there. (Before v3.29 `-o
|
|
276
|
+
book.azw3` wrote a PDF under that name.) `epub`, `docx`, `rtf`, `txt` and `fb2` Pandoc writes itself, with more of its own
|
|
277
|
+
features (styles, tables, footnotes); they go through Calibre only when `-e calibre` is on the command line (a
|
|
278
|
+
`pdf-engine: calibre` is a PDF setting), with a NOTE. `-e calibre` with another target (`.tex`, `.html`, `.md`) stops and
|
|
279
|
+
lists what Calibre writes. One document at a time, not `-b` or `-r`.
|
|
280
|
+
|
|
281
|
+
The math of an ebook: a Kindle or a Kobo does not draw MathML, and a MOBI has no place for it. `azw3`, `mobi`, `kepub`, `lit`
|
|
282
|
+
and `lrf` (and `docx` through Calibre) get each formula drawn by LaTeX as a picture, in the document's own preamble and with
|
|
283
|
+
its `\ce` and siunitx, as a Word file's pictures are (needs a LaTeX engine and Poppler's `pdftocairo`); the plain formats
|
|
284
|
+
(`pdb`, `rb`, `snb`, `tcr`, `pmlz`, `txtz`, `rtf`, `txt`, `fb2`) get the formulas as text, the simple ones with their
|
|
285
|
+
superscripts and the rest as TeX, with one `WARN` that counts them, and so does a picture target on a machine with no LaTeX.
|
|
286
|
+
`epub` and `htmlz` keep the MathML. A `--mathml` or `--math-method` of your own is kept.
|
|
287
|
+
|
|
288
|
+
An ebook can be the input too (v3.29): `pdfmd book.epub` builds `book.pdf` beside it, `pdfmd book.mobi -o book.md` writes its
|
|
289
|
+
Markdown (with its pictures in `media/`) for you to edit, `pdfmd book.azw3 --to docx` a Word file. An EPUB is read by Pandoc;
|
|
290
|
+
`mobi`, `azw`, `azw3`, `azw4`, `kepub`, `lit`, `lrf`, `pdb`, `prc`, `chm`, `snb`, `tcr`, `rb`, `pmlz`, `htmlz` and `txtz` first go
|
|
291
|
+
through Calibre's `ebook-convert` into an EPUB (Calibre is needed for those, not for an EPUB). The closing line names the
|
|
292
|
+
book. One book at a time, not with other files, `-b` or `-r`; a book with DRM, and an ebook of nothing but pictures (a comic),
|
|
293
|
+
cannot be read. A formula a MOBI holds as a picture stays a picture. Calibre's own scaffolding in the converted book (an
|
|
294
|
+
anchor for every file it split the book into, its page-break divs and classes) is dropped from the Markdown; with
|
|
295
|
+
`-o book.md` the pictures are copied to a `media/` folder beside it.
|
|
296
|
+
|
|
297
|
+
LibreOffice writes what Pandoc cannot too (v3.29): `pdfmd letter.md -o letter.doc` (Word 97) has Pandoc write the Word file (the
|
|
298
|
+
same one `-o letter.docx` writes: your reference document, native equations and tables, pictures for what LaTeX alone can draw)
|
|
299
|
+
and headless LibreOffice turn it into `.doc`. `rtf`, `odt`, `txt` and `epub` go through LibreOffice only with `-e soffice` (or
|
|
300
|
+
`-e libreoffice`, `-e office`) first on the command line, with a NOTE; without it Pandoc writes them from the document itself,
|
|
301
|
+
which is the better file. `-e soffice` with another target (`.tex`, `.md`) lists what it writes.
|
|
250
302
|
|
|
251
303
|
For everything at once, `pdfmd --doctor` is one page on the Markdown-to-PDF tools, fonts
|
|
252
304
|
and emoji, PDF reading (batchocr, Tesseract, Poppler, OCR languages), your config file and
|
|
@@ -278,6 +330,8 @@ MISS xelatex: could not build it (! LaTeX Error: File `stix2.sty' not found.)
|
|
|
278
330
|
OK typst: built a PDF in 1.1 s
|
|
279
331
|
```
|
|
280
332
|
|
|
333
|
+
The last resorts are tried too (v3.29): an installed browser (`edge: built a PDF in 6.1 s`) and Calibre, which also writes a small
|
|
334
|
+
ebook (`calibre:azw3: built an AZW3 ebook in 18.0 s`), so a missing Qt library shows here and not in the middle of a book.
|
|
281
335
|
It takes a few seconds per engine (a minute or more if TeX has to fetch packages); without `--deep` nothing is built.
|
|
282
336
|
|
|
283
337
|
### Tab completion
|
|
@@ -349,6 +403,10 @@ OK notes.md > notes.pdf
|
|
|
349
403
|
- `pdfmd --install math:mathjax` (MathJax 4 and its STIX Two math font, about 12 MB to download, about 2 MB on
|
|
350
404
|
disk) and `pdfmd --install math:katex` (KaTeX, about 1.5 MB) are for WeasyPrint's PDFs, not the built-in
|
|
351
405
|
renderer: they typeset its math (see "WeasyPrint does not typeset math itself" below).
|
|
406
|
+
- `pdfmd --install core:tex` (also `cortex`, about 50 MB) is the other core: **Pandoc and Tectonic**, the self-contained
|
|
407
|
+
LaTeX engine (its release from GitHub, checked against the SHA-256 GitHub lists, into pdfmd's own tools folder). Tectonic
|
|
408
|
+
fetches the TeX files a document needs from the network the first time, then works from its cache. `core:typst`
|
|
409
|
+
(or `core`) is `--install full` below. `pan-tec` (see "Other command names") runs pdfmd on it.
|
|
352
410
|
- `pdfmd --install full` leaves the fallback behind: it installs **Pandoc** (the
|
|
353
411
|
real binary from PyPI's `pypandoc_binary`, about 35 MB, also `--install pandoc`
|
|
354
412
|
/ `pdfmd-cli[pandoc]`) and **Typst** (Typst's own release from GitHub, about
|
|
@@ -1065,9 +1123,9 @@ stamped or backed up unless you ask (`stamp=True`, `backup=True`). A failure rai
|
|
|
1065
1123
|
`variables=` a dict of Pandoc variables, `extra_args=` anything else the command line takes, `cwd=` the folder it runs
|
|
1066
1124
|
in and `timeout=` seconds.
|
|
1067
1125
|
|
|
1068
|
-
### Other command names: `mdpdf`, `inkmd` and `
|
|
1126
|
+
### Other command names: `mdpdf`, `inkmd`, `batchmd` and `pan-tec`
|
|
1069
1127
|
|
|
1070
|
-
pdfmd also installs `mdpdf`, `inkmd` and `
|
|
1128
|
+
pdfmd also installs `mdpdf`, `inkmd`, `batchmd` and `pan-tec` commands that take those tools' own keys
|
|
1071
1129
|
and do what they did, with pdfmd behind them:
|
|
1072
1130
|
|
|
1073
1131
|
```sh
|
|
@@ -1079,6 +1137,10 @@ batchmd ~/notes # every .md in the folder, as pdfmd
|
|
|
1079
1137
|
batchmd -e inkmd # the current folder, with the built-in renderer
|
|
1080
1138
|
```
|
|
1081
1139
|
|
|
1140
|
+
`pan-tec` is the first version of pdfmd, a shell function around `pandoc "$@" --pdf-engine=tectonic --pdf-engine-opt=--chatter=minimal`
|
|
1141
|
+
(v3.29): `pan-tec test.md -o ex.pdf` is `pdfmd -e tectonic test.md -o ex.pdf --pdf-engine-opt=--chatter=minimal`, with everything else
|
|
1142
|
+
pdfmd does. Name another engine (`-e typst`) or a chatter level of your own and that is used instead.
|
|
1143
|
+
|
|
1082
1144
|
`batchmd` is `pdfmd -b`: each Markdown file in the folder becomes its own PDF beside it.
|
|
1083
1145
|
It takes the current folder when you name none (`pdfmd -b` alone refuses), and every
|
|
1084
1146
|
other option is pdfmd's.
|
|
@@ -1297,6 +1359,12 @@ Water,18.015,1.20
|
|
|
1297
1359
|
`---`, `:--`, `:-:`, `--:` as in a pipe table; `align=` wins. If such a row is really data, say `separator="none"`.
|
|
1298
1360
|
`widths="5,1,1"` sets relative widths, and a second row with unequal dashes does too. Without either, pdfmd picks
|
|
1299
1361
|
widths that suit the contents.
|
|
1362
|
+
- **A spreadsheet** (v3.29) works as the file: `::: {.csv file="results.xlsx" sheet="Run 2"}` (`.xlsx`, `.xlsm`, `.xls`, `.ods`;
|
|
1363
|
+
`sheet=` is a name or a number counted from 1, the first sheet when it is left out). The sheet is read by `openpyxl` (xlsx and
|
|
1364
|
+
xlsm: the values the file stores, so a cell shown as `1.50` is `1.5`, a date is `2026-01-02`), else by `pandas`, else by
|
|
1365
|
+
LibreOffice (the sheet by number); none of them is a `WARN` that says what to install (`pip install openpyxl`). The converted
|
|
1366
|
+
CSV is kept in pdfmd's cache by the file's content, the attached source carries the spreadsheet itself, and
|
|
1367
|
+
`--expand-tables` reads it too.
|
|
1300
1368
|
- The first row is the header unless you add `header="false"`.
|
|
1301
1369
|
- Large files are capped at 10 rows × 7 columns, so a huge CSV can't
|
|
1302
1370
|
silently fill 40 pages. A cut table keeps both ends: the first 7 rows, a row
|
|
@@ -1358,10 +1426,28 @@ code, pre { font-family: "JetBrains Mono" }
|
|
|
1358
1426
|
With `css-scope: all` (`pdfmd-options`, or `--css-scope all`; the default is `html`) the sheet is read for the other writers
|
|
1359
1427
|
too: those four rules become the paper, margins, font, size, line spacing, indent, link colour and code font that LaTeX,
|
|
1360
1428
|
Typst and Word take, **below** what the document, its metadata and the command line set (`--verbose` says
|
|
1361
|
-
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not:
|
|
1362
|
-
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`; the last one wins
|
|
1363
|
-
|
|
1364
|
-
|
|
1429
|
+
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not: tables, anything else).
|
|
1430
|
+
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`, `h1`-`h5`; the last one wins. A media
|
|
1431
|
+
query is read as a browser prints (v3.29): `print` and `all` apply, `screen` and the other media types do not, a comma is "or",
|
|
1432
|
+
`only` and `not` count, `(orientation: landscape)` is read against the sheet's own `@page` size, and a feature of the screen or of
|
|
1433
|
+
a width (`(min-width: 600px)`) is not for a printed page and is named. A body size LaTeX has no class for (anything but 10, 11
|
|
1434
|
+
and 12 pt) is named, not used. It is a small reader on purpose: a CSS cascade has no counterpart in LaTeX.
|
|
1435
|
+
|
|
1436
|
+
Headings (v3.29): `h1`-`h5` with a `color`, `font-size` (`em`, `%`, `pt`, `px`: of the body's size), `font-family`,
|
|
1437
|
+
`font-weight` or `font-style` are set for LaTeX too, as titlesec's starred formats (the numbering and the spacing stay the
|
|
1438
|
+
class's; `h1` is `\section`, `h2` `\subsection` ... `h5` `\subparagraph`; `h6` has no LaTeX level). It is done only for the plain
|
|
1439
|
+
article class, and never over a document that formats its headings itself: a `titlesec`, `sectsty`, KOMA or memoir command, or a
|
|
1440
|
+
`\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
|
|
1441
|
+
(and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
|
|
1442
|
+
|
|
1443
|
+
### A cover: `cover`
|
|
1444
|
+
|
|
1445
|
+
`pdfmd-options: {cover: true}` puts the title block (title, subtitle, author, date) on a page of its own and starts the text
|
|
1446
|
+
on the next (v3.29): LaTeX's `titlepage` class option (for the article, report and book classes and KOMA's; another class is
|
|
1447
|
+
left alone), and a page break after the title block of an HTML-family PDF (WeasyPrint, a browser, Calibre) or an HTML page.
|
|
1448
|
+
`cover: picture.png` (relative to the document) puts that picture on the first page of such a PDF, before the title, and is the
|
|
1449
|
+
cover of an EPUB, so of the Kindle book Calibre makes from it (Pandoc's own `cover-image:` does the same for an EPUB). A
|
|
1450
|
+
Word, OpenDocument or Typst file says once that the key was not applied. Off by default: the title block stays on page 1.
|
|
1365
1451
|
|
|
1366
1452
|
### Code: wrapping and line numbers
|
|
1367
1453
|
|
|
@@ -1503,6 +1589,79 @@ It is off unless asked (the document, a metadata file, or `pdfmd --setup` under
|
|
|
1503
1589
|
[KIND ...]` and `--no-pagebreak` decide for one run. A spelling already in the output's own language stays as written,
|
|
1504
1590
|
and slides leave a break out with a note. The built-in renderer (no Pandoc) reads the comment and TeX spellings anyway.
|
|
1505
1591
|
|
|
1592
|
+
**Callouts in every format** (v3.29, the first kind of *universal markup* after page breaks). GitHub's and Obsidian's
|
|
1593
|
+
`> [!NOTE]`, a fenced `::: note` and Quarto's `::: callout-tip` are a block quote or a div to Pandoc, and print as plain text.
|
|
1594
|
+
Ask for them and each becomes a box of the writer's own: LaTeX a `tcolorbox` (a plain indented quote when that package is not
|
|
1595
|
+
installed), Typst a tinted block, HTML, EPUB and the HTML engines' PDFs a `div.callout` with its style, every other writer
|
|
1596
|
+
(Word, OpenDocument, Markdown ...) a block quote with a bold title:
|
|
1597
|
+
|
|
1598
|
+
```yaml
|
|
1599
|
+
pdfmd-options:
|
|
1600
|
+
markup: callouts # or: markup: true (every kind there is)
|
|
1601
|
+
```
|
|
1602
|
+
|
|
1603
|
+
```markdown
|
|
1604
|
+
> [!warning] Mind the gap
|
|
1605
|
+
> The title is the rest of the first line, the body the lines after it.
|
|
1606
|
+
|
|
1607
|
+
::: {.tip title="Another way"}
|
|
1608
|
+
A fenced div takes `note`, `tip`, `important`, `warning` or `caution` as its class, `title=` for the title.
|
|
1609
|
+
:::
|
|
1610
|
+
```
|
|
1611
|
+
|
|
1612
|
+
The five kinds are GitHub's (`note`, `tip`, `important`, `warning`, `caution`); Obsidian's others map to them (`info`, `todo`,
|
|
1613
|
+
`example`, `abstract` to note; `success`, `check`, `hint` to tip; `question`, `help`, `faq` to important; `failure`, `danger`,
|
|
1614
|
+
`error`, `bug` to caution; `attention` to warning), and an unknown name is a note titled with it. A fold marker (`[!tip]-`) is
|
|
1615
|
+
dropped. Off unless asked (the document, a metadata file, or `pdfmd --setup` under *Universal markup*); `--markup [KIND ...]` and
|
|
1616
|
+
`--no-markup` decide for one run. The built-in renderer (no Pandoc) does not read it yet, and there is no Word shaded box yet.
|
|
1617
|
+
|
|
1618
|
+
**A table of contents where you put it** (v3.29, `markup: toc`). `[TOC]`, `[[_TOC_]]` and `<!-- toc -->` alone in a paragraph, or
|
|
1619
|
+
a raw `\tableofcontents` for a writer that is not LaTeX, become the contents at that place: LaTeX's `\tableofcontents` (filled in
|
|
1620
|
+
one build, with the page numbers), Typst's `#outline()`, a Word TOC field (Word offers to update it when the file is opened) and,
|
|
1621
|
+
for every other writer (HTML, EPUB, Markdown, OpenDocument ...), a nested list of links to the headings down to level 3, with a
|
|
1622
|
+
bold "Contents" above it. `markup: [callouts, toc]` or `markup: true` for both; `--markup toc` for one run. A marker inside a
|
|
1623
|
+
sentence is text.
|
|
1624
|
+
|
|
1625
|
+
**Centred text** (v3.29, `markup: center`). `<center>` ... `</center>` around blocks (the closing tag in its own paragraph),
|
|
1626
|
+
`<div align="center">`, `<div style="text-align: center">`, a fenced `::: center` and, for writers that are not LaTeX, a raw
|
|
1627
|
+
`\begin{center}` ... `\end{center}` all centre what they hold: LaTeX's `center` environment, Typst's `#align(center)[...]`, a
|
|
1628
|
+
`text-align` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text as it is and say so once (no
|
|
1629
|
+
centring for a block there yet). `markup: [callouts, toc, center]` or `true` for all; `--markup center` for one run.
|
|
1630
|
+
|
|
1631
|
+
**Highlighted text** (v3.29, `markup: highlight`). `==marked text==` (across several words, with emphasis inside, over a line
|
|
1632
|
+
break) is highlighted: LaTeX with `soul`'s `\hl` in a pale yellow (plain text when `soul` is not installed), Typst with
|
|
1633
|
+
`#highlight[...]`, HTML, EPUB and `--to gfm` with `<mark>`; Pandoc's own Markdown output keeps `==...==`, and Word and OpenDocument
|
|
1634
|
+
keep the text and say once that it is not highlighted. A lone `==` or one inside code stays as written; a closing `==` followed by
|
|
1635
|
+
punctuation (`==end==.`) works. `markup: [callouts, toc, center, highlight]` or `true` for all; `--markup highlight` for one run.
|
|
1636
|
+
|
|
1637
|
+
**Blocks kept on one page** (v3.29, `markup: keep`). A fenced `::: keep` (also `nobreak`, `keep-together`), a div with
|
|
1638
|
+
`style="break-inside: avoid"` and, for writers that are not LaTeX, a raw `\begin{samepage}` ... `\end{samepage}` hold what they
|
|
1639
|
+
contain on one page where it fits: LaTeX's `samepage` environment, Typst's `#block(breakable: false)[...]`, a `break-inside:
|
|
1640
|
+
avoid` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text and say once that it is not held.
|
|
1641
|
+
`--markup keep` for one run.
|
|
1642
|
+
|
|
1643
|
+
**Landscape pages** (v3.29, `markup: landscape`). A fenced `::: landscape`, a div with `style="page: landscape"` and, for writers
|
|
1644
|
+
that are not LaTeX, a raw `\begin{landscape}` ... `\end{landscape}` put what they hold on pages turned sideways, the document
|
|
1645
|
+
going back to portrait after it: LaTeX with `pdflscape` (the page is rotated in the PDF; `lscape`, or no turning, when it is not
|
|
1646
|
+
installed), Typst with `#page(flipped: true)[...]`, WeasyPrint and the browsers with a named page (`@page landscape`: the browsers
|
|
1647
|
+
get the document's paper turned; WeasyPrint's is its own A4 unless your own `@page landscape` says otherwise). Calibre's PDF cannot
|
|
1648
|
+
name page types, and Word and OpenDocument have no sections made from here: they keep the text and say once that no landscape page
|
|
1649
|
+
was made. `--markup landscape` for one run.
|
|
1650
|
+
|
|
1651
|
+
**Where the appendix starts** (v3.29, `markup: appendix`). A raw `\appendix`, `<!-- appendix -->` or a heading with the class
|
|
1652
|
+
`{.appendix}` marks the start: the sections after it are lettered (A, B, A.1) in LaTeX (`\appendix`) and Typst (a heading
|
|
1653
|
+
numbering of letters and a counter reset). It matters for a document that numbers its sections (`--number-sections`); without
|
|
1654
|
+
numbers Typst gets nothing and LaTeX's `\appendix` changes nothing visible. Other writers keep their own numbering and say once
|
|
1655
|
+
that the lettering is not made.
|
|
1656
|
+
|
|
1657
|
+
**Showing the comments of the text** (v3.29, `show-comments`). An `<!-- HTML comment -->` is invisible in every output. With
|
|
1658
|
+
`pdfmd-options: {show-comments: true}` (or `--show-comments` for one run, `--no-show-comments` to switch it off; also a row in
|
|
1659
|
+
`pdfmd --setup`) each one is shown: a box labelled *Comment* in LaTeX, Typst, HTML, EPUB and the HTML engines' PDFs, a real Word
|
|
1660
|
+
comment in a `.docx` (anchored on the paragraph after it, so Word's review pane lists them), `[comment: ...]` in italics for one
|
|
1661
|
+
inside a paragraph. The Markdown family (`--to gfm`, `markdown`) keeps the comment as it is; OpenDocument and PowerPoint drop
|
|
1662
|
+
it, with a note once. pdfmd's own markers stay invisible (`<!-- pdfmd: ... -->`, `<!-- pagebreak -->`, `<!-- toc -->`,
|
|
1663
|
+
`<!-- appendix -->`), and so does an empty comment. It is off unless asked and is not one of the kinds `markup: true` turns on.
|
|
1664
|
+
|
|
1506
1665
|
**PDF images in HTML.** A browser does not show a PDF in `<img>`, an SVG it does. For an HTML build (a web page, an
|
|
1507
1666
|
EPUB, a PDF through WeasyPrint) every image that is a PDF, `` or `<img src="plot.pdf">`, is converted to
|
|
1508
1667
|
an SVG with poppler's `pdftocairo` (or `mutool`, `pdf2svg`, `inkscape`) and stays vector; the first page is used and the
|
|
@@ -1760,6 +1919,17 @@ document or its metadata files say (the command line beats all of them);
|
|
|
1760
1919
|
`translit:` is the romanization packs of the name lookup. `PDFMD_CONFIG=other.yaml`
|
|
1761
1920
|
uses another file, `PDFMD_CONFIG=` (empty) none.
|
|
1762
1921
|
|
|
1922
|
+
**Settings for a folder** (v3.29): a `.pdfmd/config.yaml` in a document's folder, or in any folder above it, has the same
|
|
1923
|
+
`options:` for everything under it. The order, strongest first: the command line, the document's `pdfmd-options`, its metadata
|
|
1924
|
+
files, the folder settings (the nearest folder first, then the ones above it), your global `config.yaml`, pdfmd's own defaults.
|
|
1925
|
+
`inherit: false` in a folder's file stops the walk upward there. A folder cannot set what belongs to this computer (`translit`,
|
|
1926
|
+
`setup-ui`, `disabled`): they are ignored with a `WARN`. A mapping such as `stamp:` or `backup:` in a folder's file stays off
|
|
1927
|
+
until it says `enabled: true`, as in the global file. A build lists the folder files it used on its `FOUND` line
|
|
1928
|
+
(`--verbose`: `AUTO SETTINGS`). A folder's options cannot name code (a Lua filter or a preamble is read from the document's own
|
|
1929
|
+
front matter only), a `.pdfmd/config.yaml` owned by another user (a shared `/tmp`) is not read, and a path in it (`css: house.css`)
|
|
1930
|
+
is relative to the document, as everywhere, not to the folder file. Writing the file from `pdfmd --setup DIR`, and carrying it in
|
|
1931
|
+
an attached source, are not done yet.
|
|
1932
|
+
|
|
1763
1933
|
```yaml
|
|
1764
1934
|
translit: [greek, hangul]
|
|
1765
1935
|
options:
|
|
@@ -210,8 +210,60 @@ when none can. `pdf-engine:` in `pdfmd-options`, the front matter, a metadata fi
|
|
|
210
210
|
instead: Pandoc writes one HTML page (math as MathML, which Calibre draws with its own
|
|
211
211
|
MathJax) and Calibre turns it into a PDF with the document's paper, margins, `fontsize:` and
|
|
212
212
|
language, page numbers, and bookmarks from the headings. LaTeX in the document is made native
|
|
213
|
-
or drawn as a picture, as for a Word file. Calibre is
|
|
214
|
-
name it (`-e calibre`, or `pdf-engine: calibre` in `pdfmd-options:`).
|
|
213
|
+
or drawn as a picture, as for a Word file. Calibre is not in the numbered chain: it comes first when you
|
|
214
|
+
name it (`-e calibre`, or `pdf-engine: calibre` in `pdfmd-options:`), and (v3.29.1) it and the browsers
|
|
215
|
+
(`-e edge`, `chrome`, `chromium`, `brave`: Pandoc's HTML page, printed headless) are tried last when no engine is named
|
|
216
|
+
and LaTeX, Typst and the HTML engines have all failed, ahead of LibreOffice; `--doctor` lists them as last resorts.
|
|
217
|
+
A comma list of your own never adds them (`-e pandoc` is every engine Pandoc drives, not these).
|
|
218
|
+
|
|
219
|
+
With no Pandoc at all, Calibre reads the Markdown itself (v3.29): its own Markdown reader (tables, footnotes, fenced code, lists)
|
|
220
|
+
prints it, before the rough built-in renderers, with the document's paper and margins. It has no math (formulas are text) and
|
|
221
|
+
none of Pandoc's syntax, and says so (`NOTE`, `WARN`). `-e calibre` or `-e native` without Pandoc picks it; with Pandoc,
|
|
222
|
+
`-e calibre` is the HTML route above.
|
|
223
|
+
|
|
224
|
+
`pdfmd --install calibre` (v3.29) gets Calibre when it is missing (190 to 360 MB). In a terminal on a Mac or Windows it offers
|
|
225
|
+
`brew install --cask calibre` or `winget install --id calibre.calibre -e` first. Otherwise (or on answering `d`) pdfmd downloads the
|
|
226
|
+
release file for your machine and checks it against the SHA-256 GitHub lists for it, and refuses a download whose checksum is not
|
|
227
|
+
listed: on macOS it opens the disk image read-only and copies `calibre.app` into `~/Applications`, on Linux (x86-64, ARM)
|
|
228
|
+
it unpacks the archive into pdfmd's data folder (no root, no desktop entries), and either way runs `ebook-convert --version`
|
|
229
|
+
to check. Windows: `winget`, or the installer from calibre-ebook.com. Calibre is a program pdfmd runs, never one it contains.
|
|
230
|
+
|
|
231
|
+
A browser prints a Markdown document too (v3.29): `-e edge`, `-e chrome`, `-e chromium` or `-e brave` (or `-e browser` for the
|
|
232
|
+
first one installed) has Pandoc write one self-contained HTML page and the browser, headless, print it with the document's
|
|
233
|
+
paper and margins (`papersize`, `geometry`, `margin`: as `@page`) and 12pt text. The math is MathML, which the browser draws
|
|
234
|
+
itself; LaTeX in the document is made native or drawn as a picture, as for a Word file. Like Calibre, a browser comes first when you
|
|
235
|
+
name it and last when you do not (see above); an `.html` file already goes to one first when it has scripts or MathML.
|
|
236
|
+
|
|
237
|
+
Calibre also writes ebooks (v3.29): `pdfmd book.md -o book.azw3` (or `--to azw3`) has Pandoc write an EPUB 3 (chapters,
|
|
238
|
+
contents, the metadata, the math as MathML) and Calibre turn it into the target, `book.azw3` beside the document. The
|
|
239
|
+
twelve targets only Calibre writes are `azw3`, `mobi`, `kepub`, `lit`, `lrf`, `pdb`, `rb`, `snb`, `tcr`, `pmlz`, `htmlz`
|
|
240
|
+
and `txtz`; each was converted back to text to check that its words, list and table are there. (Before v3.29 `-o
|
|
241
|
+
book.azw3` wrote a PDF under that name.) `epub`, `docx`, `rtf`, `txt` and `fb2` Pandoc writes itself, with more of its own
|
|
242
|
+
features (styles, tables, footnotes); they go through Calibre only when `-e calibre` is on the command line (a
|
|
243
|
+
`pdf-engine: calibre` is a PDF setting), with a NOTE. `-e calibre` with another target (`.tex`, `.html`, `.md`) stops and
|
|
244
|
+
lists what Calibre writes. One document at a time, not `-b` or `-r`.
|
|
245
|
+
|
|
246
|
+
The math of an ebook: a Kindle or a Kobo does not draw MathML, and a MOBI has no place for it. `azw3`, `mobi`, `kepub`, `lit`
|
|
247
|
+
and `lrf` (and `docx` through Calibre) get each formula drawn by LaTeX as a picture, in the document's own preamble and with
|
|
248
|
+
its `\ce` and siunitx, as a Word file's pictures are (needs a LaTeX engine and Poppler's `pdftocairo`); the plain formats
|
|
249
|
+
(`pdb`, `rb`, `snb`, `tcr`, `pmlz`, `txtz`, `rtf`, `txt`, `fb2`) get the formulas as text, the simple ones with their
|
|
250
|
+
superscripts and the rest as TeX, with one `WARN` that counts them, and so does a picture target on a machine with no LaTeX.
|
|
251
|
+
`epub` and `htmlz` keep the MathML. A `--mathml` or `--math-method` of your own is kept.
|
|
252
|
+
|
|
253
|
+
An ebook can be the input too (v3.29): `pdfmd book.epub` builds `book.pdf` beside it, `pdfmd book.mobi -o book.md` writes its
|
|
254
|
+
Markdown (with its pictures in `media/`) for you to edit, `pdfmd book.azw3 --to docx` a Word file. An EPUB is read by Pandoc;
|
|
255
|
+
`mobi`, `azw`, `azw3`, `azw4`, `kepub`, `lit`, `lrf`, `pdb`, `prc`, `chm`, `snb`, `tcr`, `rb`, `pmlz`, `htmlz` and `txtz` first go
|
|
256
|
+
through Calibre's `ebook-convert` into an EPUB (Calibre is needed for those, not for an EPUB). The closing line names the
|
|
257
|
+
book. One book at a time, not with other files, `-b` or `-r`; a book with DRM, and an ebook of nothing but pictures (a comic),
|
|
258
|
+
cannot be read. A formula a MOBI holds as a picture stays a picture. Calibre's own scaffolding in the converted book (an
|
|
259
|
+
anchor for every file it split the book into, its page-break divs and classes) is dropped from the Markdown; with
|
|
260
|
+
`-o book.md` the pictures are copied to a `media/` folder beside it.
|
|
261
|
+
|
|
262
|
+
LibreOffice writes what Pandoc cannot too (v3.29): `pdfmd letter.md -o letter.doc` (Word 97) has Pandoc write the Word file (the
|
|
263
|
+
same one `-o letter.docx` writes: your reference document, native equations and tables, pictures for what LaTeX alone can draw)
|
|
264
|
+
and headless LibreOffice turn it into `.doc`. `rtf`, `odt`, `txt` and `epub` go through LibreOffice only with `-e soffice` (or
|
|
265
|
+
`-e libreoffice`, `-e office`) first on the command line, with a NOTE; without it Pandoc writes them from the document itself,
|
|
266
|
+
which is the better file. `-e soffice` with another target (`.tex`, `.md`) lists what it writes.
|
|
215
267
|
|
|
216
268
|
For everything at once, `pdfmd --doctor` is one page on the Markdown-to-PDF tools, fonts
|
|
217
269
|
and emoji, PDF reading (batchocr, Tesseract, Poppler, OCR languages), your config file and
|
|
@@ -243,6 +295,8 @@ MISS xelatex: could not build it (! LaTeX Error: File `stix2.sty' not found.)
|
|
|
243
295
|
OK typst: built a PDF in 1.1 s
|
|
244
296
|
```
|
|
245
297
|
|
|
298
|
+
The last resorts are tried too (v3.29): an installed browser (`edge: built a PDF in 6.1 s`) and Calibre, which also writes a small
|
|
299
|
+
ebook (`calibre:azw3: built an AZW3 ebook in 18.0 s`), so a missing Qt library shows here and not in the middle of a book.
|
|
246
300
|
It takes a few seconds per engine (a minute or more if TeX has to fetch packages); without `--deep` nothing is built.
|
|
247
301
|
|
|
248
302
|
### Tab completion
|
|
@@ -314,6 +368,10 @@ OK notes.md > notes.pdf
|
|
|
314
368
|
- `pdfmd --install math:mathjax` (MathJax 4 and its STIX Two math font, about 12 MB to download, about 2 MB on
|
|
315
369
|
disk) and `pdfmd --install math:katex` (KaTeX, about 1.5 MB) are for WeasyPrint's PDFs, not the built-in
|
|
316
370
|
renderer: they typeset its math (see "WeasyPrint does not typeset math itself" below).
|
|
371
|
+
- `pdfmd --install core:tex` (also `cortex`, about 50 MB) is the other core: **Pandoc and Tectonic**, the self-contained
|
|
372
|
+
LaTeX engine (its release from GitHub, checked against the SHA-256 GitHub lists, into pdfmd's own tools folder). Tectonic
|
|
373
|
+
fetches the TeX files a document needs from the network the first time, then works from its cache. `core:typst`
|
|
374
|
+
(or `core`) is `--install full` below. `pan-tec` (see "Other command names") runs pdfmd on it.
|
|
317
375
|
- `pdfmd --install full` leaves the fallback behind: it installs **Pandoc** (the
|
|
318
376
|
real binary from PyPI's `pypandoc_binary`, about 35 MB, also `--install pandoc`
|
|
319
377
|
/ `pdfmd-cli[pandoc]`) and **Typst** (Typst's own release from GitHub, about
|
|
@@ -1030,9 +1088,9 @@ stamped or backed up unless you ask (`stamp=True`, `backup=True`). A failure rai
|
|
|
1030
1088
|
`variables=` a dict of Pandoc variables, `extra_args=` anything else the command line takes, `cwd=` the folder it runs
|
|
1031
1089
|
in and `timeout=` seconds.
|
|
1032
1090
|
|
|
1033
|
-
### Other command names: `mdpdf`, `inkmd` and `
|
|
1091
|
+
### Other command names: `mdpdf`, `inkmd`, `batchmd` and `pan-tec`
|
|
1034
1092
|
|
|
1035
|
-
pdfmd also installs `mdpdf`, `inkmd` and `
|
|
1093
|
+
pdfmd also installs `mdpdf`, `inkmd`, `batchmd` and `pan-tec` commands that take those tools' own keys
|
|
1036
1094
|
and do what they did, with pdfmd behind them:
|
|
1037
1095
|
|
|
1038
1096
|
```sh
|
|
@@ -1044,6 +1102,10 @@ batchmd ~/notes # every .md in the folder, as pdfmd
|
|
|
1044
1102
|
batchmd -e inkmd # the current folder, with the built-in renderer
|
|
1045
1103
|
```
|
|
1046
1104
|
|
|
1105
|
+
`pan-tec` is the first version of pdfmd, a shell function around `pandoc "$@" --pdf-engine=tectonic --pdf-engine-opt=--chatter=minimal`
|
|
1106
|
+
(v3.29): `pan-tec test.md -o ex.pdf` is `pdfmd -e tectonic test.md -o ex.pdf --pdf-engine-opt=--chatter=minimal`, with everything else
|
|
1107
|
+
pdfmd does. Name another engine (`-e typst`) or a chatter level of your own and that is used instead.
|
|
1108
|
+
|
|
1047
1109
|
`batchmd` is `pdfmd -b`: each Markdown file in the folder becomes its own PDF beside it.
|
|
1048
1110
|
It takes the current folder when you name none (`pdfmd -b` alone refuses), and every
|
|
1049
1111
|
other option is pdfmd's.
|
|
@@ -1262,6 +1324,12 @@ Water,18.015,1.20
|
|
|
1262
1324
|
`---`, `:--`, `:-:`, `--:` as in a pipe table; `align=` wins. If such a row is really data, say `separator="none"`.
|
|
1263
1325
|
`widths="5,1,1"` sets relative widths, and a second row with unequal dashes does too. Without either, pdfmd picks
|
|
1264
1326
|
widths that suit the contents.
|
|
1327
|
+
- **A spreadsheet** (v3.29) works as the file: `::: {.csv file="results.xlsx" sheet="Run 2"}` (`.xlsx`, `.xlsm`, `.xls`, `.ods`;
|
|
1328
|
+
`sheet=` is a name or a number counted from 1, the first sheet when it is left out). The sheet is read by `openpyxl` (xlsx and
|
|
1329
|
+
xlsm: the values the file stores, so a cell shown as `1.50` is `1.5`, a date is `2026-01-02`), else by `pandas`, else by
|
|
1330
|
+
LibreOffice (the sheet by number); none of them is a `WARN` that says what to install (`pip install openpyxl`). The converted
|
|
1331
|
+
CSV is kept in pdfmd's cache by the file's content, the attached source carries the spreadsheet itself, and
|
|
1332
|
+
`--expand-tables` reads it too.
|
|
1265
1333
|
- The first row is the header unless you add `header="false"`.
|
|
1266
1334
|
- Large files are capped at 10 rows × 7 columns, so a huge CSV can't
|
|
1267
1335
|
silently fill 40 pages. A cut table keeps both ends: the first 7 rows, a row
|
|
@@ -1323,10 +1391,28 @@ code, pre { font-family: "JetBrains Mono" }
|
|
|
1323
1391
|
With `css-scope: all` (`pdfmd-options`, or `--css-scope all`; the default is `html`) the sheet is read for the other writers
|
|
1324
1392
|
too: those four rules become the paper, margins, font, size, line spacing, indent, link colour and code font that LaTeX,
|
|
1325
1393
|
Typst and Word take, **below** what the document, its metadata and the command line set (`--verbose` says
|
|
1326
|
-
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not:
|
|
1327
|
-
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`; the last one wins
|
|
1328
|
-
|
|
1329
|
-
|
|
1394
|
+
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not: tables, anything else).
|
|
1395
|
+
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`, `h1`-`h5`; the last one wins. A media
|
|
1396
|
+
query is read as a browser prints (v3.29): `print` and `all` apply, `screen` and the other media types do not, a comma is "or",
|
|
1397
|
+
`only` and `not` count, `(orientation: landscape)` is read against the sheet's own `@page` size, and a feature of the screen or of
|
|
1398
|
+
a width (`(min-width: 600px)`) is not for a printed page and is named. A body size LaTeX has no class for (anything but 10, 11
|
|
1399
|
+
and 12 pt) is named, not used. It is a small reader on purpose: a CSS cascade has no counterpart in LaTeX.
|
|
1400
|
+
|
|
1401
|
+
Headings (v3.29): `h1`-`h5` with a `color`, `font-size` (`em`, `%`, `pt`, `px`: of the body's size), `font-family`,
|
|
1402
|
+
`font-weight` or `font-style` are set for LaTeX too, as titlesec's starred formats (the numbering and the spacing stay the
|
|
1403
|
+
class's; `h1` is `\section`, `h2` `\subsection` ... `h5` `\subparagraph`; `h6` has no LaTeX level). It is done only for the plain
|
|
1404
|
+
article class, and never over a document that formats its headings itself: a `titlesec`, `sectsty`, KOMA or memoir command, or a
|
|
1405
|
+
`\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
|
|
1406
|
+
(and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
|
|
1407
|
+
|
|
1408
|
+
### A cover: `cover`
|
|
1409
|
+
|
|
1410
|
+
`pdfmd-options: {cover: true}` puts the title block (title, subtitle, author, date) on a page of its own and starts the text
|
|
1411
|
+
on the next (v3.29): LaTeX's `titlepage` class option (for the article, report and book classes and KOMA's; another class is
|
|
1412
|
+
left alone), and a page break after the title block of an HTML-family PDF (WeasyPrint, a browser, Calibre) or an HTML page.
|
|
1413
|
+
`cover: picture.png` (relative to the document) puts that picture on the first page of such a PDF, before the title, and is the
|
|
1414
|
+
cover of an EPUB, so of the Kindle book Calibre makes from it (Pandoc's own `cover-image:` does the same for an EPUB). A
|
|
1415
|
+
Word, OpenDocument or Typst file says once that the key was not applied. Off by default: the title block stays on page 1.
|
|
1330
1416
|
|
|
1331
1417
|
### Code: wrapping and line numbers
|
|
1332
1418
|
|
|
@@ -1468,6 +1554,79 @@ It is off unless asked (the document, a metadata file, or `pdfmd --setup` under
|
|
|
1468
1554
|
[KIND ...]` and `--no-pagebreak` decide for one run. A spelling already in the output's own language stays as written,
|
|
1469
1555
|
and slides leave a break out with a note. The built-in renderer (no Pandoc) reads the comment and TeX spellings anyway.
|
|
1470
1556
|
|
|
1557
|
+
**Callouts in every format** (v3.29, the first kind of *universal markup* after page breaks). GitHub's and Obsidian's
|
|
1558
|
+
`> [!NOTE]`, a fenced `::: note` and Quarto's `::: callout-tip` are a block quote or a div to Pandoc, and print as plain text.
|
|
1559
|
+
Ask for them and each becomes a box of the writer's own: LaTeX a `tcolorbox` (a plain indented quote when that package is not
|
|
1560
|
+
installed), Typst a tinted block, HTML, EPUB and the HTML engines' PDFs a `div.callout` with its style, every other writer
|
|
1561
|
+
(Word, OpenDocument, Markdown ...) a block quote with a bold title:
|
|
1562
|
+
|
|
1563
|
+
```yaml
|
|
1564
|
+
pdfmd-options:
|
|
1565
|
+
markup: callouts # or: markup: true (every kind there is)
|
|
1566
|
+
```
|
|
1567
|
+
|
|
1568
|
+
```markdown
|
|
1569
|
+
> [!warning] Mind the gap
|
|
1570
|
+
> The title is the rest of the first line, the body the lines after it.
|
|
1571
|
+
|
|
1572
|
+
::: {.tip title="Another way"}
|
|
1573
|
+
A fenced div takes `note`, `tip`, `important`, `warning` or `caution` as its class, `title=` for the title.
|
|
1574
|
+
:::
|
|
1575
|
+
```
|
|
1576
|
+
|
|
1577
|
+
The five kinds are GitHub's (`note`, `tip`, `important`, `warning`, `caution`); Obsidian's others map to them (`info`, `todo`,
|
|
1578
|
+
`example`, `abstract` to note; `success`, `check`, `hint` to tip; `question`, `help`, `faq` to important; `failure`, `danger`,
|
|
1579
|
+
`error`, `bug` to caution; `attention` to warning), and an unknown name is a note titled with it. A fold marker (`[!tip]-`) is
|
|
1580
|
+
dropped. Off unless asked (the document, a metadata file, or `pdfmd --setup` under *Universal markup*); `--markup [KIND ...]` and
|
|
1581
|
+
`--no-markup` decide for one run. The built-in renderer (no Pandoc) does not read it yet, and there is no Word shaded box yet.
|
|
1582
|
+
|
|
1583
|
+
**A table of contents where you put it** (v3.29, `markup: toc`). `[TOC]`, `[[_TOC_]]` and `<!-- toc -->` alone in a paragraph, or
|
|
1584
|
+
a raw `\tableofcontents` for a writer that is not LaTeX, become the contents at that place: LaTeX's `\tableofcontents` (filled in
|
|
1585
|
+
one build, with the page numbers), Typst's `#outline()`, a Word TOC field (Word offers to update it when the file is opened) and,
|
|
1586
|
+
for every other writer (HTML, EPUB, Markdown, OpenDocument ...), a nested list of links to the headings down to level 3, with a
|
|
1587
|
+
bold "Contents" above it. `markup: [callouts, toc]` or `markup: true` for both; `--markup toc` for one run. A marker inside a
|
|
1588
|
+
sentence is text.
|
|
1589
|
+
|
|
1590
|
+
**Centred text** (v3.29, `markup: center`). `<center>` ... `</center>` around blocks (the closing tag in its own paragraph),
|
|
1591
|
+
`<div align="center">`, `<div style="text-align: center">`, a fenced `::: center` and, for writers that are not LaTeX, a raw
|
|
1592
|
+
`\begin{center}` ... `\end{center}` all centre what they hold: LaTeX's `center` environment, Typst's `#align(center)[...]`, a
|
|
1593
|
+
`text-align` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text as it is and say so once (no
|
|
1594
|
+
centring for a block there yet). `markup: [callouts, toc, center]` or `true` for all; `--markup center` for one run.
|
|
1595
|
+
|
|
1596
|
+
**Highlighted text** (v3.29, `markup: highlight`). `==marked text==` (across several words, with emphasis inside, over a line
|
|
1597
|
+
break) is highlighted: LaTeX with `soul`'s `\hl` in a pale yellow (plain text when `soul` is not installed), Typst with
|
|
1598
|
+
`#highlight[...]`, HTML, EPUB and `--to gfm` with `<mark>`; Pandoc's own Markdown output keeps `==...==`, and Word and OpenDocument
|
|
1599
|
+
keep the text and say once that it is not highlighted. A lone `==` or one inside code stays as written; a closing `==` followed by
|
|
1600
|
+
punctuation (`==end==.`) works. `markup: [callouts, toc, center, highlight]` or `true` for all; `--markup highlight` for one run.
|
|
1601
|
+
|
|
1602
|
+
**Blocks kept on one page** (v3.29, `markup: keep`). A fenced `::: keep` (also `nobreak`, `keep-together`), a div with
|
|
1603
|
+
`style="break-inside: avoid"` and, for writers that are not LaTeX, a raw `\begin{samepage}` ... `\end{samepage}` hold what they
|
|
1604
|
+
contain on one page where it fits: LaTeX's `samepage` environment, Typst's `#block(breakable: false)[...]`, a `break-inside:
|
|
1605
|
+
avoid` div in HTML, EPUB and the HTML engines' PDFs. Word and OpenDocument keep the text and say once that it is not held.
|
|
1606
|
+
`--markup keep` for one run.
|
|
1607
|
+
|
|
1608
|
+
**Landscape pages** (v3.29, `markup: landscape`). A fenced `::: landscape`, a div with `style="page: landscape"` and, for writers
|
|
1609
|
+
that are not LaTeX, a raw `\begin{landscape}` ... `\end{landscape}` put what they hold on pages turned sideways, the document
|
|
1610
|
+
going back to portrait after it: LaTeX with `pdflscape` (the page is rotated in the PDF; `lscape`, or no turning, when it is not
|
|
1611
|
+
installed), Typst with `#page(flipped: true)[...]`, WeasyPrint and the browsers with a named page (`@page landscape`: the browsers
|
|
1612
|
+
get the document's paper turned; WeasyPrint's is its own A4 unless your own `@page landscape` says otherwise). Calibre's PDF cannot
|
|
1613
|
+
name page types, and Word and OpenDocument have no sections made from here: they keep the text and say once that no landscape page
|
|
1614
|
+
was made. `--markup landscape` for one run.
|
|
1615
|
+
|
|
1616
|
+
**Where the appendix starts** (v3.29, `markup: appendix`). A raw `\appendix`, `<!-- appendix -->` or a heading with the class
|
|
1617
|
+
`{.appendix}` marks the start: the sections after it are lettered (A, B, A.1) in LaTeX (`\appendix`) and Typst (a heading
|
|
1618
|
+
numbering of letters and a counter reset). It matters for a document that numbers its sections (`--number-sections`); without
|
|
1619
|
+
numbers Typst gets nothing and LaTeX's `\appendix` changes nothing visible. Other writers keep their own numbering and say once
|
|
1620
|
+
that the lettering is not made.
|
|
1621
|
+
|
|
1622
|
+
**Showing the comments of the text** (v3.29, `show-comments`). An `<!-- HTML comment -->` is invisible in every output. With
|
|
1623
|
+
`pdfmd-options: {show-comments: true}` (or `--show-comments` for one run, `--no-show-comments` to switch it off; also a row in
|
|
1624
|
+
`pdfmd --setup`) each one is shown: a box labelled *Comment* in LaTeX, Typst, HTML, EPUB and the HTML engines' PDFs, a real Word
|
|
1625
|
+
comment in a `.docx` (anchored on the paragraph after it, so Word's review pane lists them), `[comment: ...]` in italics for one
|
|
1626
|
+
inside a paragraph. The Markdown family (`--to gfm`, `markdown`) keeps the comment as it is; OpenDocument and PowerPoint drop
|
|
1627
|
+
it, with a note once. pdfmd's own markers stay invisible (`<!-- pdfmd: ... -->`, `<!-- pagebreak -->`, `<!-- toc -->`,
|
|
1628
|
+
`<!-- appendix -->`), and so does an empty comment. It is off unless asked and is not one of the kinds `markup: true` turns on.
|
|
1629
|
+
|
|
1471
1630
|
**PDF images in HTML.** A browser does not show a PDF in `<img>`, an SVG it does. For an HTML build (a web page, an
|
|
1472
1631
|
EPUB, a PDF through WeasyPrint) every image that is a PDF, `` or `<img src="plot.pdf">`, is converted to
|
|
1473
1632
|
an SVG with poppler's `pdftocairo` (or `mutool`, `pdf2svg`, `inkscape`) and stays vector; the first page is used and the
|
|
@@ -1725,6 +1884,17 @@ document or its metadata files say (the command line beats all of them);
|
|
|
1725
1884
|
`translit:` is the romanization packs of the name lookup. `PDFMD_CONFIG=other.yaml`
|
|
1726
1885
|
uses another file, `PDFMD_CONFIG=` (empty) none.
|
|
1727
1886
|
|
|
1887
|
+
**Settings for a folder** (v3.29): a `.pdfmd/config.yaml` in a document's folder, or in any folder above it, has the same
|
|
1888
|
+
`options:` for everything under it. The order, strongest first: the command line, the document's `pdfmd-options`, its metadata
|
|
1889
|
+
files, the folder settings (the nearest folder first, then the ones above it), your global `config.yaml`, pdfmd's own defaults.
|
|
1890
|
+
`inherit: false` in a folder's file stops the walk upward there. A folder cannot set what belongs to this computer (`translit`,
|
|
1891
|
+
`setup-ui`, `disabled`): they are ignored with a `WARN`. A mapping such as `stamp:` or `backup:` in a folder's file stays off
|
|
1892
|
+
until it says `enabled: true`, as in the global file. A build lists the folder files it used on its `FOUND` line
|
|
1893
|
+
(`--verbose`: `AUTO SETTINGS`). A folder's options cannot name code (a Lua filter or a preamble is read from the document's own
|
|
1894
|
+
front matter only), a `.pdfmd/config.yaml` owned by another user (a shared `/tmp`) is not read, and a path in it (`css: house.css`)
|
|
1895
|
+
is relative to the document, as everywhere, not to the folder file. Writing the file from `pdfmd --setup DIR`, and carrying it in
|
|
1896
|
+
an attached source, are not done yet.
|
|
1897
|
+
|
|
1728
1898
|
```yaml
|
|
1729
1899
|
translit: [greek, hangul]
|
|
1730
1900
|
options:
|