将下划线延伸至右侧

将下划线延伸至右侧

我需要创建一个命令来为一些需要多行的给定文本添加下划线。最后一行的下划线应延伸到页面的右侧。当我只需要为多行文本添加下划线时,我会使用包\ul中的soul命令。但我找不到任何延长最后一行的技巧。像 这样的命令\ul{Last line\hfill\mbox{}}没有任何效果。使用\soulregister{\hfill}{0}也无济于事。即使我强制换行,\hfill也会被忽略,即在和\ul{Last line\hfill\mbox{}\linebreak}之间留出很大的空间, 之后没有空格。我发现唯一能接近期望的方法如下。Lastlineline

\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}

但是,下划线的高度可能取决于文本,并且文本之后下划线和下划线之间会有一些断层。所以我的解决方案真的很糟糕。你看到更好的解决方案了吗?

更复杂的情况是,我需要制作精确数量的未划线行,假设文本总是足够短以适合所需的行数,但并不总是足够长,即某些行可能完全空白。有什么想法吗?

编辑

使用ulemand\uline代替souland\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} 

输出

在此处输入图片描述

相关内容