考虑文件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}
然后停止。