我有一些句子,其中的某些人“标记”了某些字符,而其他人没有。我想同时显示这些标记。堆叠彩色下划线(其中一条线代表每个人的标记)似乎是最好的解决方案。但是,我很难做到这一点。我如何同时显示多个标记?
目标
失败的代码
因为}
关闭了最近的{
,以下代码仅适用于部分示例(它在目标示例上失败):
\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
。
嵌套用于获取给定短语下的多行。下面逐行介绍:
用红色下划线标出“重叠”
%
用红色在“ping”下划线,然后在其下 2 个级别用青色划线
%
先用红色划线表示“高”,然后再用蓝色划线,最后用青色划线
%
在第二层级上用蓝色标出“浅色”,在其下用青色标出
%
在第 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
,可以更改。
注意:\blackout
and\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}