我在标题中使用“变量”,并希望通过组合\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 原始条件的逻辑都是相同的:它们是“一次性”测试,没有组合逻辑。有各种各样的“包装器”提供这种逻辑,最值得注意的是etoolbox
和expl3
,使用更类似“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
测试要么转换成一个值,要么什么都没有。