如何创建比 Computer Modern 更粗的新字体

如何创建比 Computer Modern 更粗的新字体

我正在尝试找到一种让 LaTex 默认字体“Computer Modern”(CM)变粗(也称为“变黑”)的好方法。我真的很喜欢这种字体,尤其是在数学模式下,所以像“更改字体”这样的答案不符合要求,抱歉。:) 唯一的问题是 CM 的线条很细,所以字体看起来很轻。有几种方法可以让 CM“变粗”(我不是在谈论大胆的系列字体!这个看起来不一样,不是我想要的。)可以在 tex.stackexchange 的其他地方找到:

1)在XeLaTex中使用FakeBold: 如何让数学字体稍微变粗一点?

2)按照此处的建议使用 pdfliteral: LuaLaTeX 中的假粗体

3)按照此处的建议使用 pdfrender: 使用 pdfrender 使整个文档变得更重

但是,那里给出的答案不适合这里:1)需要 XeLaTex(我只有 PDFLaTex,而且我无法安装其他软件,因为我不是系统管理员。)使用 2)+ 3)产生的结果看起来非常好。实际上它看起来确切地就像我想要的那样。然而,它只适合肯定阅读器软件(Evince 和 Okular 的某些版本)。使用其他阅读器软件(例如 Okular 的其他版本或甚至 Adob​​e Reader)时,字符的基线不太一样,或者字母内部有白色瑕疵。

我认为,解决问题的唯一选择是创建合适的字体。(2)和 3)中的解决方案不会创建新字体,它们是操纵原始 CM 字体显示方式的黑客攻击。)这是我的问题:如何创建“基于矢量”(而非基于像素)的字体恰当的Computer Modern 的字体具有与 2) 和 3) 中用 pdfrender/pdfliteral 获得的结果相同的“厚度”属性?我对字体一无所知。基本思路应该是采用原始 CM 字体并对其几何形状进行一些调整。有一篇德文帖子:

http://www.typografie.info/3/topic/22238-ist-die-computer-modern-wirklich-zu-d%C3%BCnn/

他们在那里谈到了 CM 的“metafont 源文件”中的“blacker”参数。但是他们制作的是基于像素的字体,我不太清楚他们到底在做什么。

结论:我想要一个厚的(不是大胆的) CM 类字体,适用于任何阅读器软件,并且应该可以与 PDFLaTex 一起使用。感谢您的帮助。


为了让您了解我的想法:这是一篇(著名的)文章,我尝试使用修改后的 CM 字体来模仿其“老派”外观:

http://math.stanford.edu/~lekheng/flt/wiles.pdf

我将其放大并与我自己的“pdfliteral”结果进行了比较,我的结论是它确实是更厚的 CM(可能是因为它是之后打印和扫描的,正如某些页面上的文本行不太水平所表明的那样)。

我现在知道如何澄清我的问题了:使用 METAFONT,如何从原始 CM metafont 源文件创建新字体(http://www.ctan.org/pkg/cm-mf)但黑度参数更高

答案1

一些选项包括这些(见下面的示例):

  1. 使用“Latin Modern”(\usepackage{lmodern}),这是 Computer Modern 的更新版本。在我看来,它在屏幕上和打印时看起来比原来的要简洁一些。(下面的例子)

  2. 比例“Computer Modern”如下所示(感谢这个答案

  3. 使用字体“Computer Concrete”(\usepackage{concmath}),这是 Knuth 使用 METAFONT 设计的 Computer Modern 的较粗版本。

  4. 使用类似但更粗的字体。例如gfsbodoni( \usepackage[default]{gfsbodoni}) 属于同一“现代”字体系列,但可能具有更理想的粗细。

  5. 直接使用METAFONT,根据自己的喜好进行调整。这种事情就是那个程序的最初目的。


(编辑)

字体缩放的演示(上面的#2):

这是一种缩放字体的方法。您要求将较小的字体大小放大到较大的字体大小;由于较小的字体大小有较粗的笔画,因此您会得到看起来更粗但更宽的字体。您可以尝试不同的比例。此示例放大cmr7到默认的 10pt。

(我还没有让斜体起作用,并且我认为粗体没有缩放,但希望其他人可以添加这一点。)

\documentclass{article}

\usepackage[T1]{fontenc}

\DeclareFontShape{T1}{cmr}{mx}{n}%
    {<->cmr7}{}
\DeclareFontShape{T1}{cmr}{mx}{it}%
    {<->cmr7}{}

\AtBeginDocument{%
    \fontseries{mx}\selectfont%
}

% to create dummy text for testing
\newcommand{\quickfox}{The quick brown fox jumps over the lazy dog}
\newcommand{\Fox}{The Quick Brown Fox}
\newcommand{\Dog}{The Lazy Dog}
\newcommand{\Jumps}{Jumps Over}
\usepackage{lipsum}

\begin{document}

\section{\Fox}
\quickfox?

\subsection{\Dog}
\emph{\quickfox.}

\paragraph{\Jumps}
\lipsum[1]

\end{document}

因此,cmr7 缩放至 10pt

在此处输入图片描述


为了比较,下面是示例lmodern并且无缩放:

在此处输入图片描述


这是gfsbodoni

在此处输入图片描述


这是concmath(计算机混凝土)(正如评论中所指出的,尽管它源自 Computer Modern,但它确实属于不同的字体系列):

在此处输入图片描述



(编辑)

以下是关于如何开始修改 Metafont 的一个非常基本的演示。(这是我第一次这样做,所以请谨慎对待。)

  1. 查找 Computer Modern 10pt 的 Metafont 源TEXMF-DIST/fonts/source/public/cm/crm10.mf
  2. 将此文件复制到单独的工作目录,这样就不会弄乱您的 TeXLive 安装。
  3. 进入并将“厚度”和“宽度”参数更改为更大的值。以新名称保存文件,例如,cmthick.mf
    • 例如第 25 行:thin_join#:=10/36pt#; % width of extrafine details
  4. 使用 METAFONT 编译字体(参见texdoc metafont):
    • mf '\mode=localfont; input cmthick'
    • gftopk cmthick.600gf
  5. 使用新字体。由于这只是为了演示,我不知道我在做什么,所以我只是在 Plain TeX 中执行了此操作。文件cmthicktest.tex

    The quick brown fox jumps over the lazy dog.
    
    \font\cmthick=cmthick
    \cmthick
    
    The quick brown fox jumps over the lazy dog.
    \bye
    
  6. 编译后tex cmthicktest && dvips cmthicktest && ps2pdf cmthicktest.ps我得到以下内容:

在此处输入图片描述

这只是为了表明这是可以做到的。我不知道这是否是正确的方法。

答案2

我不记得这个方法是在哪里找到的,但我在这里分享它,因为这是要求更现代的计算机的众多问题之一。我希望这就是你要找的,这也是我要找的。

在您的 modes.mf 中添加:

 mode_def myblacker =
 mode_param (pixels_per_inch, 1200);
 mode_param (blacker, 3.5);
 mode_param (fillin, 0);
 mode_param (o_correction, 1);
 mode_common_setup_;
 enddef;

如果您查看该文件,您可能会找到添加它的位置(有一长串的模式)。您可能希望更改值以适合您的打印机和口味。上面给出的值适合我工作中的打印机(和我的口味)。

接下来运行

 fmtutil-sys --byfmt mf

以 root 身份登录。现在您已设置为使用此模式。以下是最小工作文件:

 \pdfpkresolution=1200
 \pdfpkmode={myblacker}
 \pdfmapfile{}
 \documentclass{article}
 \begin{document}
 Some text, and a formula: $D\tan x=1+\tan^2x$.
 \end{document}

只需像往常一样使用 pdflatex 进行编译,希望您能够满意。

最后两点说明:

1) 此方法会使您的文件不太可移植,因为其他人可能没有添加模式 myblacker。如果您需要在其他地方进行编译,最好使用\pdfpkmode={lexmarkr}或在 modes.mf 中找到适合您口味的其他模式。因此,不需要准备的最小工作文件是:

 \pdfpkresolution=1200
 \pdfpkmode={lexmarkr}
 \pdfmapfile{}
 \documentclass{article}
 \begin{document}
 Some text, and a formula: $D\tan x=1+\tan^2x$.
 \end{document}

2) 我有点失望,尽管我的文档中的文本现在看起来更厚,因此更像您链接到的论文,但相比之下我的数学结果仍然非常薄。;)

答案3

我不确定在问题首次发布时该包是否存在,但 mlmodern 字体(和 mlmodern 包)确实是“更黑”的 lmodern,这意味着本质上是一种更黑的计算机现代罗马字体。

相关内容