Kerning automático com LuaLaTeX

Kerning automático com LuaLaTeX

Existe uma maneira de escrever uma aspa dupla à direita diretamente acima de um ponto final (se a cotação terminar com um ponto final)? Não à esquerda (por exemplo, .), nem à direita (por exemplo, ".), mas diretamente acima. A foto abaixo é um exemplo deÁrvores, mapas e teoremaspor Jean-Luc Doumont.

Aspas duplas à direita diretamente acima do ponto final.

Responder1

Uma maneira é adicionar algum "kerning" negativo entre as aspas e o ponto final:

\documentclass{article}
\begin{document}
Here is an unkerned quotation mark: ``\dots''.

Here is a kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

Exemplo de kerning

O comando TeX \kern-0.5eminsere um espaço negativo entre as aspas e o ponto seguinte. Você terá que brincar um pouco com o espaçamento exato, mas usar uma medida como -0.5ema que será dimensionada com o tamanho da fonte deve funcionar razoavelmente bem.

Kerning automático com LuaLaTeX

Como outros sugeriram, você pode fazer isso com macros, mas se quiser fazer isso automaticamente, parece necessário incluir essas informações de kerning na tabela de kerning específica da fonte. Isso pode ser feito comLuaLaTeXdo seguinte modo:

Primeiro crie um arquivo:Palatino.fea

languagesystem DFLT dflt;
languagesystem latn dflt;
feature kern {
pos  \quotedblright \period -1000;
} kern;

Agora carregue essas informações de fonte usando fontspec:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[FeatureFile=Palatino.fea]{Palatino}

\begin{document}
Here is an automatically kerned quotation mark: ``\dots''.

Here is a manually kerned quotation mark: ``\dots''\kern-0.5em.
\end{document}

Observe que você precisa compilar isso lualatexagora e adicionar as informações de kerning personalizadas para cada fonte que deseja usar.

Kerning automático com LuaLaTeX

Responder2

Eu definiria isso apenas como um \rlapponto -ed (ou, no sentido do LaTeX, \makebox[0pt][l]), envolto em uma macro:

insira a descrição da imagem aqui

\documentclass{article}
\newcommand{\qperiod}{\rlap{.}}
\begin{document}
Some text: ``\dots''.

Some text: ``\dots''

Some text: ``\dots\qperiod''
\end{document}

O encapsulamento de macro permite modificações globalmente, quando necessário.

Responder3

Aqui eu uso uma pilha. O stacktypevalor é "L" para longo ou "S" para curto (padrão). Se for "L", a "distância" de empilhamento é de linha de base a linha de base. Ao definir como 0pt, indica que os dois componentes compartilham a mesma linha de base (em contraste, uma distância curta da pilha é a lacuna vertical entre a parte superior da "âncora" e a parte inferior do item empilhado). Define o stackalignmentalinhamento horizontal (padrão c = centro). Aqui, eu configurei para alinhamento à esquerda.

\documentclass{article}
\usepackage{stackengine}
\renewcommand\stacktype{L}
\renewcommand\stackalignment{l}
\begin{document}
by ``\dots\stackon[0pt]{.}{''}
\end{document}  

insira a descrição da imagem aqui

O mesmo resultado pode ser alcançado, ignorando todas as configurações de parâmetros, usando a stackenginemacro genérica com 8 argumentos obrigatórios:

by ``\dots\stackengine{0pt}{.}{''}{O}{l}{F}{F}{L}

Os oito argumentos obrigatórios são:

  • distância de empilhamento
  • item âncora
  • item empilhado
  • Pilha O (acima) ou U (abaixo)
  • l(esquerda) c(enter) ou r(direita) alinhamento horizontal
  • T/F para "quietstack" ("T" significa criado, mas não impresso)
  • T/F para "useanchorwidth" ("T" significa que a largura da âncora determina a largura geral da pilha)
  • Pilha S (hort) ou L (ong)

informação relacionada