![如何在 LaTeX 中有条件地定义新命令?](https://linux22.com/image/232013/%E5%A6%82%E4%BD%95%E5%9C%A8%20LaTeX%20%E4%B8%AD%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E5%AE%9A%E4%B9%89%E6%96%B0%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在尝试使用某个软件包的旧版本编译 LaTeX 代码。因此,由于未定义的命令,我遇到了一些问题。
我如何添加条件代码以便可以定义这个旧包版本的一些解决方法命令?
% I want something like this:
if command \foobar is not defined
\newcommand{\foobar}{FooBar}
% I don't need an "else" clause here, but it would be good
% to know how to add one, in case I need it in future
end if
答案1
LaTeX 内核命令\providecommand{\foobar}{FooBar}
正是您想要的。
答案2
我认为这\providecommand
就是你想要的,正如 lockstep 所说,但值得一提的是\@ifundefined
LaTeX 命令,它测试命令是否已定义,如果已定义则执行一些代码。它比只\providecommand
处理定义特定命令更灵活。下面是我在英语化一些命令时使用的简单示例:
\makeatletter
\@ifundefined{centre}{%
\newenvironment{centre}{\center}{\endcenter}%
}{}
\makeatother
因此,如果命令 \centre
未定义,则它定义环境 centre
。
答案3
这ifthen 包为此提供了一些易于使用的宏。例如:
\ifthenelse{\isundefined{\foobar}}{
%% Do this if it is undefined
}{
%% Do this if it is defined
}
您也可以使用纯 TeX 来完成此操作(不需要任何外部包):
\ifx\foobar\undefined
%% Do this if it is undefined
\else
%% Do this if it is defined
\fi
答案4
LaTeX 包装的 e-TeX 基元(显然)是\ifdefined
和\ifcsname
。使用方式如下:
\ifdefined \foobar \else
\newcommand{\foobar}{FooBar}
\fi
\ifcsname
如果需要用宏构造命令名,请使用:
\ifcsname foobar\endcsname \else
\newcommand{\foobar}{FooBar}
\fi
\ifdefined
和控制序列\ifcsname
在原始 tex 程序中不存在,但它们在我的 Ubuntu 系统上的所有 latex/xetex/pdftex 变体中都存在。