为了更好地分离内容和表示,如何为可选的大小参数定义语义大小\DeclarePairedDelimiter
?
以下是将“bulkysize”定义为的两次尝试\Big
:
\documentclass{article}
\usepackage{mathtools}
\newcommand*{\params}{X, Y, Z; a, b, c}
\DeclarePairedDelimiter{\roundbr}{(}{)}
% Attempt 1
\newcommand*{\bulkysize}{\Big}
% Attempt 2
\newcommand*{\bulkysizeoption}{[\Big]}
\begin{document}
\begin{align*}
y &= f \roundbr[\Big]{\params}
&& \text{Intended result}
\\
y &= f \roundbr[\bulkysize]{\params}
&& \text{Attempt~1: Doesn't resize as intended}
\\
y &= f \roundbr\bulkysizeoption{\params}
&& \text{Attempt~2: Doesn't parse as intended}
\end{align*}
\end{document}
“为什么不直接使用\Big
?”好吧,一段时间后我可能会决定用“bulkysize”来\bigg
代替。我不想必须检查所有代码并手动更改\Big
为\bigg
。“这不就是一个简单的查找和替换吗?”不。并非所有的实例都\Big
对应于“bulkysize”括号。例如,我可能\Big
在 TikZ 图形标签内有。
答案1
所发生的事情是\roundbr
通过执行以下操作来确定分隔符的大小
\@nameuse{<reduced optional arg>l}<left delimiter>
<material>
\@nameuse{<reduced optional arg>r}<right delimiter>
如果存在可选参数;如果可选参数是\Big
,则反斜杠将被删除并<reduced optional arg>
变为Big
。
然而,随着\bulkysize
你得到
\@nameuse{bulkysizel}
这相当于\relax
。定义所需的命令。
\documentclass{article}
\usepackage{mathtools}
\newcommand*{\params}{X, Y, Z; a, b, c}
\DeclarePairedDelimiter{\roundbr}{(}{)}
\newcommand{\bulkysize}{\Big} % just for completeness
\newcommand{\bulkysizel}{\Bigl}
\newcommand{\bulkysizer}{\Bigr}
\begin{document}
\begin{align*}
y &= f \roundbr[\Big]{\params}
&& \text{Intended result}
\\
y &= f \roundbr[\bulkysize]{\params}
&& \text{Resizes as intended}
\end{align*}
\end{document}