由于我正在编写一份包含数千个各种括号的文档,因此每次手动调整所有括号的大小或手动添加\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}