定义 \DeclarePairedDelimiter 的语义大小

定义 \DeclarePairedDelimiter 的语义大小

为了更好地分离内容和表示,如何为可选的大小参数定义语义大小\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}

在此处输入图片描述

相关内容