要使用screenplay包进入一些对话,我必须使用
\begin{dialogue}{Johnny} Some dialogue. \end{dialogue}
\begin{dialogue}{Jane} I see. \end{dialogue}
Run Code Online (Sandbox Code Playgroud)
一段时间后,它会变得有点乏味.是否可以指定自定义命令,以便我可以使用类似的东西
\dialogue{Johnny} Some dialogue.
\dialogue{Jane} I see.
Run Code Online (Sandbox Code Playgroud)
代替?
Ant*_*sky 12
事实上你可以得到你想要的东西:
\newcommand{\dialogueline}{\begingroup\catcode`\^^M=12 \dialogueline@EOL}
{\catcode`\^^M=12\gdef\dialogueline@EOL#1#2^^M{\begin{dialogue}{#1}#2\end{dialogue}\endgroup}}
Run Code Online (Sandbox Code Playgroud)
这段代码需要被\makeatletter保护 -由\makeatletter/ \makeatother(编辑:这意味着你放在\makeatletter定义之前,\makeatother之后)或.sty文件中包围.请注意,名为的环境dialogue定义了一个名为的命令\dialogue,因此您需要一个不同的名称.不要改变格式!
它的工作方式\dialogueline是一个不带参数的命令,而是扩展为多个序列.首先,一个组打开令牌,在其自己的范围内放置任何后续内容.第二,\catcode`^^M=12顺序.LaTeX为每个字母分配一个catcode:一个数字,表示它是什么类型.例如,反斜杠是catcode 0,命令名构造函数; 字母是catcode 11; 和非字母打印字符,例如at符号,是catcode 12.这个序列使^^M换行符具有catcode 12,因此我们可以与它进行交互.最后,我们写出了命令\dialogueline@EOL,它完成了繁重的工作.
接下来,我们定义\dialogueline@EOL.我们在换行符是catcode 12的组中这样做,就像\dialogueline扩展的位置一样.请注意,这就是为什么你不能用换行符破坏第二行 - 它将被解释为文本.接下来,我们定义\dialogueline@EOL采用两个参数,以换行符结束; 它通过获取第一个参数(您在大括号中传递)并将其作为参数传递给dialogue环境进行扩展,并将第二个参数(在第一个之后和行尾之前的所有内容)作为环境体传递.最后,\dialogueline@EOL结束打开的组\dialogueline,以便在其他^^M地方看不到对catcode的更改.鉴于此,你可以写
\dialogueline{Johnny} Some dialogue.
\dialogueline{Jane} I see.
Run Code Online (Sandbox Code Playgroud)
一切都应该有效.
试试这个:
\newcommand{\dialogueline}[2]{\begin{dialogue}{#1} #2 \end{dialogue}}
% Usage example:
\dialogueline{Johnny}{Some dialogue.}
\dialogueline{Jane}{I see.}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3281 次 |
| 最近记录: |