потеря лигатур при переключении серии шрифтов или цвета в середине слова

потеря лигатур при переключении серии шрифтов или цвета в середине слова

В педагогических целях я хотел бы выделить некоторые символы в слове жирным шрифтом, красным цветом или любым другим подходящим способом.

Поскольку я использую рукописные шрифты (German Schulschriften wednи French Cursive frcursive), я привязан к тому, чтобы лигатуры работали хорошо. К сожалению, лигатуры блокируются, если вы переключаете серию или цвет в середине слова.

Я был бы рад решению XeLaTeX или LuaLaTeX. Если нужно, то и PDFLaTeX. И как уже говорилось, любой вид выделения подойдет.

Вот 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}

Вы можете видеть, что в первых двух строках W и ö плохо связываются, также как r и o + y и a, когда они выделены жирным шрифтом или красным. Сравните с невыделенными версиями. лигатуры заблокированы

решение1

Вы можете попробовать пакет luacolor. Он не вставляет whatsits и поэтому не разделяет лигатуры и не нарушает кернинг. Но он не может окрасить одну часть лигатуры в цвет, отличный от цвета остальных. Лигатура — это один глиф, и она должна иметь один цвет. Поэтому вы можете получить довольно неожиданные результаты (последний пример, возможно, ошибка):

\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}

Будьте осторожны со специальными шрифтами: кодировка T1 не очень подходит для lualatex (и, по крайней мере, часть шрифтов, похоже, использует нестандартную кодировку T1).

введите описание изображения здесь

решение2

Я придумал решение с использованием фонового цвета.

По сути, он печатает слово дважды друг над другом. Это достигается с помощью \rlapдля первой печати (не забудьте\leavevmode в самом начале абзаца, или используйте \mbox[0pt]{l}{...}альтернативно). Этот первый отпечаток печатает первую часть с \hphantom, затем вторую часть (выделенную) серым на сером. После этого второй отпечаток печатает все слово обычным цветом переднего плана поверх него, так что средняя часть отображается цветом переднего плана поверх серого фона. Поскольку наличие или отсутствие лигатур изменяет ширину слова (или частей слова), выравнивание между двумя версиями необходимо отрегулировать вручную с помощью небольшого кернинга.

\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}

Скриншот:

введите описание изображения здесь

Остается одна проблема: когда глиф выходит за пределы своей ограничивающей рамки, он может выглядеть странно, см. <ö> первогоВёртер. Но сейчас я счастлив и не буду задавать новый вопрос по этой незначительной проблеме.

Редактировать:

Благодаряэтот ответ, я мог бы заменить фон \colorboxи его маленькую проблему с помощью правила правильных размеров (нужен пакет calc):

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

введите описание изображения здесь

Связанный контент