排版高数学符号时,如何停止自动行距增加?

排版高数学符号时,如何停止自动行距增加?

在排版数学时,人们经常想在行中使用数学符号。当这些是某些符号或更常见的装饰符号时,其高度足够大,行距(即当前行和前一行之间的空间)会增加以补偿符号的高度。$\widetilde{f}$例如,一个常见的例子是。我想阻止这种情况发生,即使这可能导致两行之间的符号重叠。这可能吗?

另一个肯定会导致跳行数增加的原因是\overset{\alpha}{\to}。我也希望这不会导致跳行数增加。

如果相关的话,我正在使用带有 unicode-math 和 Lucida 字体的 XeLaTeX,但我更喜欢通用解决方案,因为我在现代计算机(和$\widetilde{f}$)中也遇到了这个问题。

答案1

您应该将参数设置\lineskiplimit为负值以避免线条扩散。此行为在 TeXbook 第 78 页中有解释。

如果行距小于 ,则 TeX 引擎会在行间添加更多空间;因此,将其设置为较大的负值会导致永远不会应用\lineskiplimit校正(名为)。\lineskip

因此,只需将其添加\setlength{\lineskiplimit}{-100pt}到文档的序言中即可。无论内容如何,​​所有行都将等距。这就是您想要的。

以@jfbu 的 MWE 为例,设置 lineskiplimit 后的输出如下所示:

在此处输入图片描述

答案2

Lucida Bright 的 x 高度异常大;它为 5.3pt,而 Latin Modern 为 4.31pt。大写字母字形的高度为 7.23pt,而 Latin Modern 为 6.83pt。

因此 10/12 设置肯定不适合未缩放的 Lucida Bright;一般来说,我更喜欢以 85% 的缩放比例加载它们,这样 x 高度为 4.5pt,大写字母高度为 6.15pt(是的,在 Lucida Bright 中,与大写字母相比,小写字母相当高)。

但如果出现带有装饰的字母,基线不均匀的问题仍然会出现。

在 AMS 类中,使用 10/13 的设置,其中一个原因肯定是重音符号在数学文档中很常见。以下是比较:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont[Scale=.85]{Lucida Bright OT}
\setmathfont[Scale=.85]{Lucida Bright Math OT}
\newfontface\luc{Lucida Bright OT}

\begin{document}

Setting is 10/12

\medskip

Some text just to show the effect when some large symbol
is inline and some text just to show the effect when
some large symbol is inline; here it is $\widetilde{\beta}$
and some text follows and some text follows and some text follows
and some text follows and some text follows.

\bigskip

\linespread{1.08333}\normalsize %\baselineskip=13pt

Setting is 10/13

\medskip

Some text just to show the effect when some large symbol
is inline and some text just to show the effect when
some large symbol is inline; here it is $\widetilde{\beta}$
and some text follows and some text follows and some text follows
and some text follows and some text follows.

\end{document}

在第二段中,我使用了 10/13 设置,并且行距相等。 在此处输入图片描述

我不会太在意偶尔扩大一个基线跳跃;但调整可能值得一试。只要把

\linespread{1.08333}

在您的序言中。您可能还需要稍微更改文本高度以确保行数为整数。该geometry包可以使用键来执行此操作heightrounded。如果您更喜欢未缩放的 Lucida,则基线跳跃应该增加 13pt 以上。

答案3

(从我的评论中迁移过来)

你可以使用\smash以下命令让 TeX 相信它的参数既没有高度也没有深度:

\documentclass{article}
\usepackage{amsmath}
\begin{document}\thispagestyle{empty}
You may use the \texttt{\string\smash} command which tricks TeX into
believing that its argument has neigher height nor depth, as in for example
$\smash{\widetilde{f}}$ which now does not upset the line spacings. We can
compare \underline{with} the smash: $A
\smash{\overset{\widetilde\alpha}{\to}} B$ and \underline{without} the
smash: $A \overset{\widetilde\alpha}{\to} B$ and lament the fact that the
horizontal spacing in the smashed case was modified, adding a
\texttt{\string\mathrel}: $A
\mathrel{\smash{\overset{\widetilde\alpha}{\to}}} B$ gives us a correct
spacing. We could have tried to smash only the widetilded alpha but for some
reason related to \texttt{\string\overset} this does not work $A
\overset{\smash{\widetilde\alpha}}{\to} B$. Speaking of \texttt{amsmath}
which provides \texttt{\string\overset}, we also have the additional
commands 
\texttt{\string\smash[b]} and \texttt{\string\smash[t]} which ``smash'' only
the ``depth'', respectively the ``height'' of the argument. We can try this
out with $A \mathrel{\smash[t]{\overset{\widetilde\alpha}{\to}}} B
\mathrel{\smash[t]{\underset{\widetilde\alpha}{\to}}} C$ where I used only
\texttt{\string\smash[t]} and we can see the effet of the unsuppressed
depth. 
On the other hand \texttt{\string\smash[b]} as well as
\texttt{\string\smash} both 
give $B \mathrel{\smash[b]{\underset{\widetilde\alpha}{\to}}} C$ and we can
check that it also worked for the ``depth'' as we keep on saying senseless
things and make a mess of our lives spending too much time with \TeX's
macros.
\end{document}

latex 编译的 dvi 图像

答案4

行间距增加是为了避免符号与其他文本行发生冲突。一种非常可靠的方法是增加行间距,方法是说

\linespread{1.2}

或文档序言中的类似内容(我希望这在 XeLaTeX 中有效)。但是,从印刷的角度来看,这并不是很好(并且值过大会1.3使文本变得丑陋)。

LuaLaTeX 中可能存在一种通用解决方案,即在排版后允许修改(某些)段落,并且可以根据实际的段落输出计算增加行跳过的必要性。不过,我不是 LuaLaTeX 的程序员,因此无法透露更多。

相关内容