我有一个自动生成目录的 latex 模板(我的大学制作了这个模板)。他们后来改变了格式要求,但没有提供更新模板的帮助。
我需要做的是每当 #2 = 76 时添加“{\noindent Chapter \hfill Page\par}”。这有效,但是我在目录顶部看到 viii = 76。
我的代码:
\ifnum #2=76
{\noindent Chapter \hfill Page\par}
\fi
有些页码是阿拉伯数字(如 1、2、3、...76),有些是罗马数字(如 viii)。我的想法是,由于目录有罗马数字和阿拉伯数字,因此 ifnum () = () 会中断,只会转储原始文本(viii=76)。
有什么想法可能导致这种情况发生吗?
有没有办法将我的 if 语句与另一个检查嵌套,以在评估 #2 之前验证它是否是一个数字?
非常感谢!
定义代码:
\renewcommand*\l@chapter[2]{%
\newcounter{tocNum}
\setcounter{tocNum}{76}
\ifnum \c@tocdepth >\m@ne
\addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\p@
\setlength\@tempdima{1.5em}%
\begingroup
%% My code
\ifnum #2=76
{\noindent Chapter \hfill Page\par}
\fi
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode %\bfseries
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak\dotfill \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\penalty\@highpenalty
\endgroup
\fi}
答案1
你想比较字面上地第二个参数为76
。
首先:删除\newcounter
和\setcounter
指令。你不需要这个(此外你也不想在每次调用时浪费一个新的计数器\l@chapter
)。
加载pdftexcmds
包并将代码更改为
\ifnum\pdf@strcmp{#2}{76}=\z@
{\noindent Chapter \hfill Page\par}%
\fi
<rant>
我无法理解为什么一本书的目录页顶部应该有“章节”和“页面”。还有什么这些部分会是什么?他们是否担心阅读论文的人都是文盲?或者担心论文导师(我猜不是文盲)会误以为这些数字是学生应该为这些章节支付的金额?
</rant>
答案2
您可以用\ifnum
稍微不同的方式来表述该条件:
\ifnum 76=0#2
{\noindent Chapter \hfill Page\par}
\fi
现在,如果#2
是非数字参数,则 76 不等于零。如果它是数字参数(例如 5),则测试结果\ifnum 76=05
为不成立。但\ifnum 76=076
返回 true。