単語の途中でフォントシリーズや色を切り替えると合字が失われる

単語の途中でフォントシリーズや色を切り替えると合字が失われる

教育上の目的で、太字や赤色など、適切な方法で単語内の一部の文字を強調表示したいと思います。

私は手書きフォント (German Schulschriftenwednと 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}

最初の 2 行では、太字または赤で表示した場合、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

背景色を使用した解決策を思いつきました。

基本的に、単語を2回重ねて印刷します。これは、\rlap最初の印刷で実現されます(\leavevmode 段落の冒頭、または\mbox[0pt]{l}{...}代わりに使用します)。この最初の印刷では、最初の部分が で印刷され \hphantom、次に 2 番目の部分 (強調表示された部分) がグレーの上にグレーで印刷されます。その後、2 番目の印刷では、その上に通常の前景色で単語全体が印刷されるため、中央の部分はグレーの背景の上に前景色で表示されます。合字の有無によって単語 (または単語の部分) の幅が変わるため、2 つのバージョン間の配置は、カーニングを少し行って手動で調整する必要があります。

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

スクリーンショット:

ここに画像の説明を入力してください

1つの問題が残っています。グリフが境界ボックスを超えて拡張すると、奇妙に見えることがあります。最初の<ö>を見てください。ヴェルターしかし、今のところ私は満足しており、この小さな問題について新たな質問を始めるつもりはありません。

編集:

感謝この答え、背景\colorboxとその小さな問題を適切な寸法のルールに置き換えることができます (パッケージが必要ですcalc)。

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

ここに画像の説明を入力してください

関連情報