当我用 TeX 写数学公式时,我经常需要使用缩放分隔符\left(
等\right)
。我发现在源代码中大量使用它们非常难以阅读。
有没有可能当我在数学模式下书写时(
,会产生通常产生的效果\left(
,而反之亦然?这样,长公式或大公式的可读性就会提高。
以下是 MWE:
\documentclass{article}
\begin{document}
$\displaystyle\left(\frac{t}{2}\right)$ for $t\in [0,1)$.
\end{document}
我想要的是能够写类似的东西
\documentclass{article}
% Fancy code or package here
\begin{document}
$\displaystyle (\frac{t}{2})$ for $t\in \left[0,1\right)$.
\end{document}
并获得与上面相同的输出。
我认为,像上面的间隔中不匹配的分隔符在数学文本中很少见。这就是我希望有这种可能性的原因。
评论的附加问题:为什么这是好主意/坏主意,或者如何规避这个问题?
答案1
此示例说明如何仅在数学环境中将(
和定义为活动字符。这是此示例的关键。)
\mathcode"8000
{\catcode`(=13 \catcode`)=13
\gdef({\left\delimiter\delcode`(}
\gdef){\right\delimiter\delcode`)}
}
\mathcode`(="8000 \mathcode`)="8000
\def\nm{\mathchar`}
Here is (normal) text.
$$
(1\over2)+3, \quad \nm( {1\over2} \nm) + 3
$$
第一个分数将被大括号包围,第二个分数将被普通括号包围。
\nm
如果您需要在数学中以正常方式使用括号,则可以使用前缀。
评论:如果您做以下两件事,则可以char
仅在数学模式下定义为活动:
{\catcode`char=13 \gdef char{...} }.
意思是说,当它的活动被定义时,它的活动char
只是局部的。但定义是全局的。第二步是:
\mathcode`char="8000
这个特殊的数字\mathcode
告诉 TeXchar
只有在数学模式下才被视为活跃的。
上面的代码包含更多的技巧。前缀\nm
定义为
\mathchar`
因此\nm(
扩展为
\mathchar`(
这被视为(
数学模式,并且 的活动(
无关紧要。当(
定义为时,可以使用类似的技巧:
\left\delimiter\delcode`(
被视为\left(
与的活动(
无关。
关于数学代码和 delcodes 的问题更加广泛,但我希望我对这个特定任务的评论就足够了。
答案2
正如 egreg 和 deleif 的评论所暗示的那样,这通常可能是一个坏主意。但是,如果您真的想这样做,那么这里有一种修改 () 来执行您想要的操作的方法。将这个想法扩展到其他分隔符很容易,但只需执行 (),我还可以突出显示如果您的自调整分隔符不匹配,需要发生什么。
以下是代码:
\documentclass{article}
\let\LeftBracket(
\let\RightBracket)
\catcode`(=13
\catcode`)=13
\def({\left\LeftBracket}
\def){\right\RightBracket}
\begin{document}
$\displaystyle(\frac{t}{2})$ for $t\in [0,1\RightBracket$
\end{document}
输出如下:
\RightBrakcet
例如,请注意,当 的分隔符不匹配时,您需要使用。当然,如果[
扩展为,\left[
那么您可以)
在这里使用。
最后,你很可能通过这种方式重新定义分隔符来破坏其他软件包。例如,我怀疑软件包calc
是否会对此感到满意。