还有一个关于编译时传递参数的问题。我以为我有一个很好的(对我来说)解决方案,通过使用不同的作业名进行编译,并根据作业名进行条件编译,使用 etoolbox 和 \ifdefstring;但它不起作用。以下代码有什么问题?似乎 \ifdefstring 总是计算为 false。
%
% Save this file as A.tex
% compile it with 'latex A.tex'
% compile it again with 'latex -jobname B A.tex'
% you end up with A.dvi and B.dvi.
%
\documentclass{article}
\usepackage{etoolbox}
\begin{document}
The current jobname is: \jobname
\ifdefstring{\jobname}{A}{This file should be named A.dvi}%
{This file should be named B.dvi}
\end{document}
编辑:实际上,我不明白所提出的答案(我尝试过但没有成功):我应该说我不是 TeXpert,只是 LaTeX 用户。我想得到一个关于 etoolbox 包用法的答案,据我所知,它是 LaTeX3 中此类事务的实现部分。我使用 etoolbox 的指令编写了上述代码,它表示\ifdefstring{<command>}{<string>}{<true>}{<false>}
根据命令是否与字符串匹配来执行 true 或 false。我猜问题是这\jobname
不是 LaTeX 意义上的命令,我试图将\newcommand{\Jobname}{\jobname}
其定义为“命令化”,但没有成功。我认为,既然不是 TeXpert 的 LaTeX 用户浏览此论坛,如果可能的话,最好有一个完整的 LaTeX 解决方案。谢谢大家(很抱歉这么晚才进行这项必需的编辑,我离线了几天)。
答案1
这应该有效:
\documentclass{article}
\def\jobnameA{A}
\begin{document}
The current jobname is: \jobname
\if\jobnameA\jobname
This file should be named A.dvi
\else
This file should be named B.dvi
\fi
\end{document}