另一个问题与我所在大学奇怪的目录样式要求有关。目录中的常规章节需要使用全大写标题,附录需要使用常规大小写标题。我有一个非常优雅的 etoolbox 解决方案
\documentclass{memoir}
\makeatletter
\usepackage{etoolbox}
\patchcmd{\@chapter}%
{\addcontentsline{toc}{chapter}}%
{\let\f@rtocold\f@rtoc%
\def\f@rtoc{\uppercase\expandafter{\f@rtocold}}%
\addcontentsline{toc}{chapter}}%
{\typeout{Chapter Patch Succeeded}}%
{\typeout{Chapter Patch Failed}}
\makeatother
\begin{document}
\tableofcontents*
\chapter{One}
This is chapter 1.
\appendix
\chapter{Alpha}
This is appendix A.
\end{document}
但 PCTeX 6 似乎没有内置 e-TeX 支持(正在等待在 PCTeX 论坛上注册,以便我可以直接询问)。我自己不使用它,但这里有些人用,如果可能的话,我希望避免让他们更改 TeX 系统。
我无法使用 memoir 的内置\patchcommand
,因为\@chapter
有分隔参数。我尝试使用\Substitute*
from ted
,但尚未成功。将\makeatletter
和\makeatother
之间的命令替换为以下命令:
\usepackage{ted}
\Substitute*[\renewcommand{\@chapter}]{\@chapter}%
{\addcontentsline{toc}{chapter}}%
{\let\f@rtocold\f@rtoc%
\def\f@rtoc{\uppercase\expandafter{\f@rtocold}}%
\addcontentsline{toc}{chapter}}
我明白了Use of \@chapter doesn't match its definition.
如何说服\Substitute*
修改带有参数的命令?
答案1
由于\@chapter
需要(分隔的)参数,因此我们需要明确地写出它们。\Substitute*
扩展为具有正确参数\@chapter[#1]{#2}
的替换文本。然后它用您想要的东西替换。最后,我们执行定义。额外的括号是为了防止可选参数过早终止(当看到时)。我们使用双重哈希,因为在这一切中间的某个地方,ted 将最终操作存储到控制序列中。\@chapter
\addcontentsline{toc}{chapter}
##1]
\documentclass{memoir}
\makeatletter
\usepackage{ted}
\Substitute*[{\gdef\@chapter[##1]##2}]{\@chapter[#1]{#2}}%
{\addcontentsline{toc}{chapter}}%
{\let\f@rtocold\f@rtoc%
\def\f@rtoc{\uppercase\expandafter{\f@rtocold}}%
\addcontentsline{toc}{chapter}}
\makeatother
\begin{document}
\tableofcontents*
\chapter{One}
This is chapter 1.
\appendix
\chapter{Alpha}
This is appendix A.
\end{document}