我正在使用一个很酷的宏在特定的数学环境中编写一些不错的矩阵,来自这个问题:
但后来我想使用相同的宏来修复一些与上一个问题(在同一文档的另一章中)无关的其他矩阵。我刚刚注意到,即使矩阵不在同一环境中,宏也会为所有矩阵提供相同的列间距。宏似乎具有全局效果,这当然不是我想要的。
如何才能使该宏仅在给定环境中本地工作,而不对其他环境产生任何影响?
下面是显示该问题的 MWE:
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage{microtype}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{eqparbox}
\newcommand{\squash}[2][M]{\eqmakebox[#1]{$#2$}}
\begin{document}
These matrices are affected by the last matrices, which is bad:
\begin{align}
A &=
\begin{bmatrix}
0 & \squash{\sigma_2} \\[1em]
\squash{\sigma_2}& 0
\end{bmatrix},
\\
B &=
\begin{bmatrix}
\squash{-i \sigma_3} & 0 \\[1em]
0 & \squash{-i \sigma_3}
\end{bmatrix},
\end{align}
These matrices are affecting the first matrices which is bad:
\begin{align}
C &=
\begin{bmatrix}
0 & \squash{1} \\[1em]
\squash{r \sin \vartheta \cos \varphi} & 0
\end{bmatrix},
\\
D &=
\begin{bmatrix}
\squash{-\, r^2} & 0 \\[1em]
0 & \squash{-\, r^2}
\end{bmatrix},
\end{align}
\end{document}
预览以红色显示的问题:
答案1
的定义\squash
是错误的,因为它没有明确表明可选参数实际上是强制的。
语法\eqmakebox
是
\eqmakebox[<tag>][<alignment>]{<material>}
其中<tag>
是任意标签,它应该是所有需要具有相同宽度的构造所共有的。
由于您在不同的上下文中使用\squash
,但从未使用可选参数,因此整个文档中所有此类框的宽度都相同。
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage{microtype}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{eqparbox}
\newcommand{\squash}[2][M]{\eqmakebox[#1]{$#2$}}
\begin{document}
These matrices are affected by the last matrices, which is bad:
\begin{align}
A &=
\begin{bmatrix}
0 & \squash[A]{\sigma_2} \\[1em]
\squash[A]{\sigma_2}& 0
\end{bmatrix},
\\
B &=
\begin{bmatrix}
\squash[A]{-i \sigma_3} & 0 \\[1em]
0 & \squash[A]{-i \sigma_3}
\end{bmatrix},
\end{align}
These matrices are affecting the first matrices which is bad:
\begin{align}
C &=
\begin{bmatrix}
0 & \squash[B]{1} \\[1em]
\squash[B]{r \sin \vartheta \cos \varphi} & 0
\end{bmatrix},
\\
D &=
\begin{bmatrix}
\squash[B]{-\, r^2} & 0 \\[1em]
0 & \squash[B]{-\, r^2}
\end{bmatrix},
\end{align}
\end{document}
我会使该参数成为强制性的,并为对齐添加一个可选参数,以获得更大的灵活性:
\newcommand{\squash}[3][c]{\eqmakebox[#2][#1]{$#3$}}
文档中的调用应该变成这样
\squash{A}{\sigma_2}
完整代码
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage{microtype}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{eqparbox}
\newcommand{\squash}[3][c]{\eqmakebox[#2][#1]{$#3$}}
\begin{document}
These matrices are affected by the last matrices, which is bad:
\begin{align}
A &=
\begin{bmatrix}
0 & \squash{A}{\sigma_2} \\[1em]
\squash{A}{\sigma_2}& 0
\end{bmatrix},
\\
B &=
\begin{bmatrix}
\squash{A}{-i \sigma_3} & 0 \\[1em]
0 & \squash{A}{-i \sigma_3}
\end{bmatrix},
\end{align}
These matrices are affecting the first matrices which is bad:
\begin{align}
C &=
\begin{bmatrix}
0 & \squash{B}{1} \\[1em]
\squash{B}{r \sin \vartheta \cos \varphi} & 0
\end{bmatrix},
\\
D &=
\begin{bmatrix}
\squash{B}{-\, r^2} & 0 \\[1em]
0 & \squash{B}{-\, r^2}
\end{bmatrix},
\end{align}
\end{document}
可选参数应该\squash
是来自的字母lcr
(表示“左”,“中”和“右”,默认为c
)。
举个例子,如果你把全部变成,\squash{A}{...}
再把\squash[l]{A}{...}
全部\squash{B}{...}
变成\squash[r]{B}{...}
,你会得到
在目前的情况下并不是很有用,但你可能会发现它在其他情况下很有用。