纠正风格集中错误的字符变体选择

纠正风格集中错误的字符变体选择

我正在使用 XeLaTeX 排版一份德文黑体文档,然后遇到了一个奇怪的 — — 找不到更好的词来形容 — — 错误:

截屏

在该位置使用连字符本身是可以的。但是,德语黑体字排版规则要求在连字符前使用长 ſ。

我使用的字体提供了一套风格,可以很好地识别哪些s应该留下s并应该变成負責。显然,这种风格直到 TeX 已完成对相关单词的连字符处理,因为如果显示的单词没有连字符,则会正确呈现为飞行

对于如何避免这种情况,我有以下想法:

  • s是 ( \char"200D)
  • s是 ( \char"200C)
  • 添加"|(连字符破坏器定义为polyglossia)或\/

在前两种情况下,连字符被完全抑制(但检查另一个错误选择的变体后,我似乎能够确认什么都没有发生)。当然,第三种情况会添加一个额外的断点,从而导致错误的连字符。

是否有任何选项可以强制 TeX 渲染正确的s字形,而不以纯文本形式输入?例如:

  • 修改连字符以读取包含一些可以得出正确结果的字符的双字符序列s?(不太可能来自这个问题的答案这个问题缺少的答案
  • 添加一些额外的字形选择机制,旨在仅捕获字体风格集未正确呈现的特殊情况?

字体是马贡大学有关它的所有信息(包括下载)都可以在其Sourceforge 页面


附注:文档(第 31 页;德语)意味着s之后其他角色并先于另一个s被渲染为負責。现在我不确定 TeX 是否以某种方式抑制了无法显示的字符,或者这是否是字体方面的错误。如果是前者,是否有任何零宽度字符不会被吞噬?


代码的重要部分:

\documentclass[12pt,a4paper,twoside]{scrreport}
\usepackage{amsmath}
\usepackage{mathspec}
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true,spelling=new,script=fraktur]{german}

\setmainfont[Mapping=tex-text,StylisticSet=11]{UnifrakturMaguntia}

\makeatletter
\begingroup\lccode`~=`"
\lowercase{\endgroup
    \everymath{\let~\eu@active@quote}
    \everydisplay{\let~\eu@active@quote}
}
\makeatother % This code is included to keep German TeX ligatures such as
%            % "~ active, despite amsmath package.

\newcommand\zwj{\char"200D} % defines \zwj as zero-width joiner
\newcommand\zwnj{\char"200C} % defines \zwnj as zero-width non-joiner

\begin{document}
Einfüllung mit dem Laufmittelgemisch aufgeschlämmt und unter Stickstoffüberdruck gepackt. Flüssige
und ölige Proben wurden in wenig Laufmittelgemisch angelöst und mit einer Pasteurpipette vorsichtig auf die
Silicaschicht aufgetragen. Feststoffe, die sich nicht in wenig Laufmittelgemisch lösen ließen, wurden mit einem
passenden Lösungsmittel gelöst, mit Kieselgel versetzt, das Lösungsmittel am Rotationsverdampfer entfernt und


\noindent (Think of the same text repeating) Flüs\zwj sige (etc.)

\noindent (Think of the same text repeating) Flü\zwnj ssige (etc.)

\noindent (Think of the same text repeating) Flü"|ssige (etc.)


\end{document}

我的实际文档中还有更多内容。我刚刚意识到不正确s在该位置的连字符之前,所以我进行了实验,发现我可以通过至少添加我在此处写下的那些文本行来重现它。我不知道如何缩小列以强制使用连字符(但这对测试很有帮助)。

相关内容