使用拉丁现代罗马字体的全部字体/样式/面孔的最佳方式是什么?

使用拉丁现代罗马字体的全部字体/样式/面孔的最佳方式是什么?

以下是我整理的内容,以确保在使用 Latin Modern 作为mainfont字体规范时可以使用最全的字体/样式,包括粗体小型大写字母、斜体小型大写字母等:

\setmainfont[
    SmallCapsFont={Latin Modern Roman Caps},
    SlantedFont={* Slanted},
    ItalicFeatures  = {
        SmallCapsFont = {LMRomanCaps10-Oblique}
      },
    BoldFeatures = {
      SmallCapsFont = {CMU Serif-Bold},
      Letters=SmallCaps
      }    
    ]{Latin Modern Roman}

(稍微作弊,因为它使用计算机现代 Unicode 来表示粗体小型大写字母。)

这样合理吗,或者有更好的方法吗?

完整最小示例:

\documentclass{article}[12pt]

\usepackage[T1]{fontenc}
\usepackage{fix-cm}
\usepackage{fontspec}
\defaultfontfeatures{Renderer=Full,Ligatures=TeX,Numbers=OldStyle,Scale=MatchLowercase}
\setmainfont[
    SmallCapsFont={Latin Modern Roman Caps},
    SlantedFont={* Slanted},
    ItalicFeatures  = {
    SmallCapsFont = {LMRomanCaps10-Oblique}
      },
    BoldFeatures = {
      SmallCapsFont = {CMU Serif-Bold},
      Letters=SmallCaps
      }    
      ]{Latin Modern Roman}
\begin{document}

\begin{tabular}{ll}
  Plain roman & Hello, world.\\
  Bold roman & \textbf{Hello, world.}\\
  Italics & \textit{Hello, world.}\\
  Bold italics & \textit{\textbf{Hello, world.}}\\
  Plain smallcaps & \textsc{Hello, world.}\\
  Bold smallcaps & \textbf{\textsc{Hello, world.}}\\
  Italics smallcaps & \textit{\textsc{Hello, world.}}\\
  Bold italic small caps & \textit{\textbf{\textsc{Hello, world.}}} [doesn't work]\\
&\textbf{\textit{\textsc{Hello, world.}}} [doesn't work]\\
  Typewriter & \texttt{Hello, world.}\\
  Italic typewriter & \textit{\texttt{Hello, world.}}\\
  Bold typewriter & \textbf{\texttt{Hello, world.}}\\
  Bold italic typewriter & \textit{\textbf{\texttt{Hello, world.}}}\\
  Slanted & \textsl{Hello, world.}\\
  Bold slanted & \textbf{\textsl{Hello, world.}}\\
\end{tabular}

\end{document}

上面的输出

粗体、斜体、小型大写字母组合不起作用(我不知道我是否需要这种组合),而且我确实收到了一些警告:

Package fontspec Warning: OpenType feature 'Letters=SmallCaps' (smcp) not
(fontspec)                available for font 'Latin Modern Roman/B' with
(fontspec)                script 'Latin' and language 'Default'.

(./test5.aux)

LaTeX Font Warning: Font shape `TU/lmtt/bx/it' in size <10> not available
(Font)              Font shape `TU/lmtt/b/sl' tried instead on input line 38.

有没有更好的方法使用 fontspec 设置拉丁现代字体?

[编辑:为了明确目标,我正在寻找最广泛的字符覆盖范围、最广泛的字体/样式覆盖范围,以及使用拉丁/计算机现代字体系列时的最佳渲染效果(按重要性排序)。

答案1

你已经有了一个很好的开始,但这还只是冰山一角全部Computer Modern 系列中的字体。如果您看到“LaTeX 字体安装指南”,该方案扩展了LaTeX 伴侣,还有更多宽度、重量和形状的官方标准化名称。拉丁现代 Unicode、计算机现代 Unicode 或两者中都存在一些名称。

作为参考,以下是拉丁现代系列并在计算机现代 Unicode集合。当然,还有 Latin Modern Math 来替换数学和数学符号字体​​。该程序(也otfinfo适用于CMU 的字体)可用于查看哪些 CMU 字体包含小型大写字母。.ttf

在拉丁现代派的额外面孔中,我将黛米视为额外的重量,我称之为sb(因为这是第二版中和sb之间的唯一重量)mbLaTeX 伴侣.),以及 Unslanted 作为附加形状,ui。我添加了命令\sbseries\textsb对应于\bfseries\texbf,以及\uishape\textui对应于\itshape\textit。您可以使用这些作为模板来添加任何其他系列或形状。

如果您希望能够单独设置字体粗细和范围,以便能够在 Latin Modern Sans Cond 块中间选择粗体,您可能需要查看该包nfssext-cfr以获取灵感。

拉丁现代和计算机现代 Unicode 字体包括其他几个系列。其中,CMU Concrete 是一种完全不同的字体,最初是为 DEK 的书而委托的,具体数学。我还将 Latin Modern Roman Dunhill 和 CMU Classical Serif 视为不同的系列。不过,将 CMU Bright 视为无衬线字体的较细字体可能更有意义。

CMU 包含拉丁现代字体中不存在的一个系列:粗体非扩展。出于这些目的,我将给它系列bc,表示粗体压缩。它不附带斜体、倾斜或小写字母。除此之外,我使用它的一些粗体小写字母。

这是拉丁现代罗马家族的样本。

\documentclass[varwidth]{standalone}
\usepackage{amsmath}
\usepackage{unicode-math}
\usepackage{microtype}

\defaultfontfeatures{ Scale = MatchUppercase }

\setmainfont{Latin Modern Roman}[
  Scale = 1.0 ,
  Ligatures = {Common, Rare, TeX} ,
  UprightFont = {Latin Modern Roman} ,
  UprightFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = { Ligatures = ResetAll } ,
    SmallCapsFont = {lmromancaps10-regular.otf}
  } ,
  BoldFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = {Letters = SmallCaps } ,
    SmallCapsFont = {CMU Serif Bold}
  } ,
  ItalicFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = { Ligatures = ResetAll } ,
    SmallCapsFont = lmromancaps10-oblique.otf
  } ,
  BoldItalicFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = { % Ligatures = ResetAll ,
                          Letters = SmallCaps } ,
    SmallCapsFont = cmunbl.ttf
  } ,
  SlantedFont = {Latin Modern Roman Slanted} ,
  SlantedFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = { Ligatures = ResetAll } ,
    SmallCapsFont = lmromancaps10-oblique.otf
  } ,
  BoldSlantedFont = lmromanslant10-bold.otf ,
  BoldSlantedFeatures = {
    Ligatures = Discretionary ,
    SmallCapsFeatures = { % Ligatures = ResetAll ,
                          Letters = SmallCaps } ,
    SmallCapsFont = cmunbl.ttf
  } ,
  FontFace = {sb}{n}{
    Font = {Latin Modern Roman Demi} ,
    Ligatures = Discretionary } ,
  FontFace = {sb}{sl}{
    Font = lmromandemi10-oblique.otf ,
    Ligatures = Discretionary } ,
  FontFace = {sb}{it}{
    Font = lmromandemi10-oblique.otf ,
    Ligatures = Discretionary } ,
  FontFace = {bc}{n}{CMU Serif Bold Non-Extended} ,
  FontFace = {m}{ui}{Latin Modern Roman Unslanted}
]

\setmathfont{Latin Modern Math}
\setmathfont[range=up]{Latin Modern Roman Unslanted}

\DeclareRobustCommand\sbseries{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}
\DeclareRobustCommand\uishape{\fontshape{ui}\selectfont}
\DeclareTextFontCommand{\textui}{\uishape}

\begin{document}
  \begin{minipage}{10cm}

\textrm{
Latin Modern Roman \textit{Italic} \textsl{Slanted} \textui{Upright-Italic}
\textsb{Demibold \textit{Oblique}}
\textbf{Bold \textit{Italic} \textsl{Slanted}} {\fontseries{bc}\selectfont Non-extended}
\textsc{Small Caps \textit{Italic} \textsl{Slanted} \textbf{Bold \textit{Italic} \textsl{Slanted}}}
}
\[ \symup{e}^{\symup{i}x} = \cos x + \symup{i} \sin x \implies \symup{e}^{\symup{i}\muppi} + 1 = 0 \]
  \end{minipage}
\end{document}

拉丁现代罗马字体示例

我举了一个例子来说明直立斜体样式的用处:它非常适合以 ISO 样式直立设置数学常数,例如 e、π 和 i。将虚数单位 ii sin xsin斜体变量名进行比较X。您还可以将其作为如何在数学模式下使用任何其他字体的示例。

您可以通过删除命令来消除一些警告Ligatures。无论出于何种原因,可能是 中的一个错误fontspecSmallCapsFeatures = {Ligatures = ResetAll}它什么都不做,Ligatures = NoDiscretionary只产生一个第二错误消息指出该字体不支持dlig。但是,这个警告是无害的。

如果你想要更多种类的小型大写字母,你可以将该FakeBold功能应用到不同的粗细,或者你可能会发现这个代码很有用

答案2

据我所知,对此没有任何好的解决方案。

解决这个问题的一种方法是将 Latin Modern 字体换成另一种具有足够字形的字体(我不知道是否有具有足够字形的免费字体,但专业字体可能可以涵盖您想要的所有样式)。

其他的都是用一个可用的方法:使用你可以使用包pdflatex模拟“斜体小写字母”和“倾斜小写字母” ,至少使用 pdflatex(抱歉,没有用 lualatex 测试过)并模拟粗体变体重叠文本。宏和现在是执行此操作的非常幼稚的方法,牢不可破的文本,但我希望足以检查它是否看起来像真正的粗体字体(再次抱歉,但现在我没有时间测试更方便的方法来重叠文本,也许以后):slantsc\textbfsl\textbfslsc

姆韦

\documentclass[12pt]{article}
\usepackage[T1]{fontenc} 
\usepackage{lmodern}
\usepackage{slantsc}
\def\textbfsl#1{\makebox[.3pt][l]{%
\makebox[.29pt][l]{\textsc{#1}}%
\makebox{\textsc{#1}}}}
\def\textbfslsc#1{%
\makebox[.29pt][l]{\textsl{\textsc{#1}}}%
\makebox{\textsl{\textsc{#1}}}}
\begin{document}

\begin{tabular}{ll}
  Plain roman & Hello, world.\\
  Bold roman & \textbf{Hello, world.}\\
  Italics & \textit{Hello, world.}\\
  Bold italics & \textit{\textbf{Hello, world.}}\\
  Plain smallcaps & \textsc{Hello, world.}\\
  Bold smallcaps & \textbfsl{Hello, world.}\\
  Italics smallcaps & \textsl{\textsc{Hello, world.}}\\
  Bold italic small caps & \textbfslsc{Hello, world.}\\
  Typewriter & \texttt{Hello, world.}\\
  Italic typewriter & \textit{\texttt{Hello, world.}}\\
  Bold typewriter & \textbf{\texttt{Hello, world.}}\\
  Bold italic typewriter & \textit{\textbf{\texttt{Hello, world.}}}\\
  Slanted & \textsl{Hello, world.}\\
  Bold slanted & \textbf{\textsl{Hello, world.}}\\
\end{tabular}

\end{document}

如果lmodern不是绝对必须的,tgtermesslantsc不需要任何宏:

姆韦

\documentclass[12pt]{article}
\usepackage[T1]{fontenc} 
\usepackage{tgtermes}
\usepackage{slantsc}

\begin{document}

\begin{tabular}{ll}
  Plain roman & Hello, world.\\
  Bold roman & \textbf{Hello, world.}\\
  Italics & \textit{Hello, world.}\\
  Bold italics & \textit{\textbf{Hello, world.}}\\
  Plain smallcaps & \textsc{Hello, world.}\\
  Bold smallcaps & \textbf{\textsc{Hello, world.}}\\
  Italics smallcaps & \textit{\textsc{Hello, world.}}\\
  Bold italic small caps & \textit{\textbf{\textsc{Hello, world.}}}\\
  Typewriter & \texttt{Hello, world.}\\
  Italic typewriter & \textit{\texttt{Hello, world.}}\\
  Bold typewriter & \textbf{\texttt{Hello, world.}}\\
  Bold italic typewriter & \textit{\textbf{\texttt{Hello, world.}}}\\
  Slanted & \textsl{Hello, world.}\\
  Bold slanted & \textbf{\textsl{Hello, world.}}\\
\end{tabular}

\end{document}

答案3

CM Serif BoldItalic 没有小写字母,但你可以伪造它们。

\documentclass{article}

\usepackage{fontspec}
\defaultfontfeatures{
  Renderer=Full,
  %Ligatures=TeX,
  Numbers=OldStyle,
  Scale=MatchLowercase,
}

\setmainfont{Latin Modern Roman}[
  SlantedFont = {* Slanted},
  UprightFeatures = {
    SmallCapsFont = {* Caps},
  },
  ItalicFeatures = {
    SmallCapsFont = LMRomanCaps10-Oblique,
  },
  BoldFeatures = {
    SmallCapsFont = CMUSerif-Bold,
    SmallCapsFeatures={Letters = SmallCaps},
  },
  % Neither Latin Modern nor CM Unicode have bold italic small caps
  BoldItalicFeatures = {
    SmallCapsFont = CMUSerif-Bold,
    SmallCapsFeatures={FakeSlant=0.25,Letters=SmallCaps},
  },
]

\begin{document}

\begin{tabular}{ll}
  Plain roman & Hello, world.\\
  Bold roman & \textbf{Hello, world.}\\
  Italics & \textit{Hello, world.}\\
  Bold italics & \textit{\textbf{Hello, world.}}\\
  Plain smallcaps & \textsc{Hello, world.}\\
  Bold smallcaps & \textbf{\textsc{Hello, world.}}\\
  Italics smallcaps & \textit{\textsc{Hello, world.}}\\
  Bold italic small caps & \textit{\textbf{\textsc{Hello, world.}}}\\
  Typewriter & \texttt{Hello, world.}\\
  Italic typewriter & \textit{\texttt{Hello, world.}}\\
  Bold typewriter & \textbf{\texttt{Hello, world.}}\\
  Bold italic typewriter & \textit{\textbf{\texttt{Hello, world.}}}\\
  Slanted & \textsl{Hello, world.}\\
  Bold slanted & \textbf{\textsl{Hello, world.}}\\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容