输出流中的 \footnotesize 生成意外的“未定义的控制序列”

输出流中的 \footnotesize 生成意外的“未定义的控制序列”

我正在将样式化的文本写入外部文件(使用newfile包)。我可以使用许多属性(例如)成功地对文本进行样式化\large\mdseries\itshape。但是,令我非常困惑的是,当我使用对文本进行样式化时\footnotesize,我收到意外的“未定义的控制序列”错误,我无法说出它为什么会出现:

(/compile/output.nameofstream
! Undefined control sequence.
l.1 ... {10}{12}\selectfont \abovedisplayskip 10\p
                                                  @ plus2\p@ minus5\p@ \abov...

以下 MWE 编译良好,并在外部文件和输出中生成适当样式的文本。外部文件包含:

\relax \fontsize {14.4}{18}\selectfont \mdseries \itshape Text to be styled

但是当我取消注释时\renewcommand{\styleForText}{\footnotesize},我收到上述错误消息,并且外部文件包含:

\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip Text to be styled

我从来没想到这\footnotesize会导致与 如此不同的行为\large。发生了什么事?

\documentclass[12pt]{article}
\usepackage{newfile}
\newcommand{\streamName}{nameofstream}
\newcommand{\sendStyledTextToStream}[1]{%
    \addtostream{\streamName}{\styleForText#1}%
}
\newcommand{\printStream}{%
    \closeoutputstream{\streamName}%
    \input{\jobname.\streamName}%
}
\newcommand{\styleForText}{\large\mdseries\itshape}
%\renewcommand{\styleForText}{\footnotesize}
\begin{document}
\newoutputstream{\streamName}
\openoutputfile{\jobname.\streamName}{\streamName}
\sendStyledTextToStream{Text to be styled}
\printStream
\end{document}

答案1

我正在回答我自己的问题,以便结束这个问题。一位评论者 (@GuM) 在评论中回答了这个问题,但从未将其转化为答案。

他的解决方案是:使用\protect\footnotesize

他进一步解释道:

最好也\protect声明\large一下;在这种特殊情况下,它不会出现同样的问题,因为它的扩展恰好不包含使用@ 字符的“内部”命令,与相反\footnotesize。另一方面,您可能发现了一个错误:几年前,用于更改字体样式的命令(例如\itshape\mdseries……)变得健壮,因此不再需要编辑\protect;但显然,他们忘记对更改字体大小的命令应用类似的更改!

相关内容