我如何正确对齐此标题和正文?

我如何正确对齐此标题和正文?

我想要达到的效果是:

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 的答案中所示),则只需不设置\rightskipregister。请注意,您可以在\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}

相关内容