我是一名新的 LaTeX 用户,正在寻求一些指导。
我希望优化以下代码,因为第 3 行和第 5 行不必要地重复,因为我使用的是\ifdefempty{}{}{}
,而不是里面的某些布尔等效检查\ifthenelse
。
\newcommand{\extlink}[3][]{
\ifdefempty{#3}{%
\hspace{-.005\textwidth}#2}{% <-- THIS LINE
\ifthenelse{\boolean{@suppresslinks} \OR \boolean{@forbots}}%
{\hspace{-.005\textwidth}#2}{% <-- THIS LINE
%% SOME CODE FOR ELSE BLOCK %%
}%
}%
}
\ifdefempty
我理解,如果我能结合使用等效的布尔标记,就可以轻松解决这个问题,\OR
如下所示:
\ifthenelse{\boolean{@suppresslinks} \OR \boolean{@forbots} \OR \isdefempty{#3} }%
事实上,下面的代码可以完美地运行\isempty
:
\ifthenelse{\boolean{@suppresslinks} \OR \boolean{@forbots} \OR \isempty{#3} }%
我正在寻求指导,以了解\isdefempty
我可以在这里使用的等效项是什么。如果没有现成的东西,我该如何创建一个返回布尔值 true 或 false 的宏,能够与\OR
or结合\AND
?
在我的用例中,大量代码重构可能不可行,因为此模式用于大型代码库。因此,我更喜欢一些\isdefempty
布尔标记解决方案。
为了演示,这就是我的调用方式\extlink
:
\extlink[]{I love Tex Exchange...}{\texurl}
其中\texurl
定义为:
\newcommand{\texurl}{https://tex.stackexchange.com/}
我需要\isdefempty
特别检查定义是否为空:
\newcommand{\texurl}{}
答案1
您可以使用xifthen
包,如下所示。具体来说,您可以使用该包的\isundefined
而不是\ifdefempty
,然后可以使用所需的布尔逻辑进行组合。虽然这两个命令并不完全等同,但我相信这对您的情况来说可能足够了(请参阅xifthen
文档了解详情)。
\usepackage{xifthen}
\newcommand{\extlink}[3][]{
\ifthenelse{\isundefined{#3} \AND \( \boolean{@suppresslinks} \OR \boolean{@forbots} \)}%
{\hspace{-.005\textwidth}#2}{%
%% SOME CODE FOR ELSE BLOCK %%
}%
}