我正在使用unicode-math
包,用于在数学排版中使用正文字体中的字母。我使用的字体 (Arno Pro) 非常适合此用途,因为它在拉丁字母之上包含完整的希腊字母,但它不是数学字体。对于字体中未包含的字符,我使用 XITS Math 作为后备。
但是,一些标点符号(例如逗号、圆括号、方括号和花括号)在字体之间有很大差异,所以我也从正文字体中取出了这些符号。这对于最小的括号大小非常有效,但字体不支持括号的自动缩放。是否可以指示在unicode-math
小尺寸时使用一种字体中的括号(以及圆括号和花括号),并在其他尺寸时返回另一种字体?
我可以像这样在字体之间切换:
% Use XITS Math for [ ] ( ) { }
\setmathfont[range={"005B,"005D,"0028,"0029,"007B,"007D}]{XITS Math}
% Use Arno Pro for [ ] ( ) { }
\setmathfont[range={"005B,"005D,"0028,"0029,"007B,"007D}]{Arno Pro}
将这些定义为新命令可以稍微轻松地处理多种字体,但切换在数学模式下不起作用,即使可以,仍然需要手动为不同的括号和圆括号选择正确的字体。是否unicode-math
提供了一种方法,让一种字体用于较大的括号,另一种字体用于正常大小的括号?
我发现的另一种解决方法是在数学模式下对所有字符使用适当的数学字体,但使用文本字体设置小括号(通过\text{\{}
)。这是一个更好的解决方案,但它仍然没有我希望的那么好。此外,这可能会影响括号周围的间距。
答案1
从完全不同的角度来解决问题……如果您的字体不支持括号等的自动缩放,您是否愿意使用具有模仿我认为您正在寻找的缩放到大小功能的命令scalerel
的软件包?在的情况下,它采用基本字符并直接缩放以匹配目标对象的高度。但这里有一个技巧:可选参数是一个宽度限制器,以防止缩放的对象变得太宽。在这个例子中,我将该参数设置为 2ex,这样无论字符缩放多大,它的宽度都不会超过 2ex。\scaleleftright[]{}{}{}
scalerel
或者,有\stretchleftright
执行垂直拉伸的命令,但在这种情况下,它有一个纵横比限制器作为可选参数,以便拉伸符号的纵横比永远不会超过可选参数中给出的量。
在所有情况下,自动缩放的对象都基于原始字体符号。
\documentclass{article}
\usepackage{scalerel}
\parskip 2ex
\begin{document}
\(
\scaleleftright[2ex]{[}{ x^2}{]}
\scaleleftright[2ex]{(}{ x^2}{)}
\scaleleftright[2ex]{\{}{ x^2}{\}}
\)
\(
\scaleleftright[2ex]{[}{%
\begin{array}{c}%
x^2\\
y^2\\
\end{array}}{]}
\scaleleftright[2ex]{(}{%
\begin{array}{c}%
x^2\\
y^2\\
\end{array}}{)}
\scaleleftright[2ex]{\{}{%
\begin{array}{c}%
x^2\\
y^2\\
\end{array}}{\}}
\)
\(
\scaleleftright[2ex]{[}{%
\begin{array}{c}%
x^2\\
y^2\\
z^2\\
\end{array}}{]}
\scaleleftright[2ex]{(}{%
\begin{array}{c}%
x^2\\
y^2\\
z^2\\
\end{array}}{)}
\scaleleftright[2ex]{\{}{%
\begin{array}{c}%
x^2\\
y^2\\
z^2\\
\end{array}}{\}}
\)
\end{document}
只是为了比较,下面我使用\stretchleftright
命令,而不是\scaleleftright