这个问题的讨论提出了以下问题减少使用的字体数量(从默认设置)
问题
我还没有找到解释为什么我们在数学和文本模式下有不同的字体类型。询问默认数学字体和文本字体之间的差异似乎是合理的。答案是在数学环境中不需要连字吗?
评论
最后,我想决定在两者之间使用不同的字体是否合理。
答案1
如果我理解正确的话,你是在问为什么TeX 会根据字母和数字是在文本模式还是数学模式中使用不同的字体。换句话说,如果一个设计良好的数学字体恰好包含了文本模式设置中可能出现的所有字母、数字和标点符号,为什么不在文本模式下也使用这种数学字体呢?为什么在这种情况下要使用两种不同的字体?(当然,数学也经常需要符号——例如,求和和积分符号、分数线和素数——而这些符号在文本模式下根本不会出现。我认为符号字体不是你问题的一部分。)
您已经提到了使用不同字体的一个原因:文本字体经常为字符对和三元组提供连字,例如,,,,,,也可能为,,,,,,,
ff
等提供连字。fi
在数学模式下,用连字替换这些字符对和三元组几乎肯定是不可取的。fl
ffi
ffl
ft
fft
fj
fh
ct
st
sp
使用不同字体的第二个原因(可能更重要)是,字母周围的侧边距可能(也应该!)因出现在文本模式还是数学模式而有很大差异。考虑字符串
fly
和office
;在下面的例子中,它们首先设置为文本斜体模式,通过\kern0pt
指令抑制连字,然后设置为数学斜体模式。(竖线表示文本块的左边缘。)
(第二点,继续。)请注意,在文本斜体模式下,字母F实际上有一个消极的左侧边距,这样它的降部就可以“侵占”前一个字符或单词间空间所占据的空间;它的右侧边距似乎几乎为零,这样它就可以接触到后续字符,例如升。相反,在数学斜体模式下,左侧边距F为零,其右侧边距为正。我想这样做是为了当字符组合
ff
和fl
出现在数学模式中时,我们处理的是分别名为f
和的单字母变量的乘积l
,而不是名为ff
和的双字母变量的乘积fl
。为了更加清晰,有些人可能会改写f\cdot f
和f\cdot l
。如果数学字体设计正确,它不应该必要的这样做。请注意,数学模式下“l”和“y”、“f”和“i”、“i”和“c”以及“c”和“e”之间的间距也比文本模式下大。这不仅适用于上例中使用的字体系列(
newtx
),也适用于所有具有文本和数学模式的精心设计的字体系列。在文本和数学模式上下文中设置不同侧边距的问题延伸到标点符号:诸如
,
(逗号)、:
(冒号)、;
(分号)和!
(感叹号/阶乘)等字符在文本和数学模式中通常具有不同的含义;它们周围的间距反映了它们出现的上下文。(请注意,我不是在谈论通常出现的符号,例如+
和=
仅有的在数学模式下。后两个符号在文本模式下的出现通常表示排版不佳。第三,从文档设计的角度来看,对文本和数学使用不同的字体提供了重要的自由度:即使您个人可能对文本和数学材料使用相同的字体系列(例如,Computer Modern、Latin Modern、newtx 或 newpx),但其他人可能不这么认为。例如,有人可能更喜欢将
newpxtext
(Palatino 克隆)与 一起使用nexpxmath
,而其他人可能更喜欢将其与 结合使用eulervm
。为了提供这种程度的设计自由,几乎肯定需要将数学和文本字体存储在单独的文件中。
最后,这是用于生成上述示例的代码。
\documentclass{article}
\usepackage[showframe]{geometry} % draw vertical lines around text block
\setlength\parindent{0pt} % just for this example
\usepackage{newtxtext,newtxmath}
\begin{document}
\emph{f\kern0pt ly} % text italic mode
$fly$ % math (italic) mode
\emph{o\kern0pt f\kern0pt f\kern0pt ice}
$office$
\end{document}
答案2
很难回答,因为传统上,使用相同的字体根本不是一个选择,你只需要太多的符号。考虑一下小文档
\tracingonline2
\showboxdepth100
\showboxbreadth100
\scrollmode
\setbox0\vbox{
one {\it two}
$$\alpha + \sum_0^\infty x^2$$
}
\showbox0
\expandafter\show\the\tenrm
\expandafter\show\the\tenit
\expandafter\show\the\teni
\expandafter\show\the\sevensy
\expandafter\show\the\tenex
\box0
\bye
输出显示使用了 5 种字体:
> \tenrm=select font cmr10.
> \tenit=select font cmti10.
> \teni=select font cmmi10.
> \sevensy=select font cmsy7.
> \tenex=select font cmex10.
直立罗马文本字体、斜体字体、数学斜体字体、7pt 符号字体和 10pt 大符号扩展字体。
经典 TeX 使用了太多字符,无法容纳在一个 8 位字体中。
也许您主要想问的是为什么数学斜体字体与文本斜体不同?主要的区别在于,在文本中,相邻字母组成一个单词,因此字母的侧边距较小,因此它们靠得很近,并且一些组合会与连字合并或通过字距拉近。相反,数学斜体相邻字母通常是独立变量的隐含乘积,设计会尝试使它们不是看起来像一个单词:宽边距并且通常没有连字。
使用现代 Unicode 字体,当然可以将许多字形放入同一种字体中,但这只是一个实现问题,您仍然需要不同的字形,也许使用斜体字体,其中 U+0061 表示 a,U+1D44E 表示数学斜体 a,因此即使它们是同一种字体中的两个 a,它们也是不同的字形,只是打包成一个大字体而不是许多小字体。