TeX 可以对其生成的 PDF 进行后期处理吗?

TeX 可以对其生成的 PDF 进行后期处理吗?

这是能否使 LaTeX 产生文本输出?。发现这pdftotext是可行的方法后,我很好奇,在 PDF 完成后,TeX 是否可能在 PDF 上调用该命令(可能是通过某种write18黑客手段)。所以这接近是否可以使用单个命令来编译 *TeX 文档?但我只是想运行相当于

pdflatex doc.tex; pdftotext doc.pdf

但完全在 TeX 内部进行。所以,我理解它的作用是先生xelatexdvi第一个,然后将其转换为pdf

这只是出于好奇,我完全意识到我上面给出的 shell 命令几乎肯定是执行此操作的最简单的方法,并且在向其他人解释要做什么(因为我预计与这个项目有关)时,上面的内容将比“pdflatex使用-enable-shell-escape选项运行”更简单。

为了与 Taco 的回答有所不同是否可以使用单个命令来编译 *TeX 文档?,我希望能够在样式文件中向用户隐藏这一点。

答案1

跟进 Bruno 和 Will 之间的评论,并加入一些向文档传递参数,我想到了以下几点:

\documentclass{article}

\expandafter\ifx\csname itexflag\endcsname\relax
\immediate\write18{pdflatex "\noexpand\def\noexpand\itexflag{} \noexpand\input{\jobname.tex}"; pdftotext \jobname.pdf}
\fi

\begin{document}
This is some text.
\end{document}

它必须用 来调用pdflatex -shell-escape。我认为应该用 来&&测试运行是否成功pdflatex,而不是;。与威尔所说的不同,我扔掉文件的其余部分,但继续处理它。主要是因为我不知道该怎么扔掉它!但也因为我担心第一的 pdflatex运行(应该不会产生任何输出)可能会破坏由第二 pdflatex(它应该产生输出,但在第一个输出之前就结束了)。虽然我的实验表明情况并非如此,但我认为允许编译继续进行没有任何危险。(当然,如果我真的只对文本输出感兴趣,那么我不在乎那里是否有 PDF,但拥有 PDF 和文本都有好处:例如,从 PDF 读取文本比通过less终端读取文本更容易。)

答案2

您可以使用 :

pdflatex -halt-on-error doc.tex && pdftotext doc.pdf

如果pdflatex成功,那么pdf转文本被调用,请注意我替换了经过&&

另一方面,你可以使用命令制作,您创建一个名为Makefile使用以下内容您就完成了(使用制表符,没有空格):

doc.txt: doc.pdf
    pdftotext 文档.pdf
doc.pdf: doc.tex
    pdflatex 文档.tex

从现在起你应该只跑制作

答案3

对于 LuaLaTeX。使用wrapup_run回调(这个想法可以在例如Henri Menke 的回答对 PDF 进行后处理以生成 SVG)。

%! TEX program = lualatex
\documentclass{article}
\usepackage[abspath]{currfile}
\usepackage{luacode}
\begin{document}

123

\begin{luacode*}
luatexbase.add_to_callback("wrapup_run", function()
    os.execute("pdftotext \""..tex.jobname..".pdf\"")
end, "final callback to run pdftotext")
\end{luacode*}

\end{document}

用 编译lualatex -shell-escape a.tex

相关内容