在我的序言中,我有以下内容
\DeclarePairedDelimiter\norm{\lVert}{\rVert}%
\makeatletter
\let\oldnorm\norm
\def\norm{\@ifstar{\oldnorm}{\oldnorm*}}
\makeatother
不知道它是如何工作的。但在大多数情况下它确实工作得很好。但下面的看起来很糟糕
\norm{a} - \norm{b_{t|t}}
因为分隔符的大小不同。因此我想手动控制它们的大小,例如 \big、\Big 等...
有人知道一个聪明的方法吗?
答案1
这是一个很好的例子,说明为什么我通常不鼓励滥用\left
和\right
。
您\DeclarePairedDelimiter\norm{\lVert}{\rVert}
定义的宏\norm
可以按以下方式使用:
\norm{x}
\norm[\big]{x}
\norm[\Big]{x}
\norm[\bigg]{x}
\norm[\Bigg]{x}
\norm*{x}
简单调用对分隔符的大小没有任何影响,后面带有可选参数的调用“手动”指定大小,最后一个调用告诉 TeX 使用“自动”大小调整。
您使用的技巧告诉 TeX,如果您调用\norm{x}
,\oldnorm*{x}
就会执行,并且当\norm*{x}
找到时,\oldnorm{x}
就会实际执行。
以下是你的方法可以做吧:
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}%
\makeatletter
\let\oldnorm\norm
\def\norm{\@ifstar{\oldnorm}{\oldnorm*}}
\makeatother
\begin{document}
(1) $\norm{a} - \norm{b_{t|t}}$
\bigskip
(2) $\norm*[\big]{a} - \norm*[\big]{b_{t|t}}$
\bigskip
(3) $\norm*{a} - \norm*{b_{t|t}}$
\end{document}
我毫不怀疑 (3) 是唯一正确的方法。你使用的技巧\oldnorm
根本没用:只需将其删除并输入
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}%
\begin{document}
(3) $\norm{a} - \norm{b_{t|t}}$
\end{document}
仅在真正必要时才使用可选参数或 * 形式。
此输入将给出上面的形式 (3)。