我注意到,当尝试制作一串 6 个\circ
符号时,最后一个符号比其他符号更靠近旁边的符号,玩了一段时间后,它看起来像是偶数(大于 2),导致\circ
这种情况,我该如何修复间距以使其均匀?
例子:
\documentclass{article}
\begin{document}
1 circ: $\circ $
2 circ: $\circ \circ $
3 circ: $\circ \circ \circ$
4 circ: $\circ \circ \circ \circ$
5 circ: $\circ \circ \circ \circ \circ $
6 circ: $\circ \circ \circ \circ \circ \circ $
7 circ: $\circ \circ \circ \circ \circ \circ \circ $
\end{document}
答案1
摘自 TeXbook(第 187 页,解决方案在第 326 页)
练习19.7
BL 用户尝试输入“\eqno(*)
”和“\eqno(**)
”,他很高兴地发现这会产生方程式数字“(∗)”和“(∗∗)”。[他有点担心它们会变成“(*)”和“(**)”。] 但几个月后,他尝试输入“\eqno(***)
”,结果大吃一惊。那是什么?在数学模式下输入星号时,纯 TeX 会将其
*
视为二元运算。在 '(*)
' 和(**)
' 的情况下,二元运算将转换为 Ord 类型,因为它们不出现在二进制上下文中;但 '(***)
' 中的中间星号仍为 Bin 类型。因此结果为 '(∗ ∗ ∗)'。为了避免多余的中间空格,您可以输入 ' ';或者,如果您从未将其用作 二元运算,\eqno(*{*}*)
则可以更改。\mathcode`*
*
如果我们在方程式中( ),这无关紧要\eqno
;主要问题是数学模式,其中的行为显示出来。由于\circ
是一个二进制运算符号,就像 一样*
,所以你会得到相同的结果。
如果你想要等距\circ
符号,你可以使用
{\circ}\;{\circ}\;{\circ}\;{\circ}
甚至更好的是,定义一个合适的命令:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\circs}{m}
{
\ensuremath
{{
{\circ}\prg_replicate:nn { #1 - 1 } { \; {\circ} }
}}
}
\ExplSyntaxOff
\begin{document}
$\circs{1}$
$\circs{2}$
$\circs{3}$
$\circs{4}$
$\circs{5}$
$\circs{6}$
$\circs{7}$
\end{document}
答案2
发出时,\show\circ
您会看到它定义为\mathchar"220E
。此定义中的第一个数字指向字符的固有“格式”。2
表示二元运算符它周围有特定的间距。因此,\circ
被视为二元运算符,因此需要两侧都有操作数。奇数\circ
s 显示出更好的对齐效果,因为它们在两侧提供“操作数”(除非在连续 s 周围提供均匀的间距\circ
):
\documentclass{article}
\begin{document}
1 circ: $\circ$
2 circ: $\circ \circ$
2 circ: $\circ \circ {}$
3 circ: $\circ \circ \circ$
4 circ: $\circ \circ \circ \circ$
4 circ: $\circ \circ \circ \circ {}$
5 circ: $\circ \circ \circ \circ \circ $
6 circ: $\circ \circ \circ \circ \circ \circ$
6 circ: $\circ \circ \circ \circ \circ \circ {}$
7 circ: $\circ \circ \circ \circ \circ \circ \circ$
\end{document}
如果您只想以正确的间距列出多个\circ
s,请考虑在使用偶数个\circ
s 时在末尾添加一个空的数学组。或者,使用{\circ}
或\mathord{\circ}
来避免周围的空格;\mathord
将其参数转换为数学序数。