教育上の目的で、太字や赤色など、適切な方法で単語内の一部の文字を強調表示したいと思います。
私は手書きフォント (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