任务

任务

任务

我正在用 (Xe)LaTeX 写论文,用于fontspec字体定义。文档的主字体大小是12pt,传递给 TeX通过一个\documentclass选项。我想定义一个辅助字体,并指定10pt其大小以用于某些用途。理想情况下,我希望在使用 定义辅助字体时直接输入该字体的大小\newfontfamily

跳到“问题”部分内容可以被称作‘太长,没法读’的摘要。

我知道的潜在解决方案

我立即注意到的一件事是,这\footnotesize会将文本缩放到10pt我想要的正确字体大小。我以两种不同的方式使用了它,稍后可以在 MWE 中看到。

另一个选择是使用fontspecSizeFeatures这个答案

第三个是定义一个\fontsize— 但是,这需要计算两个不同的值;我认为应该由 TeX 来做,而不是我来做。

最后,还可以将Scale字体定义为这个答案建议。

我没有找到任何直接的方法来指定字体的大小通过命令\newfontfamilyfontspecCTAN 文档

数学家协会

\documentclass[12pt]{report} % see also note [1]
\usepackage{mathspec} % includes fontspec
\usepackage{polyglossia} % for languages — see note [2]
\setmainlanguage[babelshorthands=true,spelling=new]{german}
\usepackage{lipsum}

\setmainfont[Mapping=tex-text]{LiberationSerif} % my main font — see note [3].
\newfontfamily\antiquasans[Mapping=tex-text]{LiberationSans}  % A secondary font for demonstration
\newfontfamily\overpicfont[Mapping=tex-text, SizeFeatures={Size=10}]{LiberationSans} % defining with SizeFeatures
\newfontfamily\overpicscale[Mapping=tex-text, Scale=0.83]{LiberationSans} % defining with Scale

\newcommand\overpiccommand[1]{{\antiquasans\footnotesize #1}} % defined as an environment.

\begin{document}
\lipsum[1]                            % a comparison paragraph

{\antiquasans \lipsum[1]}             % a sans-serif paragraph with 12pt

\overpiccommand{\lipsum[1]}           % the environment including \footnotesize

{\overpicfont\footnotesize\lipsum[1]} % font forced to 10pt by SizeFeatures and footnotesize

{\overpicfont\lipsum[1]}              % font forced to 10pt by SizeFeatures

{\overpicscale\lipsum[1]}             % font scaled

\lipsum[1]                            % 12pt comparison paragraph

\end{document}

渲染输出

12pt由于存在分页符,因此呈现的文档字体大小的输出被分成两个图像。

渲染输出 12pt 文档第 1 部分渲染输出 12pt 文档第 2 部分

从上到下:

  • 标准(衬线)文本的最后一行
  • 无衬线字体\antiquasans
  • \overpiccommand环境,包括\antiquasans\footnotesize
  • \overpicfont\footnotesize变体 — 包括FontFeatures\footnotesize。这是通过分页符分隔的段落。
  • 仅使用FontFeatures
  • 仅使用Scale
  • 衬线字体的比较文本12pt

渲染输出 10pt 文档

在该10pt文档中,我们可以比较以下段落:

  • 标准(衬线)文本的最后一行
  • 无衬线字体\antiquasans
  • \overpiccommand环境,包括\antiquasans\footnotesize
  • \overpicfont\footnotesize变体 — 包括FontFeatures\footnotesize。请注意,这里\footnotesize定义了8pt,而FontFeatures需要10pt
  • 仅使用FontFeatures

测试结果

10pt我注意到的第一件事是,在文档中定义不同的12pt行高会导致两种不同的行高 - 参见附图。字体(Liberation 和 LiberationSans)的标准12pt行高约为 5 毫米。使用SizeFeature强制和Scale因子,即使字体尺寸较小,行高仍保持不变。任何包含的内容\footnotesize(环境和额外的\footnotesize强制)都会使行高约为 4.2 毫米,与文档的标准行高一致10pt

因此,使用SizeFeaturesScale选项不是一个选择,因为它会导致不正确(太大)的行距。

对该10pt文档进行进一步测试表明,这SizeFeatures根本不影响行高:包括\footnotesize缩放SizeFeatures字体的段落的行高为 c. 3 毫米 - 与8pt脚注一致 - 而字体大小显然符合10pt要求SizeFeatures

结论

  • 正如我之前所说,我不想使用。我想以某种方式告诉 TeX在我的文档中\fontsize使用字体大小,并让引擎进行所需的缩放。10pt12pt

  • 出于同样的原因,我不喜欢使用SizeFeatures。这些会使字体大小变小,但不调整行高。

  • 使用Scale参数也会带来这个问题,但还有一个额外的缺点,那10/12就是数字是有限的。因此,10pt我不得不使用某种近似值,而不是输入明确的。这是一个非常糟糕的解决方案。

  • 如果我只有内联示例,使用环境可能会有效,但我怀疑它不会达到我的预期用途。然而,考虑到环境定义工作,我很可能会为自己定义一个可以扩展为相同内容的命令。

  • \footnotesize最不理想的选择就是在每次出现 时附加\overpicfont

问题

在定义新字体系列时,是否存在某种添加谨慎、不可变的字体大小选项的方法,以便 TeX 自动选择合适的行高并相应地调整所有其他大小?类似于:

\newfontfamily\tenpointfont[size=10pt, other options]{MyCrazyFontsName}

笔记

[1]:我也进行了不带该选项的比较运行12pt,即使用 TeX 的标准字体大小10pt

[2]:由于某种原因,当我没有包含语言定义时,出现了错误polyglossia,因此我将其留在了文档中。不过,我认为它并不重要。

[3]:我读过,Mapping=tex-text两者Ligatures=TeX完全相同,但后者确保与 LuaLaTeX 兼容。由于我只使用 XeLaTeX,因此从上一篇论文中复制时我没有更改这一点。

答案1

主要的误解似乎是

正如我之前所说,我不想使用 \fontsize。我想以某种方式告诉 TeX 在我的 12pt 文档中使用 10pt 的字体大小,并让引擎进行所需的缩放。

字体本身(以及fontspec字体加载命令)不指定基线间距。基线间距需要在文档类中指定(或在序言中调整)。类需要指定行距以及所有其他间距,这就是该\fontsize命令需要两个参数的原因,由文档设计者来指定每种字体大小的基线。

因此,在 12pt 基线上指定 10pt 使用的字体的自然方法是,\antiquasans\footnotesize理论上可以降至稍低的水平并避免选择中间字体,就像\fontseries{bx}\fontshape{it}\selectfont 避免做两件事一样\selectfont,这将通过直接选择粗体斜体而不先选择粗体或斜体来暗示\bfseries\itshape,然而,与加载 opentype 字体所做的其余工作相比,收益可能是无法衡量的。

相关内容