使 [ ] 和 ( ) 自動具有 \mleft 和 \mright 的宏

使 [ ] 和 ( ) 自動具有 \mleft 和 \mright 的宏

由於我正在編寫一個包含數千個各種括號的文檔,因此手動調整所有括號的大小或手動添加\mleft每次\mright都會最終需要大量時間。此外,由於該文件僅供私人使用,因此我沒有嚴格的排版規則可遵循。

因此,在這種情況下,將and分別重新定義為(和並不是一個壞主意,對於方括號和大括號也是如此(顯然僅在數學模式下)。)\mleft(\mright)

我知道使用自動調整大小括號的所有缺點(例如\left 和 \right 周圍的間距或者為什麼 LaTeX 不將(作為 \left( 和 ) 解釋為 \right)?或者使用 \left 和 \right 是否不好?),至少解決了使用\mleft\right間距問題。

在頁面中如何讓\{和\}自動具有\left和\rightegreg 解釋說,在使用大括號的情況下,有一種簡單的方法可以實現目標。此巨集包括在文件中找到的和的定義中新增\left和。\right\{\}latex.ltx

\documentclass{article}
\usepackage{amsmath}
\usepackage{mleftright}

\let\{\relax \let\}\relax % to avoid warnings about the redefinition
\DeclareRobustCommand{\{}{\ifmmode\mleft\lbrace\else\textbraceleft\fi}
\DeclareRobustCommand{\}}{\ifmmode\mright\rbrace\else\textbraceright\fi}

\begin{document}
$a\{\dfrac13\}a$
\end{document}

在此輸入影像描述

我正在尋找類似的方法來重新定義彎括號和方括號的命令,但我不知道如何在文件中找到它們的定義,latex.ltx因為它是一個非常大的文件。

答案1

您可以透過將數學代碼設為 8000 來啟動這些符號的數學功能,然後透過小寫技巧定義它們:

\documentclass{article}
\usepackage{amsmath}
\usepackage{mleftright}

\makeatletter
\def\@mathactive#1#2{\begingroup
    \lccode`~=`#1
    \lowercase{\endgroup
        \def~{#2}}%
    \mathcode`#1="8000\relax}

\@mathactive({\mleft(}
\@mathactive){\mright)}
% Do the same for brackets. (Do not try it with braces.)
\makeatother

\begin{document}
$ (\dfrac12) $
\end{document}

在此輸入影像描述

編輯:這是一個適用於 PDFTeX 的程式碼。在 PDFTeX 中,AMSMath 似乎對活動數學字元有問題。

\documentclass{article}
\usepackage{amsmath}
\usepackage{mleftright}

\begingroup
\catcode`\(=\active
\catcode`\)=\active
\gdef({\mleft\lparen}
\gdef){\mright\rparen}
\endgroup

\def\lparen{\delimiter"028300\relax}
\def\rparen{\delimiter"029301\relax}

\everymath{\mathcode`\(="8000
           \mathcode`\)="8000}
\everydisplay{\mathcode`\(="8000
              \mathcode`\)="8000}

\begin{document}

$ (\dfrac12) $

\[ (\frac18) \]

\end{document}

相關內容