我有一種字體,其字體表包含連字,但也包含數學根號、運算子和積分符號等。 (它與我在這個問題中展示的字體不同,它不包含積分符號。)
就我而言,某些字元組合不會觸發例如“ffi”連字的字形替換。對於字體實現的pdflatex
(認為otftotfm
)和xelatex
(fontspec
)解決方案都會發生這種情況。
包含我打算使用的商業字體的編譯結果顯示(對於兩種fontspec
解決方案以及otftotfm
)
XeLaTeX ( fontspec
)
運行中概述的解決方案後fi、fl、ffl 的連字不適用於 Times New Roman (XeLaTeX),嘗試觸發連字仍然不起作用。艾格雷格提到聊天此解決方案通常會為文件產生正確的輸出XeTeX
,並且字形位於字型表的正確位置。原來它們在字體表中(截圖自Adobe Illustrator)
這表明他們沒有處於正確的位置。因此,希望有一個選項來手動設定鍵入例如“ffi”和將其連結到字體中的正確連字之間的連結。
pdfLaTeX ( otftotfm
)
為了確定起見,我使用了otftotfm
以下命令:
otftotfm -a -e ec -fkern -fliga --verbose --vendor <mapfilename> <somefont>.otf T1--<fontname>--<fontweight>
此命令會產生有關連字的錯誤:
otftotfm: warning: 'liga' feature ignored, not supported by font
建構文件後也證實了這一點.pl
:
tftopl T1--<fontname>--<fontweight>.tfm > T1--<fontname>--<fontweight>.pl
結紮線確實不存在。以下內容摘自該T1--<fontname>--<fontweight>.pl
文件:
(LABEL C f)
(KRN O 41 R 0.08)
(KRN O 47 R 0.1)
(KRN O 51 R 0.07)
(KRN O 52 R 0.08)
(KRN O 54 R -0.05)
(KRN O 56 R -0.05)
(KRN O 77 R 0.12)
(KRN O 135 R 0.07)
(KRN C a R -0.01)
(KRN C b R 0.1)
(KRN C c R -0.01)
(KRN C e R -0.01)
(KRN C g R -0.01)
(KRN C h R 0.1)
(KRN C i R 0.03)
(KRN C j R 0.03)
(KRN C k R 0.1)
(KRN C l R 0.1)
(KRN C o R -0.01)
(KRN C t R 0.01)
(KRN C v R 0.01)
(KRN C w R 0.01)
(KRN C y R 0.01)
(KRN O 175 R 0.07)
(KRN O 15 R -0.05)
(KRN O 22 R -0.05)
(KRN O 21 R 0.1)
(KRN O 346 R -0.01)
(KRN O 370 R -0.01)
(KRN O 367 R -0.01)
(KRN O 344 R -0.01)
(KRN O 345 R -0.01)
(KRN O 351 R -0.01)
(KRN O 352 R -0.01)
(KRN O 364 R -0.01)
(KRN O 366 R -0.01)
(STOP)
我能想到的一件事就是弄亂人類可讀的.pl
文件(上面是摘錄),並手動建立所有內容。但也許(希望如此?!)LaTeX 有能力處理這種事情。
無論如何,分配一下就好了隨意的以非常通用的方式將字體表的(但特定的)字形對應到特定的命令。想想\int
哪一個會觸發 ie (組成的數字)、八進位 501 或 unicode+00a6
或字母組合的積分符號,這樣「ffi」就變成(連結到)-->「ligature ffi」。只要我知道,我什至不介意將所有 256 個插槽聲明為特定命令或原始程式碼中的字母組合如何去做吧。
考慮以下使用另一種(非商業)字體的範例,該字體也包含連字:http://exljbris.com/tallys.html。對於我們當中的 Windows 用戶,如果需要,您可以將其複製並貼上到批次檔中。我故意禁用了-fkern
和-fliga
功能,因為這正是相關部分:我的字體沒有正確映射字形。
otftotfm -a -e ec --verbose --vendor tallys Tallys_15.otf T1--Tallys15--Regular
pause
這也是該t1tallys.fd
文件:
\ProvidesFile{t1tallys.fd}
[2015/04/30 scalable font definitions for T1/Tallys.]
\DeclareFontFamily{T1}{Tallys}{}
\DeclareFontShape{T1}{Tallys}{m}{n}{<-> T1--Tallys15--Regular}{}
\DeclareFontShape{T1}{Tallys}{m}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{m}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{m}{sl}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{n}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{b}{sl}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{n}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{it}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{sc}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{l}{sl}{<-> ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{n}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{it}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{sc}{ssub * Tallys/m/n}{}
\DeclareFontShape{T1}{Tallys}{bx}{sl}{ssub * Tallys/m/n}{}
\endinput
和 MWE (XeLaTeX
在這種情況下仍然會產生正確的結果,帶有連字...如果你想採取這種XeLaTeX
方法,只需映射任何其他字元。我仍然想知道如何在 中執行此操作XeLaTeX
。)
\documentclass{article}
\usepackage{ifxetex}
\ifxetex
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Tallys}
\usepackage{microtype}
\else
\RequirePackage[T1]{fontenc}
\pdfmapfile{tallys.map}
\RequirePackage{microtype}
\renewcommand\rmdefault{Tallys}
\renewcommand\sfdefault{Tallys}
\fi
\begin{document}
\fontsize{100pt}{0pt}\selectfont ffi fi fl ffl
\end{document}
這個想法是仍然能夠將字元組合映射ffi
到連字。以某種方式為正確的數學命令設置正確的字元也很好(我知道這涉及更多,但請理解,我真的在尋找一個通用的解決方案,它允許我完全映射字體並允許 TeX 完全了解何時使用什麼字元。它還允許混合不同字體的可能性(與單一字體解決方案相比,這不會太複雜——這只是為了概括答案)。