使用 ted(或其他包)而不是 etoolbox 来修补回忆录中的命令?

使用 ted(或其他包)而不是 etoolbox 来修补回忆录中的命令?

另一个问题与我所在大学奇怪的目录样式要求有关。目录中的常规章节需要使用全大写标题,附录需要使用常规大小写标题。我有一个非常优雅的 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}

相关内容