我希望能够以正确的方式写出排列:使用 latex 排版排列但我想要一个命令来自动执行它。
我只是手动完成了:(1\ 2\ 3)
等等。-不用了,谢谢。我可以为每个命令创建一个命令:
\newcommand{\threeperm}[3]{({#1}\ {#2}\ {#3})}
\newcommand{\fourperm}[4]{({#1}\ {#2}\ {#3}\ {#4})}
但是 (a) 考虑到我可以轻松编写多达 15 个元素左右的排列,这似乎不是一种有效的解决方法,并且 (b) 我还希望能够在下标中使用它,并且元素之间的间距更小:并且不想像这样重复我的所有命令:
\newcommand{\smallthreeperm}[3]{({#1}\, {#2}\, {#3}\, {#4})}
等等。
有没有办法创建宏来执行此任务?
提前感谢您提供的任何帮助。
答案1
为了以相同的方式处理多个项目,我建议将内容处理为列表(用逗号分隔):
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\permutation}[1]{
\gdef\itemdelim{\gdef\itemdelim{\mathchoice{\ }{\ }{\,}{\,}}}
(\dopermutation{#1})}
% https://tex.stackexchange.com/a/89187/5764
\newcommand{\dopermutation}[1]{
\renewcommand*{\do}[1]{\itemdelim##1}
\docsvlist{#1}}
\begin{document}
\begin{tabular}{l}
$(1\ 3\ 2\ 4)$ \\
$\permutation{1,3,2,4}$
\end{tabular}
\begin{tabular}{l}
$S_{(1\,3\,2\,4)}$ \\
$S_{\permutation{1,3,2,4}}$
\end{tabular}
\end{document}
您可以根据所处的数学模式更新间距。
参考:
答案2
这里的分隔符是空格;如果您更喜欢类似的语法\perm{1,2,3,4}
(但只输出空格),请{ ~ }
在下面的代码中使用进行更改{ , }
。
\documentclass{article}
\usepackage{xparse}
\newcommand{\permsep}{%
\mathchoice
{\mskip\thickmuskip}% display
{\mskip\medmuskip}% text
{\mskip1.5mu}% first level sub/superscript
{\mskip1.5mu}% second level or deeper
}
\ExplSyntaxOn
\NewDocumentCommand{\perm}{m}
{
\seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
( \seq_use:Nn \l_tmpa_seq { \permsep } )
}
\ExplSyntaxOff
\begin{document}
$\perm{1 2 3 4}\in S_{\perm{1 2 3 4}}$
\[
\perm{1 2 3 4}
\]
\end{document}
您\mathchoice
可以决定每种数学样式所需的间距。
答案3
\documentclass{scrartcl}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \perm { r() } { \percy_perm:n {#1} }
\cs_new_protected:Npn \percy_perm:n #1
{
(
\seq_set_split:Nnn \l_tmpa_seq { ~ } { #1 }
\mathchoice
{ \seq_use:Nn \l_tmpa_seq { \ } }
{ \seq_use:Nn \l_tmpa_seq { \ } }
{ \seq_use:Nn \l_tmpa_seq { \, } }
{ \seq_use:Nn \l_tmpa_seq { \, } }
)
}
\ExplSyntaxOff
\begin{document}
$\perm(1 2 3 4)$ and $S_{\perm(1 2 3 4)}$
\end{document}
答案4
以下是基于 TeX 原语的解决方案:
\def\permsep{\mathchoice {\mskip5mu} {\mskip4mu plus2mu}
{\mskip1.5mu} {\mskip1mu}}
\def\perm#1{\permA #1 {} }
\def\permA#1 {\bgroup(#1\permB}
\def\permB#1 {\ifx\relax#1\relax)\egroup \else \permsep#1\expandafter\permB\fi}
$\perm{1 2 3 4},\ S_\perm{1 2 3 4}$
\end