perder ligaduras ao mudar a série ou cor da fonte no meio de uma palavra

perder ligaduras ao mudar a série ou cor da fonte no meio de uma palavra

Para fins pedagógicos, gostaria de destacar alguns caracteres de uma palavra, em negrito ou vermelho ou o que for mais adequado.

Como uso fontes manuscritas (alemão Schulschriften wedne francês cursivo frcursive), estou fadado a que as ligaduras funcionem bem. Infelizmente, as ligaduras são bloqueadas se você mudar de série ou cor no meio de uma palavra.

Eu ficaria feliz com uma solução XeLaTeX ou LuaLaTeX. Se necessário, também com uma solução PDFLaTeX. E como dito, qualquer tipo de destaque serviria.

Aqui o MWE:

\documentclass[varwidth]{standalone}
\usepackage[ngerman,frenchb]{babel}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\setmonofont[Scale=.75]{Linux Libertine Mono O}
\setsansfont[Scale=MatchLowercase]{Linux Biolinum O}
\usepackage{wedn}
\newcommand{\schschrift}{\selectlanguage{ngerman} \wedn\upshape}
\usepackage{frcursive}    
\usepackage{xcolor}

\begin{document}
\newcommand{\fex}[3]{#1\textbf{#2}#3}
% \renewcommand{\fex}[3]{#1{\bfseries #2}#3}

{
\schschrift
\fex{W}{ö}{rter} -- Wörter
}
{
\cursive
\fex{incr}{oy}{able} -- incroyable
}

\renewcommand{\fex}[3]{#1\textcolor{red}{#2}#3}

{
\schschrift
\fex{W}{ö}{rter} -- Wörter
}
{
\cursive
\fex{incr}{oy}{able} -- incroyable
}

\renewcommand{\fex}[3]{#1#2#3}

{
\schschrift
\fex{W}{ö}{rter} -- Wörter
}
{
\cursive
\fex{incr}{oy}{able} -- incroyable
}
\end{document}

Você pode ver que, nas 2 primeiras linhas, W e ö não se ligam bem, assim como r e o + y e a, quando colocados em negrito ou em vermelho. Compare com as versões não destacadas. ligaduras bloqueadas

Responder1

Você pode experimentar o pacote luacolor. Ele não insere o que está e, portanto, não rompe as ligaduras nem perturba o kerning. Mas não se pode colorir uma parte de uma ligadura com uma cor diferente das demais. Uma ligadura é um glifo único e deve ter uma única cor. Portanto, você pode obter resultados bastante surpreendentes (o último exemplo talvez seja um bug):

\documentclass{article}
\usepackage[ngerman,french]{babel}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\setmonofont[Scale=.75]{Linux Libertine Mono O}
\setsansfont[Scale=MatchLowercase]{Linux Biolinum O}
\usepackage{wedn}
\newcommand{\schschrift}{\selectlanguage{ngerman} \wedn\upshape}
\usepackage{frcursive}
\usepackage{xcolor}
\usepackage{luacolor}
\begin{document}

fi\textcolor{red}{ff}

f\textcolor{red}{if}f

\newcommand{\fex}[3]{#1\textcolor{red}{#2}#3}

{
\schschrift
W\textcolor{red}{ö}rter -- Wörter 
}

{\cursive i\textcolor{red}{croy} in\textcolor{red}{croy}
i\textcolor{red}{nc}roy}
\end{document}

Tenha cuidado com suas fontes especiais: a codificação T1 não é adequada para lualatex (e pelo menos as fontes parecem usar uma codificação T1 não padrão).

insira a descrição da imagem aqui

Responder2

Eu encontrei uma solução usando uma cor de fundo.

Basicamente, ele imprime a palavra duas vezes uma em cima da outra. Isto é conseguido com \rlapa primeira impressão (não se esqueça do\leavevmode bem no início de um parágrafo, ou use \mbox[0pt]{l}{...}alternativamente). Esta primeira impressão imprime a primeira parte com \hphantom, depois a segunda parte (a destacada) em cinza sobre cinza. Depois disso, a segunda impressão imprime a palavra inteira na cor normal de primeiro plano em cima dela, de modo que a parte do meio apareça na cor de primeiro plano em cima de um fundo cinza. Como a presença ou ausência de ligaduras altera a largura da palavra (ou partes da palavra), o alinhamento entre as 2 versões deve ser ajustado manualmente através de um pouco de kerning.

\documentclass[varwidth,landscape]{standalone}
\usepackage[ngerman,frenchb]{babel}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}

\usepackage{frcursive}
\usepackage{wela,wedn}
\newcommand{\schschrift}{\wedn\upshape\bfseries}

\usepackage{xcolor}

\definecolor{FR}{rgb}{.2717,.4566,.2717}
\definecolor{DE}{rgb}{.4566,.2717,.2717}
\definecolor{fond}{gray}{.8}
\setlength{\fboxsep}{.1pt}

\begin{document}    
{
\cursive\color{FR}

\leavevmode\rlap{%
  \hphantom{pa}\kern-.3ex%
  \colorbox{fond}{\textcolor{fond}{tt}}%
  }%
  patte

\leavevmode\rlap{%
  \hphantom{incr}\kern-.3ex%
  \colorbox{fond}{\textcolor{fond}{oy}}%
  }%
  incroyable
}
}

{
\selectlanguage{ngerman}\schschrift\color{DE}

\leavevmode\rlap{%
  \hphantom{W}%
  \colorbox{fond}{\textcolor{fond}{ö}}%
  }Wörter

\renewcommand{\schschrift}{\wela\upshape\bfseries}\schschrift\color{DE}

\leavevmode\rlap{%
  \hphantom{W}\kern-.3ex%
  \colorbox{fond}{\textcolor{fond}{ö}}%
  }Wörter
}
\end{document}

Captura de tela:

insira a descrição da imagem aqui

Resta um problema: quando o glifo se estende além da caixa delimitadora, ele pode parecer estranho, veja o <ö> do primeiroWörter. Mas estou feliz por enquanto e não abrirei uma nova pergunta sobre esse assunto menor.

Editar:

Graças aesta resposta, eu poderia substituir o fundo \colorboxe seu pequeno problema por uma regra com as dimensões corretas (precisa do pacote calc):

\leavevmode\rlap{%
  \hphantom{W}\kern-.3ex%
  \textcolor{fond}{\rule[\depthof{ö}*{-1}]{\widthof{ö}}{\totalheightof{ö}}}%
  }%
Wörter

insira a descrição da imagem aqui

informação relacionada