我正在尝试创建一个screenplay
使用非常简单的语法来创建对话的类,和将其转储为纯文本文件以用于字幕。为了划分字幕部分&
,我使用^
设置新的扬声器,如下所示:
\documentclass{article}
\catcode`\^=13
\def^#1: {\par \textbf{#1:}}
\catcode`\&=13
\def&{\par \hspace{10pt}}
\begin{document}
^Alice: &Hello Bob. &What's up?
^Bob: &Nothing, really. &Goodbye.
\end{document}
现在我想获取介于 之间的文本&...&
(即从&
到 紧接着下一个 之前的文本&
,因此&a&b&c
应扩展为\foo{a}\foo{b}\foo{c}
),以便将其与运行索引一起保存到我的文本文件中。因此我尝试了\bgroup
/egroup
如下:
\documentclass{article}
\usepackage{color}
\def\testcommand{\textcolor{blue}}
\catcode`\^=13
\def^#1: {\egroup \par \textbf{#1:} \bgroup}
\catcode`\&=13
\def&{\egroup \par \hspace{10pt} \testcommand\bgroup}
\begin{document}
\bgroup
^Alice: &Hello Bob. &What's up?
^Bob: &Nothing, really. &Goodbye.
\egroup
\end{document}
而且它似乎有效,因为它\textcolor
不只是为下一个字母着色,而是为整行着色,但是当我使用\def\testcommand#1{(#1)}
它时,它会用一个空参数调用(产生()你好,鲍勃。()什么……)。
我猜这与我使用\begingroup
/时的情况有关\endgroup
我的 \testcommand
没什么改变,只是\textcolor
打破了Extra }, or forgotten \endgroup
第一点&
。
color.sty
他们使用了我\def\textcolor#1#
从未见过的(当我将它与我的一起使用时,testcommand
它会中断\begin{document} ended by \end{)}
。那是什么魔力?很难用谷歌搜索……
我的其他尝试\def&{ \testcommand{#1} }
也不起作用,因为它吃掉了下一个&
......(是否存在某种前瞻?所以我可以使用\def&
和吃掉代币直到下一个&
或^
?)
任何指点都值得赞赏!
答案1
你的帖子不知怎么地出现了too many questions
溢出错误。让我试着回答一下:你不能使用 将参数传递给宏\testcommand\bgroup <argument>\egroup
。这只会传递\bgroup
给你的\testcommand
。
是的,您的定义\def&{ \testcommand{#1} }
确实如此:它查找符号之间的文本&
,并将&<some text>&
其替换为 \testcommand{#1}
。也许您正在寻找类似这样的东西:
\documentclass{article}
\def\testcommand#1{(#1)}
\catcode`\^=13
\def^#1: {\par \textbf{#1:}}
\catcode`\&=13
\def&{\ifx\relax#1\relax\else
\par \hspace{10pt} \testcommand{#1} \expandafter&\fi}
\begin{document}
^Alice: &Hello Bob. &What's up?
^Bob: &Nothing, really. &Goodbye. &&
\end{document}
请注意,我用来&&
表示脚本的结束。
至于你的问题\def\textcolor#1#
,这将创建\textcolor
一个接受一个参数的宏界定为 {
. 因为定义是
\def\textcolor#1#{\@textcolor{#1}}
这意味着您可以使用\textcolor<color-model>{...
,这将扩展为\@textcolor{<color-model>}{...
。请注意,<color-model>
作为可选参数,不能包含{
。
答案2
这对我有用:
\documentclass{article}
\catcode`\^=13
\catcode`\&=13
\def^#1: #2\\{\par \textbf{#1:} #2 &&}
\def\testcommand#1{(#1)}
\def&{%
\ifx\relax#1\else%
\par\hspace{10pt}%
\testcommand{#1}%
\expandafter&%
\fi%
}
\begin{document}
^Alice: &Hello Bob. &What's up?\\
^Bob: &Nothing, really. &Goodbye.\\
\end{document}