![生成并使用 OpenType 字体](https://linux22.com/image/344653/%E7%94%9F%E6%88%90%E5%B9%B6%E4%BD%BF%E7%94%A8%20OpenType%20%E5%AD%97%E4%BD%93.png)
我正在尝试使用 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.pfb
T1
ß
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}