十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

pandoc 生成 PDF 时没有完整 TeX 发行版,如何用 BasicTeX 或 wkhtmltopdf 替代?

pandoc 生成 PDF 时没有完整 TeX 发行版,如何用 BasicTeX 或 wkhtmltopdf 替代? pandoc 生成 PDF 时没有完整 TeX 发行版如何用 BasicTeX 或 wkhtmltopdf 替代【免费下载链接】pandocUniversal markup converter项目地址: https://gitcode.com/gh_mirrors/pa/pandocpandoc 生成 PDF 时默认走 LaTeX 路线而完整的 TeX 发行版体积很大——文档明确提到macOS 上的完整 [MacTeX] 安装约占用 4 GB 磁盘空间。如果你只是想生成 PDF又不想装这么大的发行版pandoc 官方文档给出了两条替代路径在 macOS 上用BasicTeX一个较小的 MacTeX 精简发行版配合tlmgr按需补齐 pandoc 需要的包或者完全绕开 TeX通过 HTML 中间格式配合wkhtmltopdf生成 PDF。本文基于仓库内的 INSTALL.md、doc/faqs.md 和 MANUAL.txt 说明两条路径的安装、执行与验证方法。先确认 pandoc 的 PDF 生成机制要理解两条替代路径为什么可行先看 pandoc 生成 PDF 的默认行为来自 MANUAL.txt 的 Creating a PDF 一节pandoc test.txt -o test.pdf默认情况下 pandoc 用 LaTeX 生成 PDF因此要求系统里装有一个 LaTeX 引擎。文档同时说明pandoc 也可以把 ConTeXt、roff ms 或 HTML 作为中间格式来产出 PDF具体工具通过--pdf-engine选项指定。--pdf-engine接受的有效值为pdflatex、lualatex、xelatex、latexmk、tectonic、wkhtmltopdf、weasyprint、pagedjs-cli、prince、context、groff、pdfroff、typst。如果引擎不在 PATH 中可以直接写完整路径。各中间格式的默认引擎是-t latex或未指定格式pdflatex-t contextcontext-t htmlweasyprint其他选项包括prince、wkhtmltopdf、pagedjs-cli-t msgroff也就是说只要给-o xxx.pdf加上--pdf-engine就能切换整条生成链。下面两条路径分别对应缩小 TeX 安装和完全不用 TeX。路径一BasicTeX tlmgrmacOSdoc/faqs.md 直接回答了这个问题Do I really need to install a 1 GB TeX installation to produce a PDF using pandoc?——不需要。文档建议从 MacTeX 的 Basic TeX 发行版起步再用tlmgr安装 pandoc 所需的几个包包清单见 MANUAL.txt。这条路径适用于 macOS。1. 安装 pandoc 与 BasicTeXINSTALL.md 的 macOS 一节给出的 Homebrew 命令brew install pandoc brew install librsvg python homebrew/cask/basictex其中homebrew/cask/basictex就是 BasicTeXlibrsvg其rsvg-convert用于覆盖不支持 SVG 的格式python用于运行 Pandoc filters与 PDF 路径无直接关系可按需保留。文档同时建议由于完整 MacTeX 占用 4 GB改用 BasicTeX 或 TinyTeX并用tlmgr工具按需安装附加包。2. 用 tlmgr 补齐 pandoc 需要的 LaTeX 包MANUAL.txt 列出了使用 LaTeX 时必须可用的包所有现代 TeX Live 版本都自带。用 BasicTeX 起步时需要用tlmgr按需补装。tlmgr的安装命令形式参考 INSTALL.md 中的示例tlmgr install collection-fontsrecommended即tlmgr install 包名。无条件需要的核心包包备注amsfonts、amsmath、lm、unicode-math、iftex核心数学与字体fancyvrb、longtable、caption、booktabs代码块与表格排版bookmark、xcolor、soul书签、颜色、下划线按文档内容条件触发的包包触发条件listings使用了--listings选项multirow文档含跨多行的表格单元格graphicx文档含图片geometry设置了geometry变量setspace设置了linestretchbabel设置了langxeCJK/luatexja设置了CJKmainfont分别对应xelatex/lualatexfontspec使用xelatex或lualatex作为 PDF 引擎时framed代码高亮使用带彩色背景的方案时此外upquote、microtype、parskip、xurl、footnotehyper或footnote属于有则更好的可选包pandoc 不要求它们存在。3. 生成 PDF 并验证装好包后直接生成pandoc test.txt -o test.pdf文档给出的排查手段是查看中间表示把-o test.pdf换成-s -o test.tex输出 pandoc 生成的 LaTeX再用pdflatex test.tex单独测试。这样可以把问题定位到pandoc 生成的 LaTeX 内容还是LaTeX 环境缺包两层。如果编译时出现字体找不到的报错文档给出的处理命令是tlmgr install collection-fontsrecommended另外M1 Mac 上出现 Cannot allocate memory 错误时文档给出的解决办法是完全指定pdflatex路径pandoc -o my.pdf --pdf-engine/Library/TeX/texbin/pdflatex注意这条 BasicTeX 路径只覆盖 macOS。Linux 一节中文档的建议是通过包管理器安装 TeX Live例如 Debian/Ubuntu 的apt-get install texlive那属于完整安装不在本文避免完整发行版的目标之内。路径二wkhtmltopdf 走 HTML 中间格式如果你完全不想装 TeXdoc/faqs.md 给出的替代是produce PDFs via HTML andwkhtmltopdf。这条路径要求系统已安装wkhtmltopdf程序本身仓库文档未提供其安装命令。执行命令按 MANUAL.txt 的说明给.pdf输出加上--pdf-enginewkhtmltopdfpandoc test.txt -o test.pdf --pdf-enginewkhtmltopdfHTML 作为中间格式时输出样式用--css控制。wkhtmltopdf专属的变量通过-V传递包括footer-html、header-html页眉、页脚内容margin-left、margin-right、margin-top、margin-bottom页面边距papersize纸张尺寸这条路径的限制必须知道文档对 wkhtmltopdf 有两处明确的告诫写在此处以免读者踩坑排版质量FAQ 原文说明HTML/wkhtmltopdf与 groff ms 路线doesnt produce as nice typography as TeX, particularly when it comes to math——排版尤其是数学公式不如 TeX但对很多用途可以接受。安全MANUAL.txt 的安全一节指出--pdf-enginewkhtmltopdf与-f htmlraw_html组合会触发 wkhtmltopdf 的 SSRF 漏洞CVE-2022-35583footer-html、header-html元数据会直接作为--footer-html、--header-html参数传给 wkhtmltopdf用file:URI 可读取本地文件。文档同时注明 wkhtmltopdf 已处于 deprecated 状态其作者建议不要用未经信任的输入来运行它。因此这条路径只适合处理自己信任的文档。两条路径怎么选按文档给出的事实对比文档含数学公式、表格复杂、需要精细排版 → 走 BasicTeX 路径保留完整 LaTeX 排版能力代价是用tlmgr补装若干包文档以纯文本和简单结构为主、机器上完全不想引入 TeX → 走 wkhtmltopdf 路径代价是排版质量下降和安全注意事项。两者都可以用同一条验证方法确认问题出在哪一层pandoc -s -o test.tex或对应中间格式导出中间结果单独检查。若 BasicTeX 路径报字体缺失执行tlmgr install collection-fontsrecommended若 M1 上报 Cannot allocate memory改用完整路径的--pdf-engine/Library/TeX/texbin/pdflatex。更细的 PDF 样式变量LaTeX 变量、ConTeXt 变量等在 MANUAL.txt 的 Variables 一节中按中间格式分组列出。【免费下载链接】pandocUniversal markup converter项目地址: https://gitcode.com/gh_mirrors/pa/pandoc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表