在 pdflatex 命令行上使用 \input{filename} 的理由?

在 pdflatex 命令行上使用 \input{filename} 的理由?

在 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 就开始寻找xX作为中止该工作的答案。

    回答评论:但是,如果文件不存在,则两种情况都会抛出错误消息。pdflatex test && do something可以使用 pdfTeX 选项interaction=batchmode或 来避免命令链 ( ) 中的交互式提示--interaction=nonstopmode

缺点

  • 它比 还长filename
  • 在许多 shell 中,反斜杠需要特殊处理(引用、加倍)。

概括

在我看来,上述两个“优点”确实太弱了,不适合总是使用pdflatex \input{test}pdflatex test至少我尝试找到可能的原因。而将 TeX 内容放在前面的技巧\input值得记住。

相关内容