我需要创建一个命令来为一些需要多行的给定文本添加下划线。最后一行的下划线应延伸到页面的右侧。当我只需要为多行文本添加下划线时,我会使用包\ul
中的soul
命令。但我找不到任何延长最后一行的技巧。像 这样的命令\ul{Last line\hfill\mbox{}}
没有任何效果。使用\soulregister{\hfill}{0}
也无济于事。即使我强制换行,\hfill
也会被忽略,即在和\ul{Last line\hfill\mbox{}\linebreak}
之间留出很大的空间, 之后没有空格。我发现唯一能接近期望的方法如下。Last
line
line
\documentclass{article}
\usepackage{soul}
\newcommand{\raisedrule}[1]{\leaders\hbox{\rule[#1]{1pt}{0.4pt}}\hfill}
\newcommand{\longunderline}[1]{\ul{#1}\raisedrule{-3.5pt}\mbox{}}
\soulregister{\hfill}{0}
\begin{document}
\longunderline{Some long text. Some long text. Some long text. Some long text. Some long text. Some long text.}
\longunderline{Some short text.}
\ul{Oh, \hfill.}
\end{document}
但是,下划线的高度可能取决于文本,并且文本之后下划线和下划线之间会有一些断层。所以我的解决方案真的很糟糕。你看到更好的解决方案了吗?
更复杂的情况是,我需要制作精确数量的未划线行,假设文本总是足够短以适合所需的行数,但并不总是足够长,即某些行可能完全空白。有什么想法吗?
编辑
使用ulem
and\uline
代替soul
and\ul
可以“加下划线” \hfill
。但是它带来了新的问题,即丢失了连字符。更有趣的是,可以“帮助”它制作连字符。
\documentclass{article}
\usepackage{soul}
\usepackage{ulem}
\pagestyle{empty}
\soulregister{\hfill}{0}
\begin{document}
\uline{Some long text. Some long text. Some long text. Some long text. Somelongword. Some long text.\hfill}
\uline{Some long text. Some long text. Some long text. Some long text. Somelong\-word. Some long text.\hfill}
\ul{Some long text. Some long text. Some long text. Some long text. Somelongword. Some long text.\hfill}
\end{document}
中间版本是我想要的,但是现在需要手动允许连字符。
编辑2
再举一个例子。这里\uline
使过满,但\ul
不使过满或不足。
\documentclass{article}
\usepackage{soul}
\usepackage{ulem}
\begin{document}
\Huge
\ul{Some long text. Some long text. Some long text. Some long text. Some long text. Some long text.}
\uline{Some long text. Some long text. Some long text. Some long text. Some long text. Some long text.}
\end{document}
答案1
\documentclass{article}
\usepackage{soul}
\usepackage{linegoal}
\newcommand{\raisedrule}[1]{\rule[#1]{\linegoal}{0.45pt}}
\newcommand{\longunderline}[1]{\ul{#1}\raisedrule{-.75ex}}
\begin{document}
\longunderline{Some long text. Some long text. Some long text. Some long text. Some long text. Some long text.}
\longunderline{Some short text.}
\longunderline{Oh,.}
\longunderline{Last line}
\longunderline{Some long text. Some long text. Some long text. Some long text. Somelongword. Some long text.}
\end{document}
这至少需要两次编译运行。
答案2
如果你不介意使用ulem
包而不是soul
,这是有效的:
\documentclass{article}
\usepackage[normalem]{ulem}
\newcommand{\longunderline}[1]{\uline{#1\hfill\mbox{}}}
\begin{document}
\longunderline{Some long text. Some long text. Some long text. Some long text. Some long text. Some long text.}
\longunderline{Some short text.}
\longunderline{Oh.}
\end{document}
输出