如何创建创建新的 if 命令的命令?

如何创建创建新的 if 命令的命令?

我想从文件中加载参数(用于条件编译)。我写了命令参数创造新的如果命令并从文件读取参数,包含以下行:

\paramnametrue % or false

我的参数命令:

\newcommand{\param}[1]{\newif\if#1 \IfFileExists{#1}{\input{#1}}{}}

问题是当我写

\param{A}

在外面文档我得到的环境

! LaTeX Error: Missing \begin{document}.

以及内部文档我得到的环境

A

在我的文档中。我该如何让它工作?我该如何创建不处理文本命令?

答案1

您不能通过简单地键入来构建控制序列名称\if#1,因为\if它是一个单个标记。

您有几种可能。第一种没有软件包:

\newcommand{\param}[1]{%
  \expandafter\newif\csname if#1\endcsname
  \IfFileExists{#1}{\input{#1}}{}%
}

这样做的缺点是,如果条件已经存在,则不执行任何检查。第二种可能性是etoolbox

\usepackage{etoolbox}
\newcommand{\param}[1]{%
  \newboolean{#1}%
  \IfFileExists{#1}{\input{#1}}{}%
}

的作用\newboolean与 类似\newif,因此在\param{A}条件\ifA和命令之后将定义\Atrue\Afalse。前一种解决方案也是如此,但这里还会执行重复定义检查。如果您不想进行检查,请使用\provideboolean

答案2

如果#1是,A那么\if#1就不是单个 token,\ifA而是两个 token,\if A所以你最终会重新定义,\if这并不好。你想要

\expandafter\newif\csname if#1\endcsname

构造\ifA令牌并将其传递给\newif

相关内容