我想要达到的效果是:
Header: Here's some more text
that's just here to
illustrate what I mean. It
needs to be a bit longer to
show it properly. That
should do it.
我最初的想法是使用 minipage 来实现这一点,但由于页面宽度可变,我没能取得很大进展。我试图构建一个包含两个参数的环境,其中 #1 是一种位于左侧的标题,而正文 #2 位于其旁边,填充了剩余的宽度,但在换行符之后“保持在自己的通道中”,即与 #2 的开头左对齐。
我几乎确信这样的事情一定存在,但我搜索了一段时间却什么也没找到。
答案1
您可以使用悬挂缩进。
如果您需要在 内“转到新行” headedpar
,请使用\\
。
\documentclass{article}
\usepackage{lipsum} % for mock text
\newenvironment{headedpar}[1]{%
\par
\settowidth{\dimen0}{#1: }
\hangindent=\dimen0 \hangafter=1
\noindent #1: \ignorespaces
}{\par}
\begin{document}
\lipsum[1][1-4]
\begin{headedpar}{Header}
\lipsum[2][1-5]
\end{headedpar}
\begin{headedpar}{Longer header}
\lipsum[3][1-5]
\end{headedpar}
\lipsum[4][1-4]
\end{document}
也许你想在这些段落周围添加垂直空间。将定义改为
\newenvironment{headedpar}[1]{%
\par\addvspace{\topsep}
\settowidth{\dimen0}{#1: }
\hangindent=\dimen0 \hangafter=1
\noindent #1: \ignorespaces
}{\par\addvspace{\topsep}}
将产生以下内容。
答案2
例如,您可以定义宏\head
,文本由 完成\ehead
。宏读取以列分隔的第一个参数,将其设置为框 0,测量框的宽度并将其用作\leftskip
给定的段落。
\def\head#1:#2\ehead{\par
{\setbox0=\hbox{#1: }
\leftskip=\wd0 \rightskip=0pt plus1fil
\noindent\llap{\box0}\ignorespaces #2
\par
}}
\head Header: Here's some more text
that's just here to
illustrate what I mean. It
needs to be a bit longer to
show it properly. That
should do it.
\ehead
如果您想要对齐段落,即不对齐右边(如 egreg 的答案中所示),则只需不设置\rightskip
register。请注意,您可以在\head
...\ehead
环境中使用更多段落。
答案3
像这样吗?
请注意,“标题”从文本块的左侧边缘开始。如果您不想要此行为,只需删除\par\noindent
当前位于 之前的说明即可#1
。
\documentclass{article}
\newcommand\twoparts[2]{%
\par\noindent #1:\space%
\parbox[t]{4cm}{\raggedright #2}\par}
\begin{document}
\twoparts{Header}{Here's some more text that's just here to
illustrate what I mean. It needs to be a bit longer to
show it properly. That should do it.}
\end{document}