置换运算符

置换运算符

我希望能够以正确的方式写出排列:使用 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

相关内容