我正在将样式化的文本写入外部文件(使用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
;但显然,他们忘记对更改字体大小的命令应用类似的更改!