LaTeX \rule 填充行

15
为什么以下命令不能产生一条填充空间直到行末的水平线?
Hello \rule[0.5em]{\fill}{1pt}
据我的理解,这段代码应该打印出文本“Hello”,后面跟着一个水平的横线一直延伸到行尾,类似于宏\hfill,它等效于\hspace\fill。但实际上,这个命令只会生成文本“Hello”,没有横线。
我知道可以用\hrulefill来生成这个效果,但不能在这里使用,因为我想要一个升的横线,而\hrulefill无法与\raisebox一起使用,而我希望我的横线挂在基准线上方(最好在一行中间)。
5个回答

17
我没有一个令人满意的答案来解释为什么你提供的命令不起作用,但我可以提供一个有效的解决方法。请将以下内容放置在命令的前面:< /p>
% Raised Rule Command:
%  Arg 1 (Optional) - How high to raise the rule
%  Arg 2            - Thickness of the rule
\newcommand{\raisedrule}[2][0em]{\leaders\hbox{\rule[#1]{1pt}{#2}}\hfill}

将以下内容添加到您的文档前言中,您就可以通过以下方式实现您所希望的目标:
Hello \raisedrule[0.5em]{1pt}

很遗憾,我不明白这是如何工作的,因为 \hfill\hbox 外部,但这很有效,谢谢。 - Konrad Rudolph
4
那部分我可以解释一下。在TeX中,"glue"(粘合物)的一般情况是指"leaders"(引导线);通常,"glue"只是填充空白。但是,"leaders"可以用任何你想要的东西来填充空间。这种方法的一般形式是 \leaders{盒子或规则}\hskip{glue}。由于\hfill是一种特殊的无限可伸缩粘合物,所以"leaders"命令有了两个必要的元素:一个要重复的元素和一个粘合剂,告诉它应该重复多远。 - RTBarnard
使用来自http://tex.stackexchange.com/a/17130/13450的一些代码,这也可以用于在两侧包围文本:`\newcommand{\raisedrule}[2][0em]{\leavevmode\leaders\hbox{\rule[#1]{1pt}{#2}}\hfill\kern0pt}`。 - Christian

7

这是一个高度为1pt并且上升了1.5pt的水平分割线。

Hello \leaders\vrule height 2.5pt depth -1.5pt \hfill \null

2

有一个叫做ulem的包可以实现这个功能。

% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = xelatex
\documentclass{article}
\usepackage[normalem]{ulem}

\begin{document}
normal text \uline{\textit{underline text}\hfill}
\end{document}

这将产生什么。

underline

如果您好奇,normalem选项可以防止包ulem在使用\em\emph命令时产生额外的下划线。


-1

% 我做到了! %

\documentclass{article}
\usepackage[normalem]{ulem}

\begin{document}
\uline{Some text \hfill\phantom{.}}
\end{document}

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

-1

\hrulefill 确实会生成一条填充整行的线。虽然问题要求生成一条升高的线,但我认为使用 \hrulefill 作为起点比采用被接受答案中建议的粘合剂更好。 - Andrew Bate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接