有条件地将 \big、\bigg 等重新定义为 \left 或 \right(局部)

有条件地将 \big、\bigg 等重新定义为 \left 或 \right(局部)

为了加快我的排版工作,我正在探索“本地”重新定义一些命令的可能性。

在这个特定情况下,我想将 、 等命令重新定义\big\Big\left命令\right。重新定义必须以 next-char(或 next-regexp)为条件。

例如这样的“伪代码”:

\newcommand{\myRedefinedBigs}{%
  COND 1 next char (or next regexp) is (or "(" "[" "\{")
  \renewcommand{\big}{\left}
  \renewcommand{\Big}{\left}
  \renewcommand{\bigg}{\left}
  \renewcommand{\Bigg}{\left}
  COND 2 next char (or next regexp) is (or ")" "]" "\}")
  \renewcommand{\big}{\right}
  \renewcommand{\Big}{\right}
  \renewcommand{\bigg}{\right}
  \renewcommand{\Bigg}{\right}}

这个想法是使用此命令来包装方程式。例如:

{\myRedefinedBigs
\begin{equation}
\big(\frac{1}{2}\big)
\end{equation}}\relax

这可以用 LaTeX 制作吗?如果可以,我需要寻找什么?

编辑。 沃默溶液似乎有效,但在相同类型的嵌套对的情况下会失败。例如:

{\myRedefinedBigs
\begin{equation}
\big(\frac{1}{2}\big(3\)\big)
\end{equation}}\relax

在此处输入图片描述

笔记。

我不会自己从头开始写论文。我负责准备发表在物理期刊上的科学家的论文。所以我必须根据提供的指南“纠正”布局“错误”。

答案1

以下假设您正在使用\big和 以成对形式的朋友,类似于\left\right。此外,它假设开始分隔符与 相关联\left,而结束分隔符与 相关联\right。任何不匹配的<delim>iters 都会恢复为\big<delim>

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcommand{\myRedefinedBigs}{%
  \let\oldbig\big% Copy \big into \oldbig
  \def\big{% Redeine \big
    \@ifnextchar({\biglparen}{% \big is followed by (
    \@ifnextchar){\bigrparen}{% \big is followed by )
    \@ifnextchar[{\biglbracket}{% \big is followed by [
    \@ifnextchar]{\bigrbracket}{% \big is followed by ]
    \@ifnextchar\{{\biglbrace}{% \big is followed by \{
    \@ifnextchar\}{\bigrbrace}{% \big is followed by \}
    \oldbig}}}}}}}% \big is followed by something else, so resort to \oldbig
  \def\biglparen({\left(}% \big( is replaced by \left(
  \def\bigrparen){\right)}% \big) is replaced by \right)
  \def\biglbracket[{\left[}% \big[ is replaced by \left[
  \def\bigrbracket]{\right]}% \big] is replaced by \left]
  \def\biglbrace\{{\left\{}% \big\{ is replaced by \left\{
  \def\bigrbrace\}{\right\}}% \big\} is replaced by \left\}
  \let\Big\big% Handle \Big just like \big
  \let\bigg\big% Handle \bigg just like \big
  \let\Bigg\big% Handle \Bigg just like \big
}
\makeatother

\begin{document}

\[
  \big(\frac{1}{2}\big)
\]

{\myRedefinedBigs
\[
  \big(\frac{1}{2}\big)
\]}

\[
  \big(\frac{1}{2}^{\Big\{\frac{1}{2}\Big]}\big)
\]

{\myRedefinedBigs
\[
  \big(\frac{1}{2}^{\Big\{\frac{1}{2}\Big]}\big)
\]}

\[
  \big(\frac{1}{2}\big(3\big)\big)
\]

{\myRedefinedBigs
\[
  \big(\frac{1}{2}\big(3\big)\big)\big|
\]}

\end{document}

答案2

关于此问题

用户应该使用开幕结束公式中的分隔符。此外,您不应重新定义有用的宏,而应根据需要使用另一个宏。

您可以在以下示例中看到不同的分隔符(大小和形状)。您还可以看到开始和结束分隔符。

练习 17.14 (TeXbook)

\pi(n)=\sum_{m=2}^n\left\lfloor\biggl(\sum_{k=1}^{m-1}
  \bigl\lfloor(m/k)\big/\lceil m/k\rceil\bigr\rfloor\biggr)^{-1}
\right\rfloor

在示例代码中,替换开始和结束分隔符很容易。

重要的: \left\right后跟分隔符并不总是产生预期的分隔符(印刷美学)。

例如,我们可以看到相同公式的两种格式。公式在右侧对应于 TeXbook 中推荐的格式,而上面的代码片段中,将相应的修饰符( \bigl\biggr...)替换为 后,左边的公式即可出现。\left\right

同一公式的两种格式。

而且,“修饰语”\left\right“必须出现在公式的同一部分。

关于解决方案

需要将分隔符前面的每个“修饰符”替换为适当的修饰符。

这些修饰符可以自动被其匹配的修饰符替换。要使用的算法似乎并不复杂。它的实现可能必须依赖于文本编辑器,显然不在(La)TeX 上。

相关内容