自动匹配和缩放分隔符

自动匹配和缩放分隔符

当我用 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是否会对此感到满意。

相关内容