如何在环境 bmatrix 中重新定义宏 \\?

如何在环境 bmatrix 中重新定义宏 \\?

我想在包中的\\环境实例内重新定义宏。但不尊重外部或内部的重新定义:bmatrixamsmathbmatrix\\bmatrix

\newcommand{\im}[1]{{
\renewcommand{\\}{;&}
\begin{bmatrix}#1\end{bmatrix}
}}
\newcommand{\im}[1]{
\begin{bmatrix}\renewcommand{\\}{;&}#1\end{bmatrix}
}

答案1

我没有尝试重新定义\\,而是使用标记循环预先扫描 参数的标记\im,并用标记替换;&找到的每个实例\\。所有其他标记都按其最初出现的方式回显。

\documentclass{article}
\usepackage{amsmath,tokcycle}
\newcommand{\im}[1]{{\resettokcycle
  \Macrodirective{\ifx\\##1\addcytoks{;&}\else\addcytoks{##1}\fi}
  \tokencyclexpress\begin{bmatrix}#1\end{bmatrix}\endtokencyclexpress
}}
\begin{document}
$\begin{bmatrix}a\\b\end{bmatrix}$
versus
$\im{a\\b}$
\end{document}

在此处输入图片描述

答案2

您更希望处理您的输入。expl3它本质上是一行代码。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentCommand{\im}{m}
 {
  \begin{bmatrix}
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
  \seq_use:Nn \l_tmpa_seq { ; & }
  \end{bmatrix}
 }

\ExplSyntaxOff

\begin{document}

$\im{a\\b}$

\end{document}

在此处输入图片描述

不过,间距似乎有点奇怪。你可以考虑不是使用bmatrix

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn

\NewDocumentCommand{\im}{m}
 {
  \left[
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
  \seq_use:Nn \l_tmpa_seq { {;} \mspace{\thickmuskip} }
  \right]
 }

\ExplSyntaxOff

\begin{document}

$\im{a\\b}$

\end{document}

在此处输入图片描述

相关内容