我正在使用该dramatist
软件包排版戏剧剧本。使用 -command 创建角色\GCharacter
。我想自定义该命令,使其\NewPerson
对每个新创建的角色执行。
为此,我查找了dramatist.sty
系统上安装的并将的定义复制\GCharacter
到我的序言中,如下所示:
\renewcommand\GCharacter[3]{
\stepcounter{g\Roman{character}}
\global\@namedef{#3}{{\namefont #2}\xspace}
\global\n@me@ppend@nddef{#3}{\@ppendname}{%
\if@drverse
{\speakstab\speaksfont #2\speaksdel\par\nobreak\addvspace{-\parskip}}
\else
\item[#2\speaksdel]
\fi}
\global\n@me@ppend@nddef{gpersona@\Roman{character}}{%
@\Roman{g\Roman{character}}}{\castfont #1}
}
这是来自 -file 的确切定义dramatist.sty
。但是,LaTeX 抱怨:! You can't use \spacefactor in vertical mode.
在第一行我使用了\GCharacter
in。这怎么可能呢,因为与原始定义相比,我没有做任何更改?
在以下 MWE 中,错误发生在第 19 行:
\documentclass[a4paper]{scrartcl}
\usepackage{dramatist}
\usepackage{lipsum}
\renewcommand\GCharacter[3]{
\stepcounter{g\Roman{character}}
\global\@namedef{#3}{{\namefont #2}\xspace}
\global\n@me@ppend@nddef{#3}{\@ppendname}{%
\if@drverse
{\speakstab\speaksfont #2\speaksdel\par\nobreak\addvspace{-\parskip}}
\else
\item[#2\speaksdel]
\fi}
\global\n@me@ppend@nddef{gpersona@\Roman{character}}{%
@\Roman{g\Roman{character}}}{\castfont #1}
%\NewPerson
}
\begin{CharacterGroup}{TeX.SX}
\GCharacter{A Character}{A Character}{character}
\end{CharacterGroup}
\begin{document}
\DramPer
\lipsum[1] % Compilation fails with only \DramPer in document
\end{document}
关于如何修复该错误有什么线索吗?
答案1
它应该是:
\documentclass[a4paper]{scrartcl}
\usepackage{dramatist}
\usepackage{lipsum}
\makeatletter % here
\renewcommand\GCharacter[3]{
\stepcounter{g\Roman{character}}
\global\@namedef{#3}{{\namefont #2}\xspace}
\global\n@me@ppend@nddef{#3}{\@ppendname}{%
\if@drverse
{\speakstab\speaksfont #2\speaksdel\par\nobreak\addvspace{-\parskip}}
\else
\item[#2\speaksdel]
\fi}
\global\n@me@ppend@nddef{gpersona@\Roman{character}}{%
@\Roman{g\Roman{character}}}{\castfont #1}
%\NewPerson
}
\makeatother
\begin{CharacterGroup}{TeX.SX}
\GCharacter{A Character}{A Character}{character}
\end{CharacterGroup}
\begin{document}
\DramPer
\lipsum[1] % Compilation fails with only \DramPer in document
\end{document}
在 *.sty 文件中@
,是字母,而在普通的 *.tex 文件中则不是,因此其含义在本地切换。