通过堆叠彩色下划线突出显示文本

通过堆叠彩色下划线突出显示文本

我有一些句子,其中的某些人“标记”了某些字符,而其他人没有。我想同时显示这些标记。堆叠彩色下划线(其中一条线代表每个人的标记)似乎是最好的解决方案。但是,我很难做到这一点。我如何同时显示多个标记?

目标

重叠亮点

失败的代码

因为}关闭了最近的{,以下代码仅适用于部分示例(它在目标示例上失败):

\documentclass{article}
\usepackage{xcolor}
\newcommand{\rul}[1]{\textcolor{red}{\underline{\textcolor{black}{#1}}}}
\newcommand{\bul}[1]{\textcolor{blue}{\underline{\textcolor{black}{#1}}}}

\begin{document}
\rul{sample \bul{with blue embedded} and continuing red}
\end{document}

\lefteqn我对和进行了一些实验\phantom。使用这些命令可以解决括号不匹配的问题,但它还有另外两个问题:它是数学模式下的文本,并且两种下划线颜色之间没有垂直间隙:

\[\lefteqn{\rul{\phantom{overlapping high}}}overlapping \bul{highlighting}\]

其他考虑因素

我需要制作多页此类文本。为了便于阅读,解决方案应具有以下属性:

  • 下划线会自动换行。
  • 单一颜色的下划线在整个文档中保持在同一水平线上(例如,蓝色始终是n低于基线的单位)。
  • 在文档部分中最多可缩放至约 10 条堆叠下划线。

由于文本量较大,因此可读/可维护的解决方案将是王牌。

答案1

这个答案将不是包裹。尽管如此,继续……

这里我引入了\nunderline[]{}{}。可选参数是规则放置的底层(相对于先前的放置)。第一个参数是文本,第二个参数是颜色。规则粗细用 设定\rulethick,相对间距用 设定\lunderset

嵌套用于获取给定短语下的多行。下面逐行介绍:

  1. 用红色下划线标出“重叠”%

  2. 用红色在“ping”下划线,然后在其下 2 个级别用青色划线%

  3. 先用红色划线表示“高”,然后再用蓝色划线,最后用青色划线%

  4. 在第二层级上用蓝色标出“浅色”,在其下用青色标出%

  5. 在第 3 级用青色给“ing”加上下划线。

\documentclass{article}
\usepackage{stackengine}
\usepackage{xcolor}
\newlength\lunderset
\newlength\rulethick
\lunderset=1.5pt\relax
\rulethick=.8pt\relax
\def\stackalignment{l}
\newcommand\nunderline[3][1]{\setbox0=\hbox{#2}%
  \stackunder[#1\lunderset-\rulethick]{\strut#2}{\color{#3}\rule{\wd0}{\rulethick}}}
\begin{document}
\nunderline{overlap}{red}%
\nunderline[2]{\nunderline{ping }{red}}{cyan}%
\nunderline{\nunderline{\nunderline{high}{red}}{blue}}{cyan}%
\nunderline{\nunderline[2]{light}{blue}}{cyan}%
\nunderline[3]{ing}{cyan}
\end{document}

在此处输入图片描述

答案2

这是一个完全不同的方法允许换行,但不允许段落或分页符。它还被强制关闭连字。它使用包censor来创建下划线(通过设置\censorruleheight\censorruledepth),并使用\Longunderstack以适当的间距堆叠不同的线程(基于结果可以一次将多行包装在一列内吗?)。

第一个\thread是纯文本,而堆栈中的后续线程(注意第一个参数的索引)使用\whiteout\blackout来表示要保留的文本和要用与该线程相关的颜色加下划线的文本。缺点是完整的文本必须在输入文件中的每个线程中出现一次,这会导致输入量很大。

如果线程太多导致线条连在一起,\baselinemag则可以从当前设置增加1.2。我还将线程宽度设置为3in,可以更改。

注意:\blackoutand\whiteout不能以空格结束其参数。

\documentclass{article}
\usepackage[none]{hyphenat}
\usepackage{censor}
\censorruleheight=.7pt
\usepackage{xcolor}
\usepackage{stackengine}
\setstackgap{L}{0pt}
\newlength\ruleskip\newlength\rulebase
%%YOU CAN PLAY WITH THESE
\setlength\rulebase{-1.9ex}
\setlength\ruleskip{-.3ex}
\def\baselinemag{1.2}
\def\threadwidth{3in}
%%%%%%%%%%
\def\stacktype{L}
\def\stackalignment{l}
\newcommand\thread[3]{\parbox[t]{\threadwidth}{\baselineskip=\baselinemag\baselineskip%
  \setlength\censorruledepth{\rulebase+#1\ruleskip}\color{#2}#3}}
\def\whiteout#1{\textcolor{white}{\blackout{#1}}}
\begin{document}
\raisebox{7pt}{\Longunderstack{%
\thread{0}{black}{The censor package allows a convenient redaction/censor capability to be 
employed, for those who need to protect restricted information, as well as for those
who are forced to work in a more inefficient environment when dealing with
restricted information.
}\\
\thread{1}{red}{%
  \whiteout{%
    The censor package allows a convenient redaction/censor capability to be 
    employed, for those who need to protect}%
  \blackout{ restricted information,}%
  \whiteout{ as well as for those
    who are forced to work in a more inefficient environment when dealing with
    restricted information.}}\\
\thread{2}{blue}{%
  \whiteout{%
    The censor package allows a convenient redaction/censor capability to be 
    employed, for those who need to protect restricted}%
  \blackout{ information, as well as for those
    who are forced}%
  \whiteout{ to work in a more inefficient environment when dealing with
    restricted information.}}\\
\thread{3}{cyan}{%
  \whiteout{%
    The censor package allows a convenient redaction/censor capability to be 
    employed, for those who need to pro}%
  \blackout{tect restricted inform}%
  \whiteout{ation, as well as for those
    who are forced to work in a more inefficient environment when dealing with
    restricted information.}}
}}
\end{document}

在此处输入图片描述

相关内容