我在使用 定义新脚注时遇到了问题\newfootnoteseries
。以下 MWE
\documentclass{memoir}
\newfootnoteseries{P}
\begin{document}
\footnote{Test1}
\footnoteP{Test2}
\footnoteP{Test3\ss}
\end{document}
生产
即,第一个\footnoteP
没有文本;第二个只有\ss
。第二个也会导致错误
/home/zach/tex/cwrc/sandbox/footnotetest.tex:8: Missing \endcsname inserted.
<to be read again>
\OT1\ss
l.8 \footnoteP{Test3\ss}
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.
/home/zach/tex/cwrc/sandbox/footnotetest.tex:8: Extra \endcsname.
\@nameuse #1->\csname #1\endcsname
l.8 \footnoteP{Test3\ss}
I'm ignoring this, since I wasn't doing a \csname.
我正在使用 pdfTeX 3.141592653-2.6-1.40.25 和 memoir 2023/08/21 v3.8.1
我认为这个错误是在 l. 8696 上,
\rule\z@\footnotesep\ignorespaces\@nameuse{foottextfont#1 ##1}%
应该##1
在}
答案1
讨厌的错误!宏\@footnotetextP
最终
\@nameuse {foottextfontP #1}
在其主体中,而不是
\@nameuse {foottextfontP}#1
因此脚注文本被视为宏名称的一部分,而不是排版,并且宏未定义,因此\relax
改为使用。然而,该\ss
位触发错误并最终被排版。
错误位于memoir.cls
\rule\z@\footnotesep\ignorespaces\@nameuse{foottextfont#1 ##1}%
应该是
\rule\z@\footnotesep\ignorespaces\@nameuse{foottextfont#1}##1%
对于您的情况,您可以修补生成的宏:
\documentclass{memoir}
\usepackage{xpatch}
\newfootnoteseries{P}
\makeatletter
\xpatchcmd\@footnotetextP
{\@nameuse {foottextfontP #1}}
{\@nameuse {foottextfontP}#1}
{}{}
\makeatother
\begin{document}
\footnote{Test1}
\footnoteP{\unexpanded{Test2}}
\footnoteP{\unexpanded{Test3\ss}}
\end{document}
提交错误报告。