我有一个过渡系统,其中过渡需要许多参数来描述它。它最终看起来像这样:
A \xlongrightarrow[a_1; b_1; c_1]{a_2; b_2; c_2} B
因此很自然地我有一个如下的宏:
\newcommand{\step}[8]{#1 \xlongrightarrow[#3; #4; #5]{#6; #7; #8} #2}
我可以像使用它一样\step{A}{B}{a_1}{b_1}{c_1}{a_2}{b_2}{c_2}
好处是,当渲染的输出太长时,我可以\\
在宏的使用中挤进一个地方,这意味着
step{A}{\\B}{a_1}{b_1}{c_1}{a_2}{b_2}{c_2}
我得到了我想要的扩展:
A \xlongrightarrow[a_1; b_1; c_1]{a_2; b_2; c_2} \\B
但是,现在我需要 10 个参数,我会执行以下操作:
\documentclass{article}
\usepackage{extarrows} % defines \xlongrightarrow
\newcommand{\step}[9]{
\def\tempa{#1}%
\def\tempb{#2}%
\def\tempc{#3}%
\def\tempd{#4}%
\def\tempe{#5}%
\def\tempf{#6}%
\def\tempg{#7}%
\def\temph{#8}%
\def\tempi{#9}%
\stepcont
}
\newcommand{\stepcont}[1]{\tempa \xlongrightarrow[\tempc; \tempd; \tempe; \tempf]{\tempg; \temph; \tempi; #1} \tempb}
\begin{document}
\[
\step{A}{B}{a_1}{b_1}{c_1}{a_2}{b_2}{c_2}
\]
\end{document}
这真是太神奇了,但是现在我不能再\\
在参数前面添加内容来强制换行。
所以最后我的问题是:有没有一种方法可以让我为宏提供超过 9 个参数,并且仍然允许在宏中换行?
答案1
我猜你需要一个检查请求项目数量的宏。这里默认值是 3,但它可以是任何正常请求的数量。
\documentclass{article}
\usepackage{xparse}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\step}{O{3}mmmm}
{
#2 % source
\mvp_step:nnn { #1 } { #4 } { #5 }
#3 % target
}
\seq_new:N \l__mvp_step_top_seq
\seq_new:N \l__mvp_step_bot_seq
\cs_new_protected:Nn \mvp_step:nnn
{
\seq_set_split:Nnn \l__mvp_step_top_seq { ; } { #2 }
\seq_set_split:Nnn \l__mvp_step_bot_seq { ; } { #3 }
\int_compare:nNnF { \seq_count:N \l__mvp_step_top_seq } = { #1 }
{
\msg_error:nnxxx { mvp } { step }
{ above }
{ \seq_count:N \l__mvp_step_top_seq }
{ #1 }
}
\int_compare:nNnF { \seq_count:N \l__mvp_step_bot_seq } = { #1 }
{
\msg_error:nnxxx { mvp } { step }
{ below }
{ \seq_count:N \l__mvp_step_bot_seq }
{ #1 }
}
\xrightarrow
[\seq_use:Nn \l__mvp_step_bot_seq {;\,}]
{\seq_use:Nn \l__mvp_step_top_seq {;\,}}
}
\msg_new:nnnn { mvp } { step }
{
Bad ~ number ~ of ~ items
}
{
You ~ have ~ #2 ~ items ~ #1 ~ the ~ arrow ~ instead ~ of ~ #3
}
\ExplSyntaxOff
\begin{document}
$\step{A}{B}{a_1;b_1;c_1}{a_2;b_2;c_2}$
$\step[4]{A}{B}{a_1;b_1;c_1;d_1}{a_2;b_2;c_2;d_2}$
$\step[4]{A}{B}{a_1;b_1;c_1;d_1}{a_2;b_2;c_2}$ %%% error
\end{document}
这是控制台上的输出:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! mvp error: "step"
!
! Bad number of items
!
! See the mvp documentation for further information.
!
! For immediate help type H <return>.
!...............................................
l.54 $\step[4]{A}{B}{a_1;b_1;c_1;d_1}{a_2;b_2;c_2}
$ %%% error
? h
|'''''''''''''''''''''''''''''''''''''''''''''''
| You have 3 items below the arrow instead of 4
|...............................................