修正從文體集中錯誤選擇的字元變體

修正從文體集中錯誤選擇的字元變體

我正在使用 XeLaTeX 用德語黑體字母排版文檔,並遇到了一個奇怪的錯誤(因為缺少更好的單字):

螢幕截圖

連字本身在這個位置是沒問題的。然而,德國黑體字母排版規則需要在連字符之前有一個很長的 ſ。

我使用的字體提供了一套風格集,可以很好地識別哪些字體s應該留下s並且應該變成ſ。但顯然,這套風格直到 TeX 已完成相關單字的連字符連接,因為如果顯示的單字未用連字符連接,則會正確呈現為流水

關於如何避免這種情況,我有以下想法:

  • 在之間添加 ZWJses ( \char"200D)
  • 在之前添加 ZWNJses ( \char"200C)
  • 新增"|(由 定義的連字斷開器polyglossia)或\/

在前兩種情況下,連字被完全抑制(但檢查不同的錯誤變體,我似乎能夠確認根本沒有發生任何事情)。當然,第三種情況會增加一個額外的斷點,從而導致錯誤的連字符。

是否有任何選項可以強制 TeX 渲染正確的s字形而不以純文字輸入?就像是:

  • 修改連字字元以讀取兩個字元序列,其中包括引發正確結果的內容s? (不太可能從這個問題的答案這個問題缺少的答案
  • 添加一些額外的字形選擇機制,旨在僅捕捉字體風格集未正確呈現的特殊情況?
  • ……

字體是Unifraktur Maguntia有關它的所有資訊(包括下載)都可以在其上找到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在該位置的連字符之前,所以我進行了實驗,發現我可以通過添加至少我在此處寫下的那些文本行來重現它。我不知道如何使列變小以強制連字符(但這將有助於測試很多)。

相關內容