栅栏/分隔符存储在宏中

栅栏/分隔符存储在宏中

我想知道,假设我有这个定义

\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}

那么你的最初示例就会起作用。

相关内容