使用插入符号 ('^') 或下划线 ('_') 构造 \newcommand

使用插入符号 ('^') 或下划线 ('_') 构造 \newcommand

我只是想知道是否有人熟悉一些明显不太常规的语法来创建\newcommand...

抱歉,如果这是基础的话,但我只是想对\mathtool's\overbracket\underbracket命令进行一些小修改,以测试我编写的一些公式的不同选项。切换命令并比较修改或原始修改的最简单方法是保持相同的语法和 Ctrl+F/替换任何命令名称,所以我希望能够以与\overbracketmod{...}^{...}股票\overbracket{...}^{...}命令相同的精神编写一些内容

是否有人知道如何编写一个\newcommand可以让我保留这种语法的代码(或任何提到这种语法的参考资料)?我很确定几天前我在网上看到了一些示例代码,并认为“嗯,很酷,我想用它”,但后来我丢失了资源,我最近的搜索(例如带有插入符号/上标的 newcommand、带有升高/降低参数的 newcommand 等)都没有成功……(如果有帮助的话,我想我依稀记得它的形式是\newcommand...#1^#2?)

提前致谢

答案1

mathtool's\underbracket被定义为使用\mathop外部包装器,它本质上允许使用上标和下标执行这样的行为——它将参数放在相应的上面和下面。

这是一个简单的例子

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\[
\mathop{\pi}^{up}_{down}
\]

\end{document}

在此处输入图片描述

因此,你可以将自己的定义\overbracketmod如下

\newcommand{\overbracketmod}[1]{\mathop{<command definition>}}

然而,正如评论中提到的那样,更通用的方法是使用\NewDocumentCommand具有多种参数类型的 LaTeX3(请参阅手动的)。也就是说,您要寻找的是e修饰类型,这样,如果您e{^_}在定义中指定,#1将正是您在之后输入的内容^,也是#2您通过传递的内容_。例如:

\documentclass{article}

\NewDocumentCommand{\overbracketmod}{ m e{^_} }{arg: \emph{#1} superscript: \emph{#2}, subscript: \emph{#3}}

\begin{document}

\overbracketmod{test}^{up}_{down}

\end{document}

在此处输入图片描述

答案2

该语法\overbracket{<math>}^{<math>}对于 LaTeX 来说是陌生的,它源于 Knuth 用于 的一种低级技巧\overbrace

我的建议是不是用它。

我们来看一个例子:

\documentclass{article}
\usepackage{mathtools}

\begin{document}

\begin{gather*}
\overbracket{1+1+\dots+1}^{n}+1 \\
\mspace{6mu} 1+1+\dots+1+1
\end{gather*}

\end{document}

小空格用于对齐两行的数字,以使问题更加清晰。

在此处输入图片描述

你能看出问题所在吗?是的,顶行中最后一个 + 号周围的空格完全错误。为什么?因为最终,构造\overbracket会变成一个\mathop原子,而 TeX 规则最终会将最后一个 + 视为普通原子,而不是二进制运算。

您可以通过将整个事物变成一个普通原子来解决该问题。

\documentclass{article}
\usepackage{mathtools}

\NewDocumentCommand{\obracket}{oomm}{{% note the second brace
  \IfNoValueTF{#2}{%
    \IfNoValueTF{#1}{%
      \overbracket{#3}^{#4}%
    }{%
      \overbracket[#1]{#3}^{#4}%
    }%
  }{%
    \overbracket[#1][#2]{#3}^{#4}%
  }%
}}  

\begin{document}

\begin{gather*}
1+\obracket{1+1+\dots+1}{n}+1 \\
1+1+1+\dots+1+1
\end{gather*}

\end{document}

在此处输入图片描述

现在您可以看到所有符号的间距都正确,因为整个结构周围的附加括号使其成为一个普通原子。

如果要保留外来语法,可以使用“修饰”参数类型:

\documentclass{article}
\usepackage{mathtools}

\NewDocumentCommand{\obracket}{oome{^}}{{% note the second brace
  \IfNoValueTF{#2}{%
    \IfNoValueTF{#1}{%
      \overbracket{#3}\IfValueT{#4}{^{#4}}%
    }{%
      \overbracket[#1]{#3}\IfValueT{#4}{^{#4}}%
    }%
  }{%
    \overbracket[#1][#2]{#3}\IfValueT{#4}{^{#4}}%
  }%
}}  

\begin{document}

\begin{gather*}
1+\obracket{1+1+\dots+1}^{n}+1 \\
1+1+1+\dots+1+1
\end{gather*}

\end{document}

输出与之前相同。以类似的方式定义您自己的命令(可能没有可选参数)。

相关内容