扩展 \input 内的变量

扩展 \input 内的变量

我需要动态地将正确的 .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
}

相关内容