我尝试用 LaTeX 进行一些编程,发现它\ifx
是预定义的,因为我收到了以下错误:
\documentclass[10pt]{book}%
\newif\ifx
\xtrue
\begin{document}
\end{document}
然后我发现有一种方法可以从这个答案中检查命令是否存在:
我如何通过名称检查 Latex 或 Plain Tex 中的命令是否存在
使用它来检查\ifx
:
\documentclass[10pt]{book}%
\newcommand{\checkfor}[1]{%
\ifcsname#1\endcsname%
... command '#1' exists ...%
\else%
... command '#1' does not exist ...%
\fi%
}
\begin{document}
\checkfor{ifx}\par
\end{document}
编译上述内容确实表明command \ifx exists
。
但是如何获取所有\ifXXXXX
存在的 s 的列表?我需要\if
在代码中使用大量 s 来自定义构建,并且需要创建大量新的布尔变量。如果有一个列表,我可以将其粘贴在我电脑旁边的墙上,并在使用新命令之前查看它,而不是每次都出现错误或必须使用代码进行检查。
答案1
该\newif
命令不检查条件是否已经存在;假设程序员\newif
知道他/她在做什么。
如果您想要一个类似的界面\newcommand
,请加载ifthen
并使用\newboolean
;在这种情况下
\newboolean{x}
会告诉你
! LaTeX Error: Command \ifx already defined.
Or name \end... illegal, see p.192 of the manual.
etoolbox
和也一样\newbool
。
您可以在 TeXbook 或 TeX by Topic 中找到原始条件列表。将 e-TeX 条件添加到其中
\ifdefined
\ifcsname
\iffontchar
在 e-TeX 手册 ( texdoc etex
) 中,您可以找到完整的列表
已经加载的包可能已添加到列表中。
有些引擎也会添加到列表中;例如pdftex
添加
\ifincsname
\ifpdfprimitive
\ifpdfabsnum
\ifpdfabsdim
条件\ifpdfprimitive
在\ifprimitive
XeTeX 中。同样,LuaTeX 有\ifprimitive
、\ifabsnum
和\ifabsdim
。两个引擎共享\ifincsname
。