我深入研究了 microtype 包的细节,以获得最佳结果,但可能不是最安全的结果。阅读手册后仍有四件事不清楚,因此在此发帖。
(1)Microtype 的选项默认应用于以下字体集:
\DeclareMicrotypeSetDefault[protrusion]{alltext}
\DeclareMicrotypeSetDefault[expansion]{basictext}
\DeclareMicrotypeSetDefault[spacing]{basictext}
\DeclareMicrotypeSetDefault[kerning]{alltext}
\DeclareMicrotypeSetDefault[tracking]{smallcaps}
选择跟踪的理由smallcaps
已经解释清楚,没有什么不清楚的。但其余的,为什么不选择all
或allmath
?
记录在案:
alltext
包含常规字体编码,数学字体编码除外。
basictext
包含常规编码,但对字体的系列、形状和大小有一些限制。同样,数学编码缺乏。
allmath
包含常规编码和数学编码 OML 和 OMS 但不是 OMX。
all
包含一切。
(2) 我当前的文档在数学模式下有许多带下标和上标的符号。这些符号也出现在文本正文中,如果 microtype 忽略它们而考虑其余部分,则视觉效果通常不太吸引人。我希望 microtype 将它们考虑在内。或者是否有充分的理由让 microtype 忽略它们?
(3) 手动状态选项可能会干扰 ragged2e 包,但没有说明干扰的方式。干扰有那么复杂吗?我使用 ragged2e 包。如果我启用该选项,spacing
您能透露更多我应该警惕的地方吗?spacing
(4)来自日志文件的Microtype建议:
包微类型信息:加载字体系列(微类型)“lmss”(编码:OT1)的通用突起设置。(微类型)
为了获得最佳效果,请创建特定于系列的设置。(微类型)
有关详细信息,请参阅微类型手册。
由于我只使用 T1 和数学编码,因此我决定将allmath
字体集限制为 T1 和数学编码:
\DeclareMicrotypeSet{allmathT1}{ encoding = {T1,TS1,OML,OMS} }
\UseMicrotypeSet[protrusion]{allmathT1}
这导致了两条线的不同突出,这两条线以数学符号开始或结束。尽管如此,它确实不是突出上标和下标中的数学符号,这正是我想要的。
接下来我决定将扩展的basictext
字体集也限制为 T1,即
\DeclareMicrotypeSet{basictextT1}
{ encoding = {T1},
family = {rm*,sf*},
series = {md*},
size = {normalsize,footnotesize,small,large}
}
\UseMicrotypeSet[expansion]{basictextT1}
然后我看到包含数学的句子被展开了。这不应该是这种情况,因为我没有指定数学编码。
平均能量损失
我费了一番功夫才想出一个还算简单的例子,但我认为下面的代码片段和附带的屏幕截图清楚地显示了问题所在。第一行中的破折号和点在左右边缘正确突出,而后续行中的下标没有突出。
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[final,step=1,tracking,spacing]{microtype}
\microtypecontext{spacing=nonfrench}
\DeclareMicrotypeSet{allmathT1}{ encoding = {T1,TS1,OML,OMS} }
\DeclareMicrotypeSet{basicmathT1}
{ encoding = {T1,OML,OMS},
family = {rm*,sf*},
series = {md*},
size = {normalsize,footnotesize,small,large}
}
\DeclareMicrotypeSet{smallcapsT1}
{ encoding = {T1,TS1},
shape = {sc*,si,scit}
}
\UseMicrotypeSet[protrusion]{allmathT1}
\UseMicrotypeSet[expansion]{basicmathT1}
\UseMicrotypeSet[tracking]{smallcapsT1}
\UseMicrotypeSet[spacing]{basicmathT1}
\usepackage{mathtools} %For prescript
\begin{document}
\noindent
%First line becomes protruded, whereas the subsequent lines not
-word word word word word word word word word word word word word word.
| \hfill |\\
$\prescript{}{0}{C}$ \hfill word.\\
$\prescript{}{1}{C}$ word word word word word word word word word words words words w$_\text{ord}$
$\prescript{}{2}{C}$ word word word word word word word word word words words words w$_\text{ordd}$
$\prescript{}{3}{C}$ word word word word word word word word word words words words w$_\text{ord}$
$\prescript{}{4}{C}$ word word word word word word word word word words words words w$_\text{ord}$
\end{document}
答案1
经过搜索和试验,我设计了一个部分答案。如果您知道其余问题的答案,请展开。
第一点,关于为什么要限制字体集:
突出。仍不清楚为什么不设置all
或allmath
,结果不会恶化。
扩展。设置expansion
为all
或allmath
有时会产生更好的结果,有时会产生更坏的结果。它确实减少了包含几个宽分数的句子中令人讨厌的“白洞”的大小。排除数学编码的原因可能是因为数学表达式的一致外观被认为比扩展的更好外观更重要。与常规文本相比,您有时确实会注意到数学符号之间的这种不一致。
间距。启用它可以减少正文中令人讨厌的“白洞”,此外,它比 nowidow 包更好地消除了孤行线。我喜欢这个选项。我看不出basictext
(默认) 和之间的结果有什么区别all
,microtype 要么缺乏对此处其他字体集的支持,要么其他字体集使其无法支持它。使用 OT1 编码时我收到了几个警告,而使用 T1 编码时则不是这样。
字距调整。手册中写道:
不应忽视此功能的一个限制:紧跟在这种字距之后的单词(没有空格分隔)不会被连字符连接,除非您手动插入断点,例如,在撇号后调整字距,'l'apos-trophe'。此外,数学模式中不会应用额外的字距调整。希望 pdfTeX 的这些限制将来会取消。
第二点,关于‘微类型’上标和下标。
我希望将突起设置为all
或allmath
至少会使我的上标和下标突出,但在测试了几个示例后,它们并没有突出。这对我来说仍然不清楚。上标和下标是否属于微类型不支持的 OMX 数学编码?
最初我使用了all
而不是,allmath
但这会发出警告:
软件包 microtype 警告:我找不到字体 (microtype) `OMX/lmex/m/n/12' 的凸出列表。在输入行 104 上关闭此字体的 (microtype) 凸出。
'OMX/lmex/m/n/8' 和 'OMX/lmex/m/n/6' 也会出现同样的警告。我认为这个警告是手册中所述内容的结果:
我们不必担心“largesymbols”,因为它只会用于显示数学,而突起无论如何都不起作用。它声明为:\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
所以我认为我不必担心这个警告。事实上,Latex 字体编码手册对 OMX 是这样说的:
OMX [原文如此] 对具有可变大小的数学符号进行编码,例如符号(如果用于显示的公式,它会改变其大小)以及括号、大括号和根号等的构造部分,它们可以拉伸以适应它们所包含的内容。
解决警告的方法:从字体集切换all
到allmath
,后者不包括 OMX,但仍包括剩余的数学编码 OML 和 OMS。
第三点,关于microtype和ragged2e如何干扰
我找到了答案这里。我仍然想知道罗伯特的建议是否是一个强有力的解决方案,如果是的话,为什么不把它包括在微型手册中?罗伯特建议(针对 RaggedRight):
\setlength\RaggedRightRightskip{1pt plus 2em minus 1pt} % default is: 0pt plus 2em
第四点,通过精确指定字体集来优化微字体
仍然不清楚为什么 Microtype 不突出带有上标和下标的数学表达式,以及为什么在扩展的字体集不包含数学编码时它会扩展数学表达式。
我目前使用的 microtype 包
\usepackage[T1]{fontenc} %T1 font encoding
\usepackage{lmodern} %Latin Modern is Latex's regular T1 font
\usepackage[final,step=1,tracking,spacing]{microtype}
\microtypecontext{spacing=nonfrench} %Ensures Microtype's interword spacing remains enabled when other packages change the interword spacing
\DeclareMicrotypeSet{allmathT1}{ encoding = {T1,TS1,OML,OMS} }
\DeclareMicrotypeSet{basicmathT1}
{ encoding = {T1,OML,OMS},
family = {rm*,sf*},
series = {md*},
size = {normalsize,footnotesize,small,large}
}
\DeclareMicrotypeSet{smallcapsT1}
{ encoding = {T1,TS1},
shape = {sc*,si,scit}
}
\UseMicrotypeSet[protrusion]{allmathT1}
\UseMicrotypeSet[expansion]{basicmathT1}
\UseMicrotypeSet[tracking]{smallcapsT1}
\UseMicrotypeSet[spacing]{basicmathT1}
这step=1
是为了确保当我将 tex 文件交给其他人时我优先考虑质量而不是文件大小。