出于教学目的,我想通过粗体或红色或任何可行的方式突出显示单词中的某些字符。
因为我使用手写字体(德语 Schulschriftenwedn
和法语 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