Como definir manualmente as configurações de codificação de fonte de uma fonte?

Como definir manualmente as configurações de codificação de fonte de uma fonte?

Eu tenho uma fonte com uma tabela de fontes contendo ligaduras, mas também radicais matemáticos, operadores e, por exemplo, um sinal integral. (É uma fonte diferente daquela que estou apresentando nesta pergunta, que não contém o sinal integral.)

No meu caso, algumas combinações de caracteres não acionam a substituição do glifo, por exemplo, as ligaduras "ffi". Isso acontece tanto para soluções pdflatex(think otftotfm) quanto xelatex( fontspec) para implementação de fontes.

Um resultado compilado contendo a fonte comercial que pretendo usar mostra ( fontspectanto para ambas as soluções otftotfm)

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

XeLaTeX ( fontspec)

Depois de executar a solução descrita emLigaduras para fi, fl, ffl não funcionam para Times New Roman (XeLaTeX), tentar acionar as ligaduras ainda não funciona. Egreg mencionado embater papoque a solução geralmente produz a saída correta para XeTeXdocumentos, desde que os glifos estejam na posição correta para a tabela de fontes. Acontece que eles estão na tabela de fontes (captura de tela tirada do Adobe Illustrator)

insira a descrição da imagem aqui

Isso sugere que eles não estão na posição certa. Seria, portanto, desejável ter uma opção para definir manualmente a ligação entre a digitação, por exemplo, "ffi" e a ligação à ligadura correta na fonte.

PdfLaTeX ( otftotfm)

Só para ter certeza, usei otftotfmo seguinte comando:

otftotfm -a -e ec  -fkern -fliga --verbose --vendor <mapfilename> <somefont>.otf T1--<fontname>--<fontweight>

O comando produz erros em relação às ligaduras:

otftotfm: warning: 'liga' feature ignored, not supported by font

Isso também é confirmado após a construção do .plarquivo:

tftopl T1--<fontname>--<fontweight>.tfm > T1--<fontname>--<fontweight>.pl

A ligadura realmente não estava lá. O seguinte foi retirado do T1--<fontname>--<fontweight>.plarquivo:

(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)

A única coisa que consigo pensar é mexer no .plarquivo legível por humanos (do qual o texto acima é um trecho) e construir tudo manualmente. Mas talvez (espero?!) o LaTeX tenha facilidades para lidar com esse tipo de coisa.

Independentemente disso, seria bom atribuirarbitrário(mas específicos) glifos da tabela de fontes para comandos específicos, de uma forma muito geral. Pense \intno que acionaria o sinal integral de ie (números compostos), octal 501 ou unicode +00a6ou combinações de letras, de modo que "ffi" se torne (links para) -> "ligadura ffi". Eu nem me importaria com a necessidade de declarar todos os 256 slots para um determinado comando ou combinação de letras na fonte, desde que eu saibacomofazer isso.

Considere o exemplo abaixo com outra fonte (não comercial), que também contém ligaduras:http://exljbris.com/tallys.html. Para os usuários do Windows entre nós, você pode copiar e colar em um arquivo em lote, se desejar. Desativei intencionalmente os recursos -fkerne -fliga, já que essa é exatamente a parte relevante: minha fonte não mapeia os glifos corretamente.

otftotfm -a -e ec  --verbose --vendor tallys Tallys_15.otf T1--Tallys15--Regular
pause

Aqui também está o t1tallys.fdarquivo:

\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

e um MWE ( XeLaTeXainda produzirá o resultado correto neste caso, com as ligaduras... Se você quiser adotar a XeLaTeXabordagem, basta mapear qualquer outro caractere. Ainda gostaria de saber como fazer isso em 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}

A ideia é ainda poder mapear a combinação de caracteres ffipara a ligadura. Também seria bom definir de alguma forma os caracteres corretos para os comandos matemáticos corretos (eu entendo que isso é mais complicado, mas, por favor, entenda, estou realmente procurando uma solução geral que me permita mapear completamente a fonte e permitir que o TeX seja completamente entenda quando usar qual caractere.) A solução ideal descreveria o processo completo necessário para fazê-lo. Também permitiria a possibilidade de misturar fontes diferentes (o que não seria muito complicado em comparação com a solução de fonte única - é apenas para generalizar a resposta).

informação relacionada