答案1
您所尝试的缺少的是\parbox
,因此一些喜欢{\bfseries mycodebook}\hfill\parbox[t]{8cm}{my long text}
就足够了。
为了简化这一点,下面的示例显示了一个\code
带有两个参数(代码和定义)的宏,该宏仅在codebook
避免缩进的环境中工作,并在定义之间设置一些垂直间距。环境允许一个可选参数,该参数应该是最长的代码,以便自动调整定义的宽度。
请注意,就像在列表中一样,一旦环境结束,第一个下一段可能就不会缩进。这可能是有意义的,因为段落的开头会很清晰。但是,如果您想更改此行为,只需在环境后留一个空行即可。
\documentclass{article}
\usepackage{lipsum} % dummy text
\newlength\cbl
\newenvironment{codebook}[1][rob\_avprison1]{
\settowidth{\cbl}{#1}
%\setlength{\cbl}{#1}
\parskip1em plus .3em minus .2em
\parindent0pt
\def\code##1##2{{\bfseries ##1}\hfill%
\parbox[t]{\dimexpr\linewidth-2em-\cbl}{##2}\par}}{\noindent}
\begin{document}
\lipsum[2]
\begin{codebook}
\code{rob\_mannim0}{\lipsum[66]}
\code{rob\_avprison1}{\lipsum[75]}
\end{codebook}
\lipsum[8] % next paragraph not indented
\begin{codebook}[book0]
\code{book0}{\lipsum[34]}
\code{book0}{\lipsum[34]}
\end{codebook}
\lipsum[6-10] % paragraph indented
\end{document}
与列表环境的主要区别在于不允许在项目内分页\code
。如果您需要这样做,可以使用以下包,这是一个简单的替代方案,也可以选择调整代码空间enuitem
:
\documentclass{article}
\usepackage{enumitem,calc}
\usepackage{lipsum}
\newenvironment{codebook}[1][xxxxxxxxxxx]{%
\begin{description}[leftmargin=\widthof{#1}+2em, style=nextline]}
{\end{description}}
\begin{document}
\lipsum[2]
\begin{codebook}
\item[rob\_mannim0] \lipsum[66]
\item [rob\_avprison1] \lipsum[75]
\end{codebook}
\lipsum[4]
\begin{codebook}[rob\_avprison1\hskip2em]
\item[rob\_mannim0] \lipsum[66]
\item [rob\_avprison1] \lipsum[75]
\end{codebook}
\lipsum[6-10]
\end{document}
答案2
这个解决方案要求您猜测定义所需的宽度。
\documentclass{article}
\usepackage{array}
\usepackage{longtable}
\usepackage{blindtext,showframe}% MWE only
\newcolumntype{d}{>{\textbf\bgroup}l<{\egroup}}
\setlength{\LTleft}{0pt}
\setlength{\LTright}{0pt}
\begin{document}
\begin{longtable}{@{}d@{\extracolsep{\fill}}p{3.5in}@{}}
name & \blindtext \\[\baselineskip]
another name & \blindtext
\end{longtable}
\end{document}
这个解决方案更像一个列表。它还需要您猜测或计算最长名称的长度。
注意,\itemsep
和\labelsep
是传统的,不是强制的。
\documentclass{article}
\usepackage{blindtext,showframe}% MWE only
\newlength{\maxwidth}
\settowidth{\maxwidth}{\textbf{longest name}}
\newcommand{\defineit}[1]{\ifvmode\else\vskip\itemsep\fi
\par\leavevmode
\hspace{-\leftskip}\makebox[\leftskip][l]{\textbf{#1}}\ignorespaces}
\newenvironment{definitions}%
{\setlength{\parindent}{0pt}%
\setlength{\leftskip}{\dimexpr \maxwidth+\labelsep}%
\let\item=\defineit
\ignorespaces
}{\par\ignorespaces}
\begin{document}
\begin{definitions}
\item{name}\blindtext
\item{longest name}\blindtext
\end{definitions}
\end{document}