这是能否使 LaTeX 产生文本输出?。发现这pdftotext
是可行的方法后,我很好奇,在 PDF 完成后,TeX 是否可能在 PDF 上调用该命令(可能是通过某种write18
黑客手段)。所以这接近是否可以使用单个命令来编译 *TeX 文档?但我只是想运行相当于
pdflatex doc.tex; pdftotext doc.pdf
但完全在 TeX 内部进行。所以,我理解它的作用是先生xelatex
成dvi
第一个,然后将其转换为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
。