下划线软件包列表 - 优点和缺点

下划线软件包列表 - 优点和缺点

LaTeX 内置的宏\underline几乎不能使用为什么带下划线的文本到达行尾后不会换行? 我一直在尝试使用包裹soul省略下划线但遇到了很多问题,现在正在考虑替代方案。

因此,我正在寻找用于下划线文本的各种选项的比较:

  1. 包裹soul
  2. 包裹ulem
  3. Tikz 按照关于“LaTeX 中酷炫的文本突出显示”的回答
  4. 还有其他吗?

要求:

理想情况下,我希望能够强调内容

  1. 跨越换行符
  2. 带连字符
  3. 包含数学内容

跨分页工作会是一个好处,但我并不太担心。

即使某些包不能满足所有要求,也最好将它们列出,以便人们了解使用它的潜在问题。

笔记:

  • 我知道一般来说,字体排版圈会反对使用下划线。但是,我没有其他好的方法来表示超链接。当链接文本包含多个单词(或两个后续链接)时,使用颜色来表示超链接会出现问题,在这种情况下,链接的内容不明确。更多详细信息请参阅注释部分超链接是否应包含尾随标点作为链接文本的一部分?。此外,我更喜欢保留颜色用于其他目的。

参考:

答案1

修订的解决方案

随着软件包的最新变化censor,纳入了tokcycle基于的循环来审查令牌,下面给出的原始方法需要修改......事实上,它变得更加简单。

\mblackout数学审查可以与(逐个字符审查)或(块下划线)一起发生\mcensor

\documentclass{article}
\usepackage[none]{hyphenat}
\usepackage{censor}
\usepackage{xcolor}
\usepackage{stackengine}
\usepackage{scalerel,lipsum}
\censorruledepth=-.25ex
\censorruleheight=.1ex
\newlength\maxkern
\setlength{\maxkern}{.14ex}
\newlength\nextcharwidth
\makeatletter
\renewcommand\@cenword[1]{%
  \setlength{\nextcharwidth}{\widthof{#1}}%
  \censorrule{\nextcharwidth}%
  \kern -\nextcharwidth%
  \color{white}%
  \kern -.5\maxkern #1\kern .5\maxkern%
  \kern -\nextcharwidth%
  \kern -\maxkern #1\kern \maxkern%
  \kern -\nextcharwidth%
  \kern .5\maxkern #1\kern -.5\maxkern%
  \kern -\nextcharwidth%
  \kern \maxkern #1\kern -\maxkern%
  \kern -\nextcharwidth%
  \color{black}%
  #1}
\let\sv@cenword\@cenword
\newcommand\m@cenword[1]{\ThisStyle{%
  \stackengine{\mcensorruledepth}{$\SavedStyle#1$}%
    {\rule{\widthof{$\SavedStyle#1$}}{\the\censorruleheight}}{U}{c}{F}{T}{L}}}
\newcommand\mblackout[2][\dp\strutbox]{%
  \let\@cenword\m@cenword%
  \def\mcensorruledepth{#1}%
  \blackout{#2}%
  \let\@cenword\sv@cenword%
}
\newcommand\mcensor[2][\dp\strutbox]{%
  \let\@cenword\m@cenword%
  \def\mcensorruledepth{#1}%
  \censor{#2}%
  \let\@cenword\sv@cenword%
}
\makeatother
\begin{document}
\blackout{This is a great test today}

{\raggedright\xblackout{This is a great test today}}

\[ \mblackout{y = A x^{2}} + Bx + \mblackout{C} \]

\[ \mblackout[.3ex]{y = \frac{a^{3} + b^{2} + c}{d_{3}}}\]

\[ \mcensor[3ex]{y = \frac{a^{3} + b^{2} + c}{d_{3}}}\]


\xblackout{Quisque ullamcorper placerat ipsum. Cras nibh. Morbi vel 
  justo vitae lacus tincidunt ultrices. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In hac habitasse platea dictumst. 
Integer tempus convallis augue. Etiam facilisis. Nunc elementum 
fermentum wisi. Aenean placerat. Ut imperdiet, enim sed gravida sollicitudin, felis odio placerat quam, ac pulvinar elit purus 
eget enim. Nunc vitae tortor. Proin tempus nibh sit amet nisl. 
Vivamus quis tortor vitae risus porta vehicula.}

\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

原始解决方案(基于过时的审查包)

这是对软件包的一次黑客攻击,censor目的是完成非预期的事情。考虑到所有因素,还不错。它为降部留出了空间,并具有用户可设置的间隙(\maxkern)!下划线的深度(\censorruledepth)和厚度(\censorruleheight)完全可设置。它可以换行和分页。并且有了这个编辑版本,它现在可以进行数学下划线。

但是,它不进行连字符连接。对于文本,它有两种形式,使用语法censor\blackout跳过空格和句点,\xblackout以及尝试通过使用精心选择的措施,在空白和句号上填充下划线。由于参数是在我的 MWE 中设置的,因此\xblackout会产生轻微溢出到左边距的负面影响。

\documentclass{article}
\usepackage[none]{hyphenat}
\usepackage{lipsum}
\usepackage{censor}
\usepackage{xcolor}
\usepackage{stackengine}
\usepackage{scalerel}
\censorruledepth=-.25ex
\censorruleheight=.1ex
\newlength\maxkern
\setlength{\maxkern}{.14ex}
\newlength\nextcharwidth
\makeatletter
\renewcommand\@cenword[1]{%
  \setlength{\nextcharwidth}{\widthof{#1}}%
  \censorrule{\nextcharwidth}%
  \kern -\nextcharwidth%
  \color{white}%
  \kern -.5\maxkern #1\kern .5\maxkern%
  \kern -\nextcharwidth%
  \kern -\maxkern #1\kern \maxkern%
  \kern -\nextcharwidth%
  \kern .5\maxkern #1\kern -.5\maxkern%
  \kern -\nextcharwidth%
  \kern \maxkern #1\kern -\maxkern%
  \kern -\nextcharwidth%
  \color{black}%
  #1}
\long\def\xblackout#1{\rule{0ex}{0ex}%
  \def~{-}%
  \def\@justpar{F}%
  \def\@justperiod{F}%
  \def\@justspace{F}%
  \protected@edef\save@arg{#1}%
  \expandafter\xcensor@Block\save@arg\stringend%
  \let~\sv@tilde%
 }
\long\def\blackout#1{%
  \def~{-}%
  \protected@edef\save@arg{#1}%
  \expandafter\censor@Block\save@arg\stringend\let~\sv@tilde}
\newcommand\singlelipsum[1]{%
  \begingroup\let\lips@par\relax\csname lipsum@\@roman{#1}\endcsname
\endgroup }
\let\sv@cenword\@cenword
\newcommand\m@cenword[1]{\ThisStyle{%
  \stackengine{\mcensorruledepth}{$\SavedStyle#1$}%
    {\rule{\widthof{$\SavedStyle#1$}}{\the\censorruleheight}}{U}{c}{F}{T}{L}}}
\newcommand\mblackout[2][\dp\strutbox]{%
  \let\@cenword\m@cenword%
  \def\mcensorruledepth{#1}%
  \blackout{{#2}}%
  \let\@cenword\sv@cenword%
}
\makeatother
\periodrlap=1ex
\afterperiodlap=.4ex
\lletterlap=.0ex
\rletterlap=.6ex
\afterspacelap=.6ex
\begin{document}
\blackout{\singlelipsum{4}}

{\raggedright\xblackout{\singlelipsum{4}}}

\[ \mblackout{y = A x^2} + Bx + \mblackout{C} \]

\[ \mblackout[3ex]{y = \frac{a^3 + b^2 + c}{d_3}}\]

\blackout{\singlelipsum{4}}
\end{document}

如果单词之间需要空格,\blackout效果会很好。

在此处输入图片描述

如果希望空格加下划线,请使用\xblackout。根据我选择的调整参数\xblackout,下划线会略微延伸到两个边距。此外,我\raggedright在这里使用 ,因为拉伸胶水会使下划线中形成间隙。

在此处输入图片描述

对于数学模式,方法略有不同。第一个不同之处在于它无法为下行线留出间隙(因为我不知道如何将长度变量转换为 mu)。因此,我默认将数学下划线(命名为\mblackout,符合审查语法)放置在 的深度\strutbox。但是,对于低于此深度的数学,它需要一个可选参数来指定在基线以下多远的位置进行下划线。

因此,

\[ \mblackout{y = A x^2} + Bx + \mblackout{C} \]

\[ \mblackout[3ex]{y = \frac{a^3 + b^2 + c}{d_3}}\]

给出以下内容:

在此处输入图片描述

如果您担心下划线可能会与数学除法混淆,您可以随时通过更改来加粗它\censorruleheight

答案2

强调数学有点问题——例如,如果有下标,你如何选择在哪里画线。

我习惯[normalem]{ulem}在审阅期间显示更改文本,正是因为它永远不会在最终输出中使用。我从未在数学方面遇到过这种情况。

下面的代码

\documentclass[12pt,oneside,openany,a4paper,english]{memoir}
\usepackage{babel}
\usepackage{graphicx}
\usepackage[normalem]{ulem}
\usepackage{hyperref}
\hypersetup{colorlinks=false,pdfborderstyle={/S/U/W 1}}

\begin{document}
\tiny{
    \url{http://tex.stackexchange.com/questions/126291/list-of-underlining-packages-pros-and-cons}
    \href{http://tex.stackexchange.com/questions/126291/list-of-underlining-packages-pros-and-cons}{\TeX.stackexchange.com}
    \uline{\TeX.stackexchange.com}
}

\end{document}

生成 上述代码的屏幕截图(注意我必须使用 printscreen 才能获得此信息,Acrobat 的快照会删除 URL 上的蓝色下划线)

ulem将尝试强调数学,下标可以工作,但分数不行 - 使用上面的序言,\uline{test $y=mx+c$ and $y_n=y_{n-1}+1^2+\frac{1}{2}$}产生 ulem 数学示例

它可以处理强制换行,\\但不能处理双回车。

\href还将尝试处理数学,并且可以通过将下划线设置得稍微低一些来为简单分数加下划线,但内联数学中的上标与上面一行的下划线冲突。

总之,我会使用hyperref下划线来标​​记超链接(可能用蓝色而不是青色),主要是因为它的其他好处(有效的链接),以及ulem吸引人们对文本区域的注意(在极少数情况下下划线是有用的)。

相关内容