我正在尝试制作这样的文档:
由于有很多这样的部分,我想创建一个新的命令,例如\textwithline{}{}
,然后我可以输入
Author: \textwithline{Joe Shmoe}{First name, Last name}
This author's editor: \textwithline{Billy Willy}{First name, Last name}
在我的文档中。
注意重要特征:
- 该行必须填满所有可用的剩余空间
- 行上方和下方的文本必须居中
- 左侧的文本长度可变(或可能为空白)
有什么好方法可以发出这样的命令吗?我试过:
tabular
但\hfill
实际上并没有拉伸桌子tabular*
但它没有给左边的文本“留出空间”minipage
但这要求我每次都对宽度进行硬编码\uline{\hfill Billy Willy \hfill}{\hfill First name, Last name \hfill}
但\centering
行下方的文本不在行上居中,而是在页面上
答案1
\documentclass{article}
\newcommand\textwithline[2]{{%
\setlength\parfillskip{0pt}%
\hrulefill
\raisebox{5pt}{\makebox[0pt]{#1}}%
\raisebox{-12pt}{\makebox[0pt]{#2}}%
\hrulefill
\par
\bigskip}}
\begin{document}
Author: \textwithline{Joe Shmoe}{First name, Last name}
This author's editor: \textwithline{Billy Willy}{First name, Last name}
\end{document}
答案2
这是一个使用选项linegoal
计算线的剩余宽度(由给出\linegoal
)。
\documentclass{article}
\usepackage{linegoal}
\newcommand{\textwithline}[2]{%
\begin{minipage}[t]{\linegoal}
\centering\strut #1 \\[-.7\baselineskip]
\hrulefill \\[-.1\baselineskip]
\centering\small\footnotesize #2
\end{minipage}\par
\addvspace{.5\baselineskip}
}
\begin{document}
Author: \textwithline{Joe Shmoe}{First name, Last name}
This author's editor: \textwithline{Billy Willy}{First name, Last name}
\end{document}
由于linegoal
使用类似标签引用的系统(得益于zref
),任何宽度的变化都需要您至少编译两次才能稳定下来。