Tenho certezaesta fontesuporta ligaduras, mas não consigo fazer com que apareçam.
Exemplo com Roboto para comparação:
\documentclass[
11pt,
a4paper
]{scrartcl}
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}
\begin{document}
\setmainfont[
ExternalLocation,
Extension=.ttf,
UprightFont=*-Regular,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
Ligatures=Common
]{Roboto}
roboto fight flight has ligatures
\setmainfont[
ExternalLocation,
Extension=.otf,
Ligatures=Common
]{Mercury-TextG4Roman}
mercury fight flight no ligatures
\end{document}
A lista de ligaduras no site da HF&J lista fi
:
E o charmap no Windows mostra esse caractere nessa fonte:
Atualizar:
Saída de otfinfo
:
Atualização 2:
Alterado para LuaLatex, adicionado um arquivo de recursos:
\documentclass[
11pt,
a4paper
]{scrartcl}
\usepackage{filecontents}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures={Common,Rare,Historic}}
\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
sub \f \i by \fi;
sub \f \l by \fl;
} liga;
\end{filecontents*}
\begin{document}
\setmainfont[
ExternalLocation,
Extension=.ttf,
UprightFont=*-Regular,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
Ligatures=Common
]{Roboto}
roboto fight flight has ligatures
\setmainfont[
FeatureFile=mercury.fea,
ExternalLocation,
Extension=.otf,
Ligatures=Common
]{Mercury-TextG4Roman}
mercury fight flight no ligatures
\end{document}
E as ligaduras mostram:
Responder1
Com a ajuda de @cfr, você estabeleceu que:
A fonte contém glifos de ligadura.
fontspec
não pode fazer uso das informações da ligadura AAT, mesmo que estejam disponíveis.A fonte omite os dados do recurso OpenType necessários para suporte automático de ligadura.
Então o que você pode fazer? Você pode adicionar os dados de mapeamento ausentes à fonte ou criar um arquivo de recurso OpenType externo (suportado apenas pelo LuaTeX) e dizer ao fontspec para usá-lo. Nenhum dos dois é difícil.
Adicionando tabelas Opentype liga
usando FontForge
Observação:Consulte primeiro os termos de licenciamento da sua fonte, etc.
- Abra o arquivo de fonte no fontforge.
- Abra a
Element->Font Info
caixa de diálogo no menu: As entradas listadas correspondem a vários "recursos" OpenType, o que você deseja é denominado "Ligaduras padrão" na lista e denominadoliga
recurso nas especificações e na saída deotfinfo
e você já sabe que está faltando em sua fonte, então precisamos criar a tabela primeiro e, em seguida, preencha-a com os dados ausentes. - Clique no botão "Adicionar pesquisa" e selecione o tipo "ligaduras padrão".
- Clique no botão "Adicionar subtabela" para criar a tabela de mapeamento real. clique duas vezes na nova entrada da subtabela para abrir a visualização do editor.
- Agora você deve ver a caixa de diálogo de edição onde você configura mapeamentos entre sequências de caracteres e glifos de ligadura: Use o botão "preencher" para que o FontForge deduza as ligaduras suportadas pela fonte e crie entradas automaticamente para você. Dependendo da fonte, você também pode precisar editar/adicionar entradas manualmente. A coluna da esquerda contém o nome do glifo da ligadura, enquanto a coluna da direita contém os caracteres individuais, separados por espaços.
- Quando terminar, clique
Ok
duas vezes para voltar à janela principal novamente. - Salve o arquivo de fonte atualizado com
File->Generate Fonts
, certificando-se de que o tipo dropbox esteja definido comoOpenType(CFF)
. Esteja ciente de que a fonte gerada carrega o mesmo nome de fonte interno que o original (embora seja fácil de alterar), então você deve substituir o original (lembre-se de fazer backup) para evitar carregar a versão antiga, ou você deve especificar o caminho do arquivo da fonte explicitamente ao carregá-lo comfontspec
. - Você Terminou.
Adicionando tabelas Opentype liga
usando um arquivo de recurso OpenType (somente LuaTeX)
O fontspec
manual tem umseçãoem arquivos de recursos (com um link para oespecificação) e inclui um exemplo que mostra exatamente o que você procura, por exemplo, como definir mapeamentos de ligadura. Portanto, você só precisa criar o arquivo de recurso e usar a FeatureFile
opção de informar fontspec
para carregá-lo:
Arquivo:outra_liga.tex
\documentclass{article}
\usepackage{filecontents}
\usepackage{fontspec}
% Alternatively, place this in a `mercury.fea` file in the same directory
\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
sub \f \i by \fi;
sub \f \l by \fl;
} liga;
\end{filecontents*}
\setmainfont[
FeatureFile=mercury.fea,
%Ligatures={Common} % on by default
]{Mercury-TextG4Roman}
\begin{document}
fi \symbol{"FB01}
fl \symbol{"FB02}
\end{document}
Este exemplo pressupõe que os glifos de ligadura existem em seu local padrão Unicode e os inclui diretamente pelo número do glifo para fins de comparação. YMMV.
Editar:Cuidado para fontspec
não parar com um erro se houver problemas com a FeatureFile
opção. Digitar incorretamente um caminho, erros de sintaxe no arquivo ou usar um mecanismo diferente LuaTeX
fará com que ele ignore silenciosamente o arquivo de recursos.