如何防止字体替换?

如何防止字体替换?

我正在尝试制作 tufte-book 以使用 EB Garamond。确实如此,但遗憾的是,我有不少满满的盒子,因为许多包装/样式都使用粗体字体。

投诉的 MWE 如下:

\documentclass[a4paper,nobib,twoside,nofonts,nols]{tufte-book}

\usepackage{ebgaramond}

\ifxetex
  \usepackage{fontspec}
  \setmainfont{EB Garamond}
  % some more renewals, as suggested in http://tex.stackexchange.com/a/202189/9293
  % \renewcommand{\bfseries}[1]{\swshape}

\fi

\begin{document}
\part{Whine and cheese}
\end{document}

上述 mwe 编译时出现警告:

LaTeX Font Warning: Font shape `EU1/EBGaramond(0)/bx/n' undefined
(Font)              using `EU1/EBGaramond(0)/m/n' instead on input line 32.

[1] [2] (index.aux)stdin -> index.pdf
[1][2]
4341 bytes written


LaTeX Font Warning: Some font shapes were not available, defaults substituted.

如果我使用完整的文档,情况会变得更糟,因为相当多的换行符出现在错误的位置(我怀疑字体替换是罪魁祸首)。

我已经尝试更新\bfseries命令,因为我怀疑它负责在中使用book.sty,但如果我这样做,部分的文本会发生变化(前几个字符被省略,并且“部分”也被删除),可能是因为重新定义\bfseries比设置字体粗细更多:/

因此我问你:a) 如何仅为 重新定义实际字体参数化\part,以及 b) 如何为 ebgaramond 的所有用法重新定义所有粗体?(因为 EB Garamond 不支持bx

或者一般来说:如何解决这样的问题?

答案1

ebgaramond包包含代码

  \setmainfont
      [ Numbers = {\ebgaramond@figurealign,\ebgaramond@figurestyle},
        UprightFont    = *-Regular ,
        ItalicFont     = *-Italic ,
        BoldFont    = *-Regular ,
        BoldItalicFont     = *-Italic ,
      ]
      {EBGaramond12}

当排版引擎为 XeLaTeX 或 LuaLaTeX 时执行。该Numbers选项的两个宏使用包选项设置(或应用默认值)。

如果仔细观察,该BoldFont选项声明的字体与和UprightFont相同。原因很简单:EB Garamond 没有粗体字体,因此软件包指示为其使用中等粗细字体。BoldItalicFontItalicFontfontspec

类似地,.fd字体文件pdflatex

\DeclareFontShape{T1}{EBGaramond-LF}{b}{n}{ <-> ssub * EBGaramond-LF/m/n }{}

和其他类似的(s我借给)其目的是避免出现类似您所报告的警告信息的机构。

为什么你还是得到了它?因为声明

\setmainfont{EB Garamond}

加载包后,您将获得该包,它将覆盖前一个包。由于字体一开始没有粗体,因此在fontspec构建字体系列数据时,它找不到它,因此它不会定义它,并且当请求粗体时,LaTeX 会发出(非静默)替换的标准警告。

删除申明。


也要避免xlxtra:目前它只加载一些包:

  • ifxetex
  • fontspec
  • realscripts
  • metalogo

只需加载fontspec即可。该realscripts包可能适用于您声明的字体,也可能不适用于:最好试验一下它是否有效。如果您不需要排版 XeLaTeX 或其他类似徽标,则不需要metalogo。如果需要,请明确加载它。

答案2

以下代码示例(对我而言)适用于TeXLive,包含 、 和 的文档类articletufte-book并由memoirpdflatextex + dvi处理xetex

输出应如下所示:

在此处输入图片描述

从这样的源代码:

\documentclass{tufte-book}
%  \documentclass{article} % also works
%  \documentclass{memoir}  % also works

\RequirePackage{lmodern}   % supports \ttfamily\bfseries
\RequirePackage{garamondx} % supports \rmfamily\bfseries
\edef\EBfamilydefaultbf{\familydefault}
\edef\EBrmdefaultbf{\rmdefault}
\RequirePackage[oldstyle,proportional,scaled=1.05]{ebgaramond} 
\edef\EBfamilydefault{\familydefault}
\edef\EBrmdefault{\rmdefault}

\RequirePackage{ifthen}
\makeatletter%
  \newcommand{\iffont}[3]{\ifthenelse{\equal{\f@family}{#1}}{#2}{#3}}
  \newcommand{\ifseries}[3]{\ifthenelse{\equal{\f@series}{#1}}{#2}{#3}}
\makeatletter

\let\oldbfseries\bfseries
\renewcommand{\bfseries}{\iffont{\EBrmdefault}%
  {\fontfamily{\EBrmdefaultbf}\selectfont\oldbfseries}%
  {\oldbfseries}%
}
%  
\let\oldmdseries\mdseries
\renewcommand{\mdseries}{\iffont{\EBrmdefaultbf}%
  {\fontfamily{\EBrmdefault}\selectfont\oldmdseries}%
  {\oldmdseries}%
}
%  
\let\oldrmfamily\rmfamily
\renewcommand{\rmfamily}{\ifseries{b}%
  {\fontfamily{\EBrmdefaultbf}\selectfont}%
  {\oldrmfamily}%
}

\begin{document}
% ----------------------------------------------------------------
% the following is necessary solely to undo some 'garamondx' patches
\edef\rmdefault{\EBrmdefault}\normalsize\mdseries\upshape\rmfamily%
% ----------------------------------------------------------------

\centering    
\DeclareRobustCommand{\lit}[1]{\ttfamily\textbackslash{#1}}
\begin{tabular}{rl}
\lit{rmfamily}\lit{mdseries}\lit{upshape} & \rmfamily\mdseries\upshape Quantum\\
\lit{rmfamily}\lit{mdseries}\lit{itshape} & \rmfamily\mdseries\itshape Quantum\\
\lit{rmfamily}\lit{mdseries}\lit{scshape} & \rmfamily\mdseries\scshape Quantum\\[1ex]
\lit{rmfamily}\lit{bfseries}\lit{upshape} & \rmfamily\bfseries\upshape Quantum\\
\lit{rmfamily}\lit{bfseries}\lit{itshape} & \rmfamily\bfseries\itshape Quantum\\
\lit{rmfamily}\lit{bfseries}\lit{scshape} & \rmfamily\bfseries\scshape Quantum\\[1ex]
\lit{ttfamily}\lit{mdseries}\lit{upshape} & \ttfamily\mdseries\upshape Quantum\\
\lit{ttfamily}\lit{mdseries}\lit{itshape} & \ttfamily\mdseries\itshape Quantum\\
\lit{ttfamily}\lit{mdseries}\lit{scshape} & \ttfamily\mdseries\scshape Quantum\\[1ex]
\lit{ttfamily}\lit{bfseries}\lit{upshape} & \ttfamily\bfseries\upshape Quantum\\
\lit{ttfamily}\lit{bfseries}\lit{itshape} & \ttfamily\bfseries\itshape Quantum\\[1ex]
\lit{sffamily}\lit{mdseries}\lit{upshape} & \sffamily\mdseries\upshape Quantum\\
\lit{sffamily}\lit{mdseries}\lit{itshape} & \sffamily\mdseries\itshape Quantum\\[1ex]
\lit{sffamily}\lit{bfseries}\lit{upshape} & \sffamily\bfseries\upshape Quantum\\
\lit{sffamily}\lit{bfseries}\lit{itshape} & \sffamily\bfseries\itshape Quantum\\
\end{tabular}

\end{document}

警告:我并不是 LaTeX 专家。

相关内容