有條件地將 \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以配對形式使用 and Friends,類似於\leftand \right。此外,它假設開始分隔符號與 關聯\left,結束分隔符號與 關聯\right。任何不匹配的<delim>iter 都會恢復為\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 上。

相關內容