多个嵌套的 \ifdefined 语句

多个嵌套的 \ifdefined 语句

我在标题中使用“变量”,并希望通过组合\ifdefined\@@author和来缩短代码\ifdefined\@group。在存储库中搜索“ifdefined 多个参数”等,没有得到有用的结果。我尝试了||不同的编程语言,但你可以想象…… :)

难道没有更简单的方法可以做到这一点吗?

\rhead{\small\color{darkgray2}%
    \ifdefined\@@author%
        \@@author%
        \ifdefined\@group%
            , %
        \fi%
    \fi%
    \ifdefined\@group%
        \@group%
    \fi%
    \ifdefined\@@date%
        \linebreak\@@date%
    \fi%
}

谢谢。

编辑(MWE):

\LoadClass{article}
\newcommand\group[1]{\def\group{#1}}
\author{Me}
\group{Group}
\title{Work Hygiene and Safety}
\date{18th~September~2018}

\RequirePackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}% 

\makeatletter
\rhead{
    \ifdefined\@author%
        \@author%
        \ifdefined\group%
            , %
        \fi%
    \fi%
    \ifdefined\group%
        \group%
    \fi%
    \ifdefined\@date%
        \linebreak\@date%
    \fi%
}
\makeatother
\begin{document} 
Hello
\end{document}

答案1

所有 TeX 原始条件的逻辑都是相同的:它们是“一次性”测试,没有组合逻辑。有各种各样的“包装器”提供这种逻辑,最值得注意的是etoolboxexpl3,使用更类似“LaTeX”的语法。在原始级别,可以使用\ifnum或来创建组合\ifodd,例如

\ifnum0%
  \ifdefined\@@author 1\fi
  \ifdefined\@group 1\fi
  >0 %
  % Code for 'at least one is true' case
\else
  % Code for 'neither is true' case
\fi

这利用了 TeX 在数字测试中不断扩展材料直到找到非数字(特别是这里的比较器)这一事实。因此,这两个\ifdefined测试要么转换成一个值,要么什么都没有。

相关内容