如何手動設定字體的字體編碼設定?

如何手動設定字體的字體編碼設定?

我有一種字體,其字體表包含連字,但也包含數學根號、運算子和積分符號等。 (它與我在這個問題中展示的字體不同,它不包含積分符號。)

就我而言,某些字元組合不會觸發例如“ffi”連字的字形替換。對於字體實現的pdflatex(認為otftotfm)和xelatexfontspec)解決方案都會發生這種情況。

包含我打算使用的商業字體的編譯結果顯示(對於兩種fontspec解決方案以及otftotfm

http://i.imgur.com/I4XfJbM.png?1

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 完全了解何時使用什麼字元。它還允許混合不同字體的可能性(與單一字體解決方案相比,這不會太複雜——這只是為了概括答案)。

相關內容