我想知道,假设我有这个定义
\newcommand\restrictedTo{\vert\sb}
用作$f \restrictedTo A$
。
这很好,但是
$f \big \restrictedTo A$
失败,而
$\left. f \right \restrictedTo A$
工作得很好。
对于 的更好定义有什么建议吗\restrictedTo
?
编辑:这是完整的 MWE:
\documentclass[a4paper]{article}
\newcommand\restrictedTo{\vert\sb}
\begin{document}
\[
f \big\restrictedTo A
\]
\end{document}
答案1
David 已经解释过,这\big
需要一个参数,这会破坏 之后的原始定义。重新定义(和,…)\big
的另一种方法是给出一个可选参数:\big
\Big
\restrictedTo
\documentclass[a4paper]{article}
\newcommand*\restrictedTo[1][]{#1\vert\sb}
\begin{document}
\[
f \restrictedTo A,
f \restrictedTo[\big] A,
f \restrictedTo[\Big] A
\]
\end{document}
如果你只希望 的位置较低A
,那么就不需要了\big
,定义和用法可以简化:
\documentclass[a4paper]{article}
\newcommand*\restrictedTo{{{}\vert}\sb}
\begin{document}
\[
f \vert_A,
f \restrictedTo A,
f \big\vert_A
\]
\end{document}
答案2
\right
是一个 TeX 原语,它会扩展自身前面的标记,直到找到不可扩展的分隔符。
\big
是一个普通的宏命令,它将下一个标记读取为#1
\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}}
所以你可以去
\expandafter\big \restrictedTo
但这确实不太方便。
在实践中,这样做可能是安全的(尽管可能会破坏一些东西)
\let\oldbig\big
\def\big{\expandafter\oldbig}
那么你的最初示例就会起作用。