我需要动态地将正确的 .tex 文件输入到我的文档中。我编写了以下代码,该代码仅在明确写入 2019 而不是“\realyear{\season}”时才有效。在 \input 中,所有新定义的命令都可以工作,但具有一个参数的命令(即 \realyear)使文档无法编译(错误为“\filename@simple 的参数有一个额外的 }”)。这是为什么?如何克服这个问题?
\def \myfolder {../../../../../trial}
\def \season {Spring}
\def \yearstart{2018}
\def \yearfinish{2019}
\newcommand{\realyear}[1]{%
\ifthenelse{\equal{\detokenize{#1}}{\detokenize{Spring}}}
{\yearstart}
{\yearfinish}%
}
\input{\myfolder/trialfolder/\season\realyear{\season} common}
答案1
该\ifthenelse
命令不能通过扩展起作用,因此它不能在该位置起作用。
虽然\pdfstrcmp
有效,但它有几个缺点:它不是“引擎独立的”并且语法很奇怪。
可以使用etoolbox
\usepackage{etoolbox}
\newcommand{\realyear}[1]{\ifstrequal{#1}{Spring}{\yearstart}{\yearend}}
或者expl3
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_eq:NN \equalstringTF \str_if_eq:nnTF
\ExplSyntaxOff
\newcommand{\realyear}[1]{\equalstringTF{#1}{Spring}{\yearstart}{\yearend}}
答案2
您需要一个可扩展的选项来返回\yearstart
或\yearfinish
。这是一个选项:
\def\season{Spring}
\def\yearstart{2018}
\def\yearfinish{2019}
\newcommand{\realyear}[1]{%
\ifnum\pdfstrcmp{#1}{Spring}=0
\yearstart
\else
\yearfinish
\fi
}