定义具有任意数量参数的命令

定义具有任意数量参数的命令

我搜索了几次,找到了可能的解决方案。但是,我看到的那些解决方案比我认为我真正需要的要复杂得多。所以请原谅我再次提问。以下是场景:

我想定义一个数学命令,给出给定参数的长精确序列。例如,如果我写下,\longexactsequence{A}{B}{C}{D}那么我期望得到类似这样的结果0 \longrightarrow A \longrightarrow B \longrightarrow C \longrightarrow D \longrightarrow 0

同样地,如果我只写\longexactsequence{A},那么我就会得到0 \longrightarrow A \longrightarrow 0

我该怎么做?我还想再进一步,因为如果输出方程式已经太长,我将非常感谢“修复”断线问题。

非常感谢,非常感谢所有的评论、提示等!

答案1

可以在以下位置找到使用\kernel@ifnextchar类似输入语法的实现以及使用 LaTeX宏的类似输入语法的\longexactsequence{A}{B}{C}{D}实现\@for\longexactsequence{A, B, C, D}这个答案的历史

当你想使用 来,作为条目的分隔符时,你可以使用许多提供循环的包之一。其中一个是PGF相当强大的\foreach,它有自己的标签:

如果您想为箭头的上标应用第二个值\foreach,您也可以使用,但需要使用/作为这些参数的分隔符。

不应标记的箭头需要输入为/<entry>

还有其他方法可以输入,比如

$ \longexactsequence{[f]A, [g]B, C} $

使箭头标签成为可选的,但这需要更复杂的实现。

通过使用 来实现此目的的简单版本,\ifx检查以下两个宏是否相等(如果不提供 ,则\superscript和相等)。可以通过在两个参数之一中添加另一个空格 ( )、空组 ( ) 或( ) 来超越此目的。\entry/D/ DD{}/D\relaxD\relax/D

这些例子应该可以清楚地表明这一点。

代码

\documentclass{article}
\usepackage{extarrows,pgffor}
\newcommand*{\longexactsequence}[2][0]{%
  #1 \longrightarrow
  \foreach \superscript/\entry in {#2} {%
    \entry \xlongrightarrow{\ifx\superscript\entry\else\superscript\fi}%
  } #1%
}

\begin{document}
$ \longexactsequence{A, B, C, D, E} $

$ \longexactsequence{f/A, g/B, C, D/ D} $ % a space before or after / makes the Ds unequal

$ \longexactsequence[Z]{a/A, {a, b}/B} $

$ \longexactsequence{} $
\end{document}

输出

在此处输入图片描述

答案2

\getargsC将单个参数解析为放置在\argi\argii\argiii\argiv等中的“单词”。单词总数在字符串中设置\narg。带有空格或以宏结尾的单词可以通过用括号括起来来隔离(即,内部括号的内容成为一个单词)。然后我只需逐个重新整理单词,并在它们周围添加适当的修饰。

在循环中,\csname arg\roman{index}\endcsname仅变成连续的参数 ( \argi, \argii, \argiii, \argiv)

\documentclass{article}
\usepackage{readarray}
\newcounter{index}
\newcommand\longexactsequence[1]{%
  \getargsC{#1}%
  0\longrightarrow%
  \setcounter{index}{0}
  \whiledo{\value{index} < \narg}{%
    \stepcounter{index}%
    \csname arg\roman{index}\endcsname\longrightarrow%
  }
  0%
}
\begin{document}
\(
\longexactsequence{A B C D}
\)

To show with other than simple characters

\(
\longexactsequence{A_1 {\alpha} {B + C}}
\)
\end{document}

在此处输入图片描述

相关内容