是否可以使用包或其他东西来加快输入排列的速度?我现在必须输入$(a,b,c,d)$
最佳情况,但我想做类似的事情\Pm{a b c d}
。我可以这样做吗?
答案1
它似乎并不比(a,b,c)更容易输入,但是
\documentclass{article}
\def\pm#1{$(\xpm{}#1 ! )$}
\def\xpm#1#2 {\ifx!#2\else#1#2\expandafter\xpm\expandafter,\fi}
\begin{document}
\pm{a b c}
\end{document}
或者不带空格分隔符:
\documentclass{article}
\def\pm#1{$(\xpm{}#1 ! )$}
\def\xpm#1#2{\ifx!#2\else#1#2\expandafter\xpm\expandafter,\fi}
\begin{document}
\pm{abc}
\pm{a{bc}de}
\end{document}
答案2
您可以使用我的答案的变体来排列循环符号
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\Pm}{ O{~} m O{,} }
{
(
\jeroen_cycle:nnn { #1 } { #2 } { #3 }
)
}
\seq_new:N \l_jeroen_cycle_seq
\cs_new_protected:Npn \jeroen_cycle:nnn #1 #2 #3
{
\seq_set_split:Nnn \l_jeroen_cycle_seq { #1 } { #2 }
\seq_use:Nn \l_jeroen_cycle_seq { #3 }
}
\ExplSyntaxOff
\begin{document}
$\Pm{1 2 3}$
$\Pm[,]{1,2,3}[\;]$
$\Pm{1 2 3}[;]$
$\Pm[,]{1,2,3}$
$\Pm{1 2 3}[;]$
\end{document}
前导可选参数是输入分隔符(默认为空格),尾随的参数是输出分隔符(默认为逗号)。
或者,你可以设置一个键值接口:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\keys_define:nn { jeroen/perms }
{
input-separator .tl_set:N = \l_jeroen_perms_input_separator_tl,
input-separator .initial:n = { ~ },
output-separator .tl_set:N = \l_jeroen_perms_output_separator_tl,
output-separator .initial:n = { , },
}
\NewDocumentCommand{\Pm}{ O{} m }
{
(
\group_begin:
\keys_set:nn { jeroen/perms } { #1 }
\jeroen_cycle:n { #2 }
\group_end:
)
}
\NewDocumentCommand{\permset}{ m }
{
\keys_set:nn { jeroen/perms } { #1 }
}
\seq_new:N \l_jeroen_cycle_seq
\cs_new_protected:Npn \jeroen_cycle:n #1
{
\seq_set_split:NVn \l_jeroen_cycle_seq \l_jeroen_perms_input_separator_tl { #1 }
\seq_use:NV \l_jeroen_cycle_seq \l_jeroen_perms_output_separator_tl
}
\cs_generate_variant:Nn \seq_set_split:Nnn { NV }
\cs_generate_variant:Nn \seq_use:Nn { NV }
\ExplSyntaxOff
\begin{document}
$\Pm{1 2 3}$
$\Pm[output-separator=\;]{1 2 3}$
$\Pm[output-separator=;]{1 2 3}$
$\Pm[input-separator={,}]{1,2,3}$
\permset{output-separator=;}
$\Pm{1 2 3}$
\permset{input-separator=|}
$\Pm{1|2|3}$
\end{document}
可选参数中的键值对是当前排列的本地键值对,而命令中的键值\permset
对是它们出现的组的本地键值对。扩展它以更改外部分隔符也很容易。