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 ( fontspec
tanto para ambas as soluções otftotfm
)
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 XeTeX
documentos, 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)
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 otftotfm
o 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 .pl
arquivo:
tftopl T1--<fontname>--<fontweight>.tfm > T1--<fontname>--<fontweight>.pl
A ligadura realmente não estava lá. O seguinte foi retirado do T1--<fontname>--<fontweight>.pl
arquivo:
(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 .pl
arquivo 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 \int
no que acionaria o sinal integral de ie (números compostos), octal 501 ou unicode +00a6
ou 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 -fkern
e -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.fd
arquivo:
\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 ( XeLaTeX
ainda produzirá o resultado correto neste caso, com as ligaduras... Se você quiser adotar a XeLaTeX
abordagem, 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 ffi
para 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).