![Макросы, автоматически создающие \mleft и \mright для [ ] и ( )](https://rvso.com/image/400294/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D1%8B%2C%20%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B5%20%5Cmleft%20%D0%B8%20%5Cmright%20%D0%B4%D0%BB%D1%8F%20%5B%20%5D%20%D0%B8%20(%20).png)
Поскольку я пишу документ с тысячами скобок всех видов, ручное изменение размера всех скобок или ручное добавление \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}