何千ものさまざまな括弧を含む文書を書いているので、すべての括弧のサイズを手動で調整したり\mleft
、\mright
毎回手動で追加したりすると、最終的には多くの時間がかかります。さらに、文書は個人使用を目的としているため、厳密なタイポグラフィのルールに従う必要はありません。
したがって、この場合、(
と をそれぞれと)
として再定義することは悪い考えではありません。角括弧と中括弧についても同様です (明らかに数式モードのみ)。\mleft(
\mright)
自動サイズ変更ブラケットの使用に関するすべての欠点については承知しています(たとえば\left と \right の周りの間隔またはLaTeX はなぜ ( を \left( と ) を \right) と解釈しないのでしょうか?または\left と \right を使うのは悪いことでしょうか?\mleft
) を使用すると、少なくとも\right
間隔の問題は解決されます。
ページ内\{ と \} に自動的に \left と \right を持たせる方法egreg は、中括弧の場合に目的を達成する簡単な方法があると説明しています。マクロは、ファイルにあるとの定義に\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}