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