评论
-packagenewtxmath
支持各种字体,包括libertine
、minion
或garamondx
。我个人非常喜欢 Garamond,但garamondx
它不是默认安装的一部分。因此我改用ebgaramond
它。
为此,我只是从中复制了设置字体的部分newtxmath
。
问题陈述
这是一个最小的不是我到目前为止尝试加载的ebgaramond
数学字母表的工作示例。(unicode-math
或者mathspec
不是一个选项,它需要兼容pdflatex
)
\documentclass{article}
\usepackage{ebgaramond}
\usepackage[cmintegrals,cmbraces]{newtxmath}
\DeclareSymbolFont{letters}{OML}{EBGaramond12-Italic-lf-t1--base}{m}{it}
\SetSymbolFont{letters}{bold}{OML}{EBGaramond12-Italic-lf-t1--base}{b}{it}
\DeclareFontSubstitution{OML}{EBGaramond12-Italic-lf-t1--base}{m}{it}
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
$ABCDEFGHIJKLMNOPQRSTUVWXYZ$
$abcdefghijklmnopqrstuvwxyz$
$1234567890$
\end{document}
附加问题
我如何使用花饰字形作为mathcal
字母吗?
编辑 2014-01-03
cfr 的评论指出,问题归结为我如何创建 OML 文件ebgaramond
?(附加题依然有效)
答案1
更新
最简单的解决方案是使用ebgaramond 数学,这是 CTAN 提供的一个新软件包。
ebgaramond-maths
现已包含在 TeX Live 中。如果您安装了 TeX Live 2014,则更新时应会获得该软件包。(例如,tlmgr update --all
在命令行中运行或使用您选择的 GUI 包装器。)
下面的答案现在可能只有当您想要调整结果或将该方法应用于不同的字体时才有用。
原始答案
设置 \mathcal 相对简单。设置 OML 支持则没那么简单。
为 EBGaramond 提供 OML 支持
有几种方法可以实现。考虑到现有 ebgaramond 包的工作方式,我选择了最简单的方法。如果我从头开始生成对文本和数学的支持,我可能会采用不同的方法,但在这种情况下,我尽量避免重复劳动。
变量
在某处创建一个工作目录,我将称之为
${work}
。只要您有权限写入,在哪里都可以。(显然,不要以 root 身份执行此操作。)我将调用
${texmain}
你当前的主 texmf 目录。在我的系统上,它是/usr/local/texlive/current
或/usr/local/texlive/2013
。
工作环境
更改为${work}
。从现在开始,我假设所有命令都在此目录中执行,并且所有创建的文件都保存在此处。
将所需文件复制到您的工作目录或根据需要创建符号链接:
cp ${texmain}/texmf-dist/tex/fontinst/mathetx/oml.etx ${texmain}/texmf-dist/fonts/opentype/public/ebgaramond/EBGaramond12-Italic.otf ./
或者
ln -s ${texmain}/texmf-dist/tex/fontinst/mathetx/oml.etx ${texmain}/texmf-dist/fonts/opentype/public/ebgaramond/EBGaramond12-Italic.otf ./
创建初步编码文件
这不是您最终要告诉 TeX 的编码文件,但它将构成该文件的基础。
首先,以交互模式运行 fontinst。(也就是说,只需键入“fontinst”作为命令。)在提示符下:
\input finstmsc.sty
\etxtoenc{oml}{oml-ebgaramond}
\bye
这将生成 oml-ebgaramond.enc,您可以在将其输入到 otftotfm 之前对其进行轻微修改。
sed -i -e 's/TeXMathItalicEncoding/EBGaramondTeXMathItalicEncoding/g' -e 's/oldstyle//' oml-ebgaramond.enc
生成 TeX 字体
ebgaramond 已经提供了您需要的 type1 文件,因此无需重新生成这些文件。只需生成合适的 .tfm 即可。
otftotfm -e oml-ebgaramond.enc EBGaramond12-Italic.otf > EBGaramond-Maths.map
这将创建 TeX 需要使用字体的 .tfm 文件和 .map 文件片段。本质上,就 TeX 而言,.tfm 只是一个字体。(pdfTeX 的看法略有不同 - 它也需要 type1 位。)
它还会创建一个新的编码文件,其名称几乎肯定会非常奇怪。这是 TeX 将使用的编码文件,如 .map 文件片段中指定的那样。如果您愿意,现在可以删除 oml-ebgaramond.enc,因为它不再需要。
为 LaTeX 创建字体定义
据我所知,otftotfm 不会为 LaTeX 生成字体定义文件,但在这种情况下文件非常简单。创建一个包含以下内容的文件:
%Filename: OMLEBGaramond-Maths.fd
%Based on a file created using fontinst v1.928
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{OMLEBGaramond-Maths.fd}
[2014/01/03 font definitions for OML/EBGaramond-Maths.]
\DeclareFontFamily{OML}{EBGaramond-Maths}{}
\DeclareFontShape{OML}{EBGaramond-Maths}{m}{it}{
<-> EBGaramond12-Italic--oml-ebgaramond
}{}
\DeclareFontShape{OML}{EBGaramond-Maths}{b}{it}{<->ssub * EBGaramond-Maths/m/it}{}
\DeclareFontShape{OML}{EBGaramond-Maths}{bx}{it}{<->ssub * EBGaramond-Maths/m/it}{}
\endinput
并将其保存为OMLEBGaramond-Maths.fd
。这会告诉 LaTeX EBGaramond-Maths 在 OML 编码中的字体系列由什么组成。具体来说,它会告诉它哪些 TeX 字体在此编码中属于此系列以及每种字体的特征。(在这种情况下,只有一种这样的字体,然后将其替换为其他粗细,因为 EBGaramond 中没有粗体,而 OML 只关心斜体形状。)
为 LaTeX 创建包文件(可选)
通常,加载包比每次想要使用特定配置时重复设置字体更容易,因此我会创建一个 LaTeX 包。为此,请创建另一个包含以下内容的文件:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ebgaramond-maths}[2014/01/03 v1.0 ebgaramond-maths for use with EBGaramond]
\RequirePackage{ebgaramond}
% \pdfmapfile{+EBGaramond-Maths.map}
\DeclareSymbolFont{letters} {OML} {EBGaramond-Maths} {m} {it}
\DeclareSymbolFont{operators} {OT1} {EBGaramond-LF} {m} {n}
\SetSymbolFont{letters} {bold} {OML} {EBGaramond-Maths} {b} {it}
\SetSymbolFont{operators} {bold} {OT1} {EBGaramond-LF} {bx} {n}
\DeclareFontSubstitution{OML}{EBGaramond-Maths}{m}{it}
\DeclareFontSubstitution{OT1}{EBGaramond-LF}{m}{n}
\SetMathAlphabet{\mathbf} {normal} {OT1} {EBGaramond-LF} {bx} {n}
\SetMathAlphabet{\mathbf} {bold} {OT1} {EBGaramond-LF} {bx} {n}
\SetMathAlphabet{\mathit} {normal} {OT1} {EBGaramond-LF} {m} {it}
\SetMathAlphabet{\mathit} {bold} {OT1} {EBGaramond-LF} {bx} {it}
\DeclareMathAlphabet{\mathcal} {OT1} {EBGaramond-LF} {m} {sw}
\endinput
并将其保存为ebgaramond-maths.sty
。
- 如果您不想要求人们安装字体,请取消注释.sty 文件中的相关行。
然后,可以在安装字体之前从 ${work} 测试结果:
\documentclass{article}
\usepackage{ebgaramond}
\usepackage[cmintegrals,cmbraces]{newtxmath}
\pdfmapfile{+EBGaramond-Maths.map}
\usepackage{ebgaramond-maths}
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
$ABCDEFGHIJKLMNOPQRSTUVWXYZ$
$abcdefghijklmnopqrstuvwxyz$
$1234567890$
$\Gamma\varGamma\Delta\Lambda\varLambda\Xi\varXi\Pi\varPi\Sigma\varSigma\Upsilon\varUpsilon\Phi\varPhi\Psi\varPsi\Omega\varOmega$
$\alpha\beta\gamma\delta\epsilon\varepsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\pi\rho\varrho\sigma\varsigma\tau\upsilon\phi\varphi\chi\psi\omega$
$\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
$\mathbf{abcdefghijklmnopqrstuvwxyz}$
$\mathbf{0123456789}$
$\mathit{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
$\mathit{abcdefghijklmnopqrstuvwxyz}$
$\mathit{0123456789}$
$\mathrm{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
$\mathrm{abcdefghijklmnopqrstuvwxyz}$
$\mathrm{0123456789}$
$\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
$\mathcal{abcdefghijklmnopqrstuvwxyz}$
$\mathcal{0123456789}$
\end{document}
生成:
答案2
如果仅有的那么就需要数学字体
\documentclass{article}
\usepackage[ebgaramond]{newtxmath}
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
$ABCDEFGHIJKLMNOPQRSTUVWXYZ$
$abcdefghijklmnopqrstuvwxyz$
$1234567890$
\end{document}
但如果ebgaramond
文本中也需要,那么
\documentclass{article}
\usepackage[ebgaramond]{newtx}
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
$ABCDEFGHIJKLMNOPQRSTUVWXYZ$
$abcdefghijklmnopqrstuvwxyz$
$1234567890$
\end{document}