代码优化:相当于 \ifdefempty 的布尔标记,可与 \OR 或 \AND 结合使用

代码优化:相当于 \ifdefempty 的布尔标记,可与 \OR 或 \AND 结合使用

我是一名新的 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 的宏,能够与\ORor结合\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 %%
    }%
}

相关内容