我正在使用dramatist
包,我想让某些角色用斜体或小型大写字母,以区分它们。我当前的解决方案是创建一个自定义环境来包装speaks
环境并将其放入斜体,但我想知道是否还有更优雅的解决方案。
答案1
以下 MWE 提供了一种实现,\characterfont
在宏的末尾添加了一个额外的宏\xxxspeaks
。使用\Character{name}{abbreviation}
调用,您可以将其重新定义\characterfont
为参数的一部分name
。使用辅助宏,\perfont
您可以进行一次性定义,即定义\characterfont
为字体命令,然后进行自我重新定义\normalfont
。我把这是否优雅留给读者判断。
梅威瑟:
\documentclass{article}
\usepackage{dramatist}
\def\characterfont{\normalfont} % initial setting
\makeatletter % copied from the dramatist.sty source code
\def\@character#1#2{%
\@namedef{#2}{{\namefont #1}\xspace}
\n@me@ppend@nddef{#2}{\@ppendname}{%
\normalfont
\if@drverse
{\speakstab\speaksfont{#1}\speaksdel\par\nobreak\addvspace{-\parskip}}
\else
\item[#1\speaksdel]
\fi\characterfont}% added extra command here
}
\makeatother
% use the font setting one time and switch to normalfont on next call
% needed to reset the value for characters that don't set the font explicitly
\def\perfont#1{%
\gdef\characterfont{#1\gdef\characterfont{\normalfont}}%
}
\begin{document}
% add font settings to character names
\Character{Alice\perfont{\itshape}}{ali}
\Character{Bob}{bob}
\Character{Charlie\perfont{\scshape}}{cha}
\begin{drama}
\alispeaks
Hi Bob!
\bobspeaks
Hi Alice! Have you seen Bob?
\chaspeaks
I'm not here.
\end{drama}
\end{document}
结果: