pdfmd-cli 3.28.49__tar.gz → 3.29.8__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.8}/PKG-INFO +80 -9
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/README.md +79 -8
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd.py +976 -53
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8/pdfmd_cli.egg-info}/PKG-INFO +80 -9
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_cli.egg-info/SOURCES.txt +10 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_cli.egg-info/entry_points.txt +1 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_css/__init__.py +56 -9
- pdfmd_cli-3.29.8/pdfmd_lua/ebook.lua +51 -0
- pdfmd_cli-3.29.8/pdfmd_lua/ebook_input.lua +53 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pyproject.toml +2 -0
- pdfmd_cli-3.29.8/tests/test_browser_engine.py +114 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_build_record.py +1 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_calibre.py +6 -4
- pdfmd_cli-3.29.8/tests/test_calibre_markdown.py +138 -0
- pdfmd_cli-3.29.8/tests/test_calibre_targets.py +506 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_css.py +3 -2
- pdfmd_cli-3.29.8/tests/test_css_v2.py +148 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_doctor.py +13 -0
- pdfmd_cli-3.29.8/tests/test_ebook_input.py +156 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_engine_chain.py +37 -3
- pdfmd_cli-3.29.8/tests/test_install_calibre.py +223 -0
- pdfmd_cli-3.29.8/tests/test_install_core_tex.py +145 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_native.py +9 -2
- pdfmd_cli-3.29.8/tests/test_pan_tec.py +36 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_polish.py +5 -5
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_check/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_check/lint.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_chem/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_chem/__main__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_chem/batch.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_chem/render.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_chem/siunitx.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_cli.egg-info/dependency_links.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_cli.egg-info/requires.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_cli.egg-info/top_level.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_direct/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_direct/defaults.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_direct/html.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_direct/typst.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_edit/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_flat/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_flat/asciify.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_flat/keep.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_help/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_history/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_history/git.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_history/hst.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_history/versions.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_images/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_images/remote.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_images/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_images/svg.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/VENDORED.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/_kerning_data.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/assets/fonts/DejaVuSans-LICENSE.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/assets/fonts/DejaVuSans.ttf +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/ast.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/cidfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/embedded.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/embedded_metrics.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/emoji_font.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/html_filter.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/image_loader.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/layout.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/parser.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/pdf.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/py.typed +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/render.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/truetype.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_inkmd/url_filter.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_labels/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_labels/replay.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_labels/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/ascii.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/chem.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/chem_client.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/code.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/code_wrap.tex +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/csv_table.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/diagram.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/flat.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/graphicx.tex +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/graphviz.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/images.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/katex.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/mathjax.cjs +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/pagebreak.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/pdf_images.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/raw.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/select.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/table_width.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/title_meta.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/typst.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_lua/weasyprint.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_mhchem/LICENSE +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_mhchem/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_mhchem/parser.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/docx.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/docx_post.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/fragments.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/labels.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/odt.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/office.lua +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/properties.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/spec.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_office/units.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_raw/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_setup/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_setup/fancy.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_setup/inventory.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_setup/plain.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_setup/registry.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_tables/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_tables/convert.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_tables/scan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_tables/verify.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/article/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/article/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/article/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/article/refs.bib +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/parts/10-introduction.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/parts/20-methods.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/book/parts/30-results.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/notes/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/notes/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/notes/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/report/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/report/data.csv +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/report/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/report/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/slides/__name__.md +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/slides/description.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_templates/data/slides/next.txt +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/__init__.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/_catalog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/_scripts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/_tessdata_catalog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/colorfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/fonts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/install.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/plan.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/scripts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/tessdata.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/pdfmd_unicode/translit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/setup.cfg +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_api.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_apple_emoji.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_ascii.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_attach.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_attach_format.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_autolog.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_bopen.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_budget.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_cache_location.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_check.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_check_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_chem.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_code_blocks.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_compat.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_completion.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_config.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_csv_table.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_diagrams.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_direct.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_display_path.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_docx_tables.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_edit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_edit_pdf.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_embedding.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_engine_filters.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_flat.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_header_includes.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_help.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_history.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_images.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_install_diagram.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_install_ocr.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_install_python.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_jobs.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_katex_scale.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_keep_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_labels.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_latex_errors.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_lookup.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_lua_trust.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_markdown_features.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_mathfont.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_mathjax.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_mhchem.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_office.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_office_latex.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_old_python_syntax.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_package_helper.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_packaging.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_pagebreak.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_pdf_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_picture_cache_protocol.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_plot_cache.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_presets.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_raw.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_rawcode.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_reader.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_remote_csl.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_sections.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_setup.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_soffice_parts.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_standalone_source.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_table_widths.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_tables.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_templates.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_tessdata.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_texpackages.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_text_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_translit.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_typst_input.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/tests/test_unicode.py +0 -0
- {pdfmd_cli-3.28.49 → pdfmd_cli-3.29.8}/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.8
|
|
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.
|
|
@@ -1358,10 +1420,19 @@ code, pre { font-family: "JetBrains Mono" }
|
|
|
1358
1420
|
With `css-scope: all` (`pdfmd-options`, or `--css-scope all`; the default is `html`) the sheet is read for the other writers
|
|
1359
1421
|
too: those four rules become the paper, margins, font, size, line spacing, indent, link colour and code font that LaTeX,
|
|
1360
1422
|
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
|
-
|
|
1423
|
+
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not: tables, anything else).
|
|
1424
|
+
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`, `h1`-`h5`; the last one wins. A media
|
|
1425
|
+
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",
|
|
1426
|
+
`only` and `not` count, `(orientation: landscape)` is read against the sheet's own `@page` size, and a feature of the screen or of
|
|
1427
|
+
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
|
|
1428
|
+
and 12 pt) is named, not used. It is a small reader on purpose: a CSS cascade has no counterpart in LaTeX.
|
|
1429
|
+
|
|
1430
|
+
Headings (v3.29): `h1`-`h5` with a `color`, `font-size` (`em`, `%`, `pt`, `px`: of the body's size), `font-family`,
|
|
1431
|
+
`font-weight` or `font-style` are set for LaTeX too, as titlesec's starred formats (the numbering and the spacing stay the
|
|
1432
|
+
class's; `h1` is `\section`, `h2` `\subsection` ... `h5` `\subparagraph`; `h6` has no LaTeX level). It is done only for the plain
|
|
1433
|
+
article class, and never over a document that formats its headings itself: a `titlesec`, `sectsty`, KOMA or memoir command, or a
|
|
1434
|
+
`\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
|
|
1435
|
+
(and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
|
|
1365
1436
|
|
|
1366
1437
|
### Code: wrapping and line numbers
|
|
1367
1438
|
|
|
@@ -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.
|
|
@@ -1323,10 +1385,19 @@ code, pre { font-family: "JetBrains Mono" }
|
|
|
1323
1385
|
With `css-scope: all` (`pdfmd-options`, or `--css-scope all`; the default is `html`) the sheet is read for the other writers
|
|
1324
1386
|
too: those four rules become the paper, margins, font, size, line spacing, indent, link colour and code font that LaTeX,
|
|
1325
1387
|
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
|
-
|
|
1388
|
+
"body font-size 11pt -> fontsize=11pt" for each one it used, and names what it did not: tables, anything else).
|
|
1389
|
+
Only rules that say it plainly count: `@page`, `html`/`body`/`:root`, `a`, `code`/`pre`, `h1`-`h5`; the last one wins. A media
|
|
1390
|
+
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",
|
|
1391
|
+
`only` and `not` count, `(orientation: landscape)` is read against the sheet's own `@page` size, and a feature of the screen or of
|
|
1392
|
+
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
|
|
1393
|
+
and 12 pt) is named, not used. It is a small reader on purpose: a CSS cascade has no counterpart in LaTeX.
|
|
1394
|
+
|
|
1395
|
+
Headings (v3.29): `h1`-`h5` with a `color`, `font-size` (`em`, `%`, `pt`, `px`: of the body's size), `font-family`,
|
|
1396
|
+
`font-weight` or `font-style` are set for LaTeX too, as titlesec's starred formats (the numbering and the spacing stay the
|
|
1397
|
+
class's; `h1` is `\section`, `h2` `\subsection` ... `h5` `\subparagraph`; `h6` has no LaTeX level). It is done only for the plain
|
|
1398
|
+
article class, and never over a document that formats its headings itself: a `titlesec`, `sectsty`, KOMA or memoir command, or a
|
|
1399
|
+
`\section` of its own, in the preamble, the `header-includes` or a metadata file, is named in a `CSS` note and nothing is added
|
|
1400
|
+
(and when `titlesec` is not installed, one LaTeX warning says so). A family needs XeLaTeX or LuaLaTeX.
|
|
1330
1401
|
|
|
1331
1402
|
### Code: wrapping and line numbers
|
|
1332
1403
|
|