在 tex.SX 中用户资料,我读过最佳实践建议
执行
pdflatex \input{filename}
而不是pdflatex filename
。
我总是在脚本和 Makefile 中直接使用后者。
有什么理由总是用什么pdflatex \input{filename}
来代替?
答案1
优点
如果有人想把 TeX 代码放在前面,这是一个很好的技巧。示例:
pdflatex '\def\foo{bar}\input{filename}' pdflatex '\includeonly{introduction}\input{filename}'
或内部
\write18
(shell 转义功能):\immediate\write18{\detokenize{pdflatex '\def\foo{bar}\input{filename}'}} \immediate\write18{\detokenize{pdflatex '\includeonly{introduction}\input{filename}'}}
e-TeX
\detokenize
阻止了内部宏的扩展\write
,参见问题。LaTeX 还可以更好地捕获错误消息,因为它首先检查文件并抛出适当的错误消息。
不带括号或在命令行上的 '\input' 的 TeX 行为将是:
pdflatex filename ! I can't find file `filename'. <*> filename (Press Enter to retry, or Control-D to exit) Please type another input file name:
然后你可以使用
Control-D
(Unix)或Control-Z
。或者使用文件x.tex
。或LaTeX 的工具包可用于此目的。LaTeX 则会抛出:
pdflatex '\input{filename} ! LaTeX Error: File `filename.tex' not found. Type X to quit or <RETURN> to proceed, or enter new name. (Default extension: tex) Enter file name:
然后 LaTeX 就开始寻找
x
或X
作为中止该工作的答案。回答评论:但是,如果文件不存在,则两种情况都会抛出错误消息。
pdflatex test && do something
可以使用 pdfTeX 选项interaction=batchmode
或 来避免命令链 ( ) 中的交互式提示--interaction=nonstopmode
。
缺点
- 它比 还长
filename
。 - 在许多 shell 中,反斜杠需要特殊处理(引用、加倍)。
概括
在我看来,上述两个“优点”确实太弱了,不适合总是使用pdflatex \input{test}
。pdflatex test
至少我尝试找到可能的原因。而将 TeX 内容放在前面的技巧\input
值得记住。