生成并使用 OpenType 字体

生成并使用 OpenType 字体

我正在尝试使用 babel 和字体 calligra 用德语和西班牙语编写一些文本。我发现当遇到“ß”字符时,输出实际上是“e”(见红色单词)。有没有办法包含或定义这个“ß”字符的书法形式,而不是“ss”?我不想让读者认为有些单词拼写错误。

最小工作示例如下所示:

\documentclass[10pt,final]{article}
 \usepackage[utf8]{inputenc}
 \usepackage[T1]{fontenc}
\usepackage[paperwidth=21cm, paperheight=10.5cm, top=4mm, left=8mm, right=8mm, bottom=4mm]{geometry}
\usepackage{fontspec}
\usepackage[german,spanish]{babel}
\usepackage{tikz}
\usepackage{pgothic}
\usepackage{calligra}
\usepackage{graphicx}

\usepackage{yfonts}
\usepackage[protrusion]{microtype}


\begin{document}
\calligra


\selectlanguage{german}{
Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in 
Buchstabhausen an der Küste des Semantik, eines {\color{red}{großen}} Sprachozeans. Ein kleines Bächlein namens Duden {\color{red}{fließt}} 
durch ihren Ort und versorgt 
sie mit den nötigen Regelialien.}

\vspace{\baselineskip}
\selectlanguage{spanish}{Bendito el varón que se fía 
en jehová, y cuya confianza es jehová. porque él será como el árbol plantado junto a las aguas, que junto a la 
corriente echará sus raíces, y no verá cuando viniere el calor, sino que su hoja estará verde; y en el año de sequía no se fatigará, ni 
dejará de hacer fruto.}
\end{document}

答案1

最新的 LaTeX软件包inputenc已停用:

Package inputenc Warning: inputenc package ignored with utf8 based engines.

因此,ß不活动并映射到。它直接寻址在字体编码中编码的\ss字体的插槽。但是, Unicode 和的位置不同,前者是 223 (U+00DF),后者是 255 (0xFF)。在位置 223,字体 Calligra 没有字形,因此缺少尖锐的 s。callig15.pfbT1ßT1

解决方法:可以使尖锐的 s 变为活动状态:

\documentclass[10pt,final]{article}
 \usepackage[T1]{fontenc}
\usepackage[
  paperwidth=21cm, paperheight=10.5cm,
  top=4mm, left=8mm, right=8mm, bottom=4mm]{geometry}
\usepackage{fontspec}
\usepackage[german,spanish]{babel}
\usepackage{calligra}
\usepackage[protrusion]{microtype}

\catcode`\ß=\active
\defß{\ss}

\begin{document}
\calligra

\selectlanguage{german}{
Ein {\color{red}{großer}} Sprachozean.
Das Bächlein Duden {\color{red}{fließt}} durch ihren Ort.}
\end{document}

结果

生成并使用 OpenType 字体

字体的版权callig15.pfb

版权所有 1992 Peter Vanroose、1999 S. Dachian 您可以自由使用、修改和/或分发此文件,只要保留此版权声明

因此,应该允许生成 OpenType 格式的字体,并对 的宽度进行修复ß。包calligra重新定义\ss为附加\kern-.22em

这可以通过FontForge,可以通过交互方式或小 Python 脚本进行:

#!/usr/bin/env python

import fontforge

font = fontforge.open('callig15.pfb')
glyph = font['germandbls']
glyph.width -= .22 * font.em

font.generate('callig15.otf')

生成的字体callig15.otf可以存储在当前目录或 TDS 位置。TeX Live 和 shell 的示例bash

export TDS=`kpsewhich -expand-var \\$TEXMFLOCAL`
echo $TDS
mkdir -p $TDS/fonts/opentype/public/calligra
cp callig15.pfb $TDS/fonts/opentype/public/calligra/
mktexlsr $TDS

然后字体就可以与 LuaTeX/XeTeX 一起使用了。它按照包中的缩放比例进行缩放calligra。由于缩放也会影响字间空间,因此对空间进行反转。

\documentclass[10pt,final]{article}
\usepackage{fontspec}
\usepackage{color}
\usepackage[protrusion]{microtype}

\newfontface\calligra{CALLIG15}[Scale=1.44, WordSpace=.7]

\begin{document}
\calligra

Ein {\color{red}{großer}} Sprachozean.
Das Bächlein Duden {\color{red}{fließt}} durch ihren Ort.

\end{document}

结果

答案2

您可以使用\newunicodechar它来映射ß\ss,而后者又会映射到正确的字形。

\documentclass{article}

\usepackage{fontspec}
\usepackage[german,spanish]{babel}

\usepackage{xcolor}
\usepackage{calligra}
\usepackage{newunicodechar}

\newunicodechar{ß}{\ss}

\begin{document}
\begin{otherlanguage*}{german}
Weit hinten, hinter den Wortbergen, fern der Länder Vokalien 
und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in 
Buchstabhausen an der Küste des Semantik, eines \textcolor{red}{großen} 
Sprachozeans. Ein kleines Bächlein namens Duden \textcolor{red}{fließt} 
durch ihren Ort und versorgt sie mit den nötigen Regelialien.
\end{otherlanguage*}

\bigskip

Bendito el varón que se fía en jehová, y cuya confianza es jehová. 
porque él será como el árbol plantado junto a las aguas, que junto a la 
corriente echará sus raíces, y no verá cuando viniere el calor, sino 
que su hoja estará verde; y en el año de sequía no se fatigará, ni 
dejará de hacer fruto.

\bigskip

\calligra

\begin{otherlanguage*}{german}
Weit hinten, hinter den Wortbergen, fern der Länder Vokalien 
und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in 
Buchstabhausen an der Küste des Semantik, eines \textcolor{red}{großen} 
Sprachozeans. Ein kleines Bächlein namens Duden \textcolor{red}{fließt} 
durch ihren Ort und versorgt sie mit den nötigen Regelialien.
\end{otherlanguage*}

\bigskip

Bendito el varón que se fía en jehová, y cuya confianza es jehová. 
porque él será como el árbol plantado junto a las aguas, que junto a la 
corriente echará sus raíces, y no verá cuando viniere el calor, sino 
que su hoja estará verde; y en el año de sequía no se fatigará, ni 
dejará de hacer fruto.

\end{document}

在此处输入图片描述

您似乎认为\selectlanguage{german}将德语文本作为支撑参数:事实并非如此。我修正了用法。

答案3

字体包似乎可以在 pdfLaTeX 下正确calligra处理\ss和,但在 XeLaTeX 或 LuaLaTeX 下则无法正确处理。更具体地说,根本无法生成。ßß

如果您需要与calligra包一起使用 XeLaTeX 或 LuaLaTeX,我建议您将所有实例替换ß\ss{}

在此处输入图片描述

\documentclass[10pt,final]{article}
\usepackage{ifluatex,ifxetex}
\ifluatex
  \usepackage{fontspec}
\else
  \ifxetex
    \usepackage{fontspec}
  \else
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
\fi\fi
\usepackage[paperwidth=21cm, paperheight=10.5cm, 
            vmargin=4mm, hmargin=8mm]{geometry}
\usepackage[german]{babel}
\usepackage{xcolor}
\usepackage{calligra}
\usepackage[protrusion]{microtype}

\begin{document}
\calligra
\textrm{LuaLaTeX and XeLaTeX produce:}

\textcolor{red}{gro\ss en} \textcolor{red}{flie\ss t} 

\textcolor{blue}{großen} \textcolor{blue}{fließt}
\end{document}

相关内容