有人能帮忙解码底部的代码吗?请注意,该代码是我找到的论文自定义类的一部分。
具体来说:
\def\@degreeyear{#1}\if@cyrset\else\def\@copyrightyear{#1}\fi
- 有人可以一步一步解释一下这一行的作用吗?
\if@cyrset
当它始终为假时, 其目的是什么?为什么不只是这样\def\@degreeyear{#1}\def\@copyrightyear{#1}\fi
,尽管我仍然不知道它应该做什么?- 为什么是
\def\@degreeyear{\number\month}
同月? - 为什么
\@degreeyear
定义了两次?(作者在评论中说,当\degreeyear
不使用时,使用当前年份。但即使\def\@degreeyear{\number\year}
使用了,我仍然看不到条件逻辑)。 - 一般来说,
\def
结束定义在哪里(可能是空间?)?
代码:
\def\@degreeyear{\number\month}
\def\@degreemonth{\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi}
\def\@copyrightyear{\number\year}
\newif\if@cyrset
\@cyrsetfalse
\newcommand{\degreeyear}[1]
{\def\@degreeyear{#1}\if@cyrset\else\def\@copyrightyear{#1}\fi}
\newcommand{\degreemonth}[1]{\def\@degreemonth{#1}}
\newcommand{\copyrightyear}[1]{\def\@copyrightyear{#1}\@cyrsettrue}
答案1
该类为\@degreeyear
、\@degreemonth
和定义了默认值\@copyrightyear
。我不确定为什么\@degreeyear
而\number\month
不是预期的\number\year
,这可能是疏忽。
然后,它定义一个条件来区分版权年份是否由用户设置,并继续定义用于设置日期的用户级命令。
如果用户有
\degreeyear{2020}
则宏\@degreeyear
定义为展开为2020
。 的值\@copyrightyear
不会改变,除非\if@cyrset
为假。
如果用户有
\copyrightyear{2019}
然后\@copyrightyear
设置为 2019 并\if@cyrset
设置为 true。
\def
替换文本中的命令在\newcommand{\degreeyear}
定义被吸收时不执行,只有\degreeyear
执行时才执行。
结果是,无论按何种顺序发出命令,都会得到正确的结果。不发出命令\copyrightyear
将设置\@copyrightyear
为与 相同的值\@degreeyear
。
让我们看看为什么。在类加载结束时,\if@cyrset
返回 false 分支。我假设至少\degreeyear{2020}
出现在文档序言中。有三种情况:
- 只是
\degreeyear{2020}
\degreeyear{2020}\copyrightyear{2019}
\copyrightyear{2020}\degreeyear{2020}
在第一种情况下\@degreeyear
,和\@copyrightyear
都设置为 2020 年。
在第二种情况下,\degreeyear{2020}
的操作与第一种情况相同,但后面的\copyrightyear{2019}
命令会覆盖先前分配给 的值\@copyrightyear
。\@cyrsettrue
位不执行任何操作。
在第三种情况下,\@copyrightyear
设置为 2019 并且\if@cyrset
设置为返回 true 分支。因此\degreeyear{2020}
只会设置\@degreeyear
并跳过设置为\@copyrightyear
。
这样做是为了避免要求用户按特定顺序指定\degreeyear
和\copyrightyear
。后一个命令是可选的,因为如果没有给出,的设置\@copyrightyear
将与的设置相同\@degreeyear
。
该类@
大概会使用 -macros 来排版标题页。