我想要形成一个宏,使我能够获得以下结果。
假设我想要L
,M
&N
在我的文档中处于活动状态。
我还希望角色p
在代码中具有功能,以便
- 如果
L
后面跟着 ,p
则会变为q
。 - 如果
M
后面跟着 ,p
则会变为r
。 - 如果
N
后面跟着 ,p
则会变为s
。
我可以p
这样定义性格吗?
@Red-Cloud 提供的代码很棒,但我有一个不同的设置,我最初将其排除在 MWE 之外,因为没有必要,但现在我发现有必要成为其中的一部分。这是我想要使用此代码的实际设置。
有一个字符“x”为活动字符设置了一个条件。该条件表示如果活动字符(在我们的例子中是 L、M 和 N)不是后跟“x”,然后在其后添加 X。
代码 -
\documentclass{article}
\makeatletter
\catcode`L=\active
\protected\def L{\bgroup a\futurelet\tmp\check}
\catcode`M=\active
\protected\def M{\bgroup b\futurelet\tmp\check}
\catcode`N=\active
\protected\def N{\bgroup c\futurelet\tmp\check}
\def\check{\ifx\tmp x\egroup\expandafter\@gobble\else X\egroup\fi}
\makeatother
\begin{document}
LMN
\end{document}
这会产生 -
在不更改此设置的情况下,我想向其中添加之前询问的设置(初始问题)。如果我LpMpNp
的输入中有我想要的内容qXrXsX
(查看条件集 1 和 2),可以吗?
答案1
\documentclass{article}
\begin{document}
\begingroup
\catcode`L=\active
\catcode`M=\active
\catcode`N=\active
\makeatletter
\def L{\@ifnextchar p{q\@gobble}{}}
\def M{\@ifnextchar p{r\@gobble}{}}
\def N{\@ifnextchar p{s\@gobble}{}}
\makeatother
Lp Lq Lr
Mp Mq Mr
Np Nq Nr
\endgroup
Lp Lq Lr
Mp Mq Mr
Np Nq Nr
\end{document}