我知道有人讨论过这个话题,但我还没有看到可行的解决方案。是否可以在 LaTeX 中定义一个宏,使得在数学模式中,(
会产生\left(
并且)
会产生\right)
?
我知道可以定义不同的宏,比如\lparen
,但它的缺点是视觉上不够清晰,也不像那么简单(
。我只想(
在数学模式下覆盖命令。在编写大量数学运算时,这个问题非常烦人。
答案1
无需使用amsmath
:
\documentclass{article}
\begingroup
\catcode`(\active \xdef({\left\string(} % ( is defined as \left(
\catcode`)\active \xdef){\right\string)} % ) is defined as \right)
\endgroup
\mathcode`(="8000 \mathcode`)="8000 % active in mathmode
\begin{document}
\[
(\frac{(3-\frac{1}{x})^2}{(\frac4x-1)x})
\]
\end{document}
如果你正在使用包amsmath
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\def\resetMathstrut@{%
\setbox\z@\hbox{%
\mathchardef\@tempa\mathcode`\[\relax
\def\@tempb##1"##2##3{\the\textfont"##3\char"}%
\expandafter\@tempb\meaning\@tempa \relax
}%
\ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}
\makeatother
\begingroup
\catcode`(\active \xdef({\left\string(}
\catcode`)\active \xdef){\right\string)}
\endgroup
\mathcode`(="8000 \mathcode`)="8000
\begin{document}
\begin{align}
f(x) &= (\frac{(3-\frac{1}{x})^2}{(\frac4x-1)x}-1)x^2
\end{align}
\end{document}
答案2
我强烈建议不要自动用(
和)
替换 \left(
和right)
。当公式必须被挤压才能排成一行时,这会带来严重的缺陷。问题是 和 之间的内容\left(
设置right)
了自然间距,而顶级数学列表可能会被拉伸和收缩(请参阅E-TeX:未来 TeX 扩展指南由 Frank Mittelbach 撰写,第 11 部分)。看看你自己:
在第一行中,第一个 ' 周围的空间+
缩小为 0,而第二个 ' 周围的空间+
设置为自然宽度。在第二行中,两个+
' 都以相同的方式处理。
\documentclass{article}
\textwidth=4.715cm
\begin{document}
$a+\left(b+c\right)$ doesn't look good \par
$a+(b+c)$ doesn't\llap{\rule[0.6ex]{1.1em}{0.7pt}\hskip0.1em} look good
\end{document}
我要指出的是,上述内容不是适用于 AMS 环境,例如align
或gather
因为在这些环境中总是设置为其自然宽度。
答案3
看一下这个nath
包。它会自动缩放所有分隔符。例如
\documentclass{article}
\usepackage{nath}
\begin{document}
\[ ( \sum_{i=1}^n a_i b_i ) \]
\end{document}
给出
答案4
我了解到,将文件做得过于“特殊”是有弊端的——尤其是当你想合作的时候。因此,你的源代码应该尽可能简单。为了使打字更快,我了解了YASNIPPET
emacs;你也可以在其他编辑器中找到类似的工具,即片段。例如,为了输入
\( \left( x^2 \right) \)
我输入:
m[TAB] pare[TAB]x^2[TAB][TAB]
yasnippet
根据我定义的代码片段处理我需要的内容。这样我就得到了一个标准的 .tex 文件,可以轻松输入。如果您需要更多详细信息,请告诉我。