Макросы, автоматически создающие \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}

Связанный контент