为什么传递给 pdflatex 的这两个选项中只有一个可见?

为什么传递给 pdflatex 的这两个选项中只有一个可见?

考虑文件define.tex

\documentclass{article}
\RequirePackage{changes}
\makeatletter
\@namedef{Changes@AuthorColor}{red}
\colorlet{Changes@Color}{red}
\makeatother
\begin{document}
\ifdefined\submit
submit macro is defined
\else
submit macro is not defined
\fi
\added{if these words are highlighted, this corresponds to draft
  option. not highlighted corresponds to final option}
\end{document}

灵感来自Will 对“将命令行参数传递给 LaTeX 文档”的回答, 和Martin 对“将参数传递给文档”的回答

我试过

pdflatex   
'\PassOptionsToPackage{final}{changes}\input{define}\def\submit{}\input{define}'    
define.tex

并且

pdflatex
'\def\submit{}\input{define}\PassOptionsToPackage{final}{changes}\input{define}'   
define.tex

在这两种情况下,我们都可以检查到只有第一个选项。我们可能期望这两种情况的结果都是“提交宏已定义”,并在下方突出显示,但实际上在一种情况下我们得到的是

“提交宏已定义”+突出显示(首先是 \def)

和另一个

“提交宏未定义”+无突出显示(首先是 \PassOptionsToPackage)

对我来说,这似乎是意料之外的行为。如果我使用两个类似的 \def,则不会有问题。例如

'\def\foo{}\input{define}\def\bar{}\input{define}'

与以下文件一样按预期工作。

\documentclass{article}
\begin{document}
\ifdefined\foo
foo macro is defined
\else
foo macro is not defined
\fi
\ifdefined\bar
bar macro is defined
\else
bar macro is not defined
\fi
\end{document}

即该文件具有

foo macro is defined bar macro is defined

2011 年 8 月 21 日编辑:我搞错了 foo 和 bar。由于\bar已经定义,所以这是一个糟糕的选择。感谢 TH 的澄清和回答主要问题。似乎如果我有一组选项传递给pdflatex像这样

pdflatex 'somestuff' 'somemorestuff\input{define}' 'yetmorestuff' [...]

那么 就看不到 'yetmorestuff' 选项pdflatex。如果这是正确的,那么我不明白这种行为。TH 说“第一次使用 \input{define} 时,TeX 解析到文件末尾,看到 \end{document} 然后停止。”

但是,选项传递通常不是这样工作的。有人能告诉我这里涉及的机制的背景吗?谢谢。

答案1

第一次使用时\input{define},TeX 会解析到文件末尾,\end{document}然后停止。

相关内容