我是 Latex 的新手。我想将命令行参数(可能更多)传递给\newcommand
宏并期望得到如下所示的输出。
if input is 1
/include {1.tex}
else if input is 2
/include {2.tex}
else if input is 3
/include {3.tex}
else if input is 1 and 2
/include {1.tex}
/include {2.tex}
else if input is 1 and 2 and 3
/include {1.tex}
/include {2.tex}
/include {3.tex}
等等。我听说有些xkeyval, xargs
软件包是这样做的。但我不确定它的实现。
我如何才能为 latex 提供过多的参数?我如何才能解析/区分参数,然后相应地传递?
答案1
以下是一个文件示例umaraman.tex
:
\documentclass{article}
\makeatletter
\ifdefined\umafiles\else\let\umafiles\@empty\fi
\newcommand{\umainput}[1]{%
\ifx\umafiles\@empty\input{#1}\else
\@for\next:=\umafiles\do{%
\ifnum\pdfstrcmp{#1}{\next}=\z@\input{#1}\fi
}
\fi}
\makeatother
\begin{document}
\umainput{uma1}
\umainput{uma2}
\umainput{uma3}
\umainput{uma4}
\umainput{uma5}
\end{document}
当然,文件可以按你的意愿命名。如果你从命令行调用
pdflatex "\def\umafiles{uma1,uma3}\input{umaraman.tex}"
仅uma1
输入uma3
。如果您改为正常调用
pdflatex umaraman.tex
所有文件都将被输入。