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

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

由于我正在编写一份包含数千个各种括号的文档,因此每次手动调整所有括号的大小或手动添加\mleft最终\mright将需要大量时间。此外,由于该文档是供私人使用的,因此我没有严格的排版规则可遵循。

因此在这种情况下,将和分别重新定义为(和并不是一个坏主意,对于方括号和花括号也是如此(显然仅限于数学模式)。)\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}

相关内容