格式化关键字说明以换行至关键字末尾

格式化关键字说明以换行至关键字末尾

我正在寻找一种格式化关键字翻译的方法,其中关键字是左对齐的,但它们的解释不会换到行的开头,而是按关键字的长度缩进。

我想到的一个显而易见的事情是使用表格 - 但随后所有的解释/翻译都由最大的关键字缩进:

  \begin{tabular}[c]{ l p{8cm} }
    \textbf{key} & some value not long enough to get split, but lasts till the end \\
    \textbf{super long keyword} & some value which might be so long that it is being split over multiple lines. \\
  \end{tabular}

渲染

这会导致较短键的解释缩进过多,使其可读性降低。我能想到的唯一补救措施是为每个单词创建一个表,但必须手动为每个表指定段落的大小似乎是反 TeX 的做法:

  \begin{tabular}[c]{ l p{12cm} }
    \textbf{key} & some value not long enough to get split, but lasts till the end \\
  \end{tabular}

  \begin{tabular}[c]{ l p{8cm} }
    \textbf{super long keyword} & some value which might be so long that it is being split over multiple lines. \\
  \end{tabular}

渲染

遗憾的是,我不知道如何用不同的方法获得预期结果。可能是因为我的搜索中缺少某些特定词语。

有一个更好的方法吗?

我的用例:

我有一些领域/工具特定的关键字,我想有一个专门的小节以这种简短的格式来解释它们。

答案1

这有点老套,但这里有一个description基于 - 的环境的可能解决方案,使用enumitem。基本上,这个想法是将列表的每个项目的内容放在minipage具有正确宽度的 中。为了保持列表环境的通常语法,我定义了一个新的keywords列表环境,其中\item被重新定义为自动放置minipages 。

\documentclass{article}
\usepackage{enumitem}
\let\olditem\item
\newlength{\currentlabelwidth}
\newcommand*{\changeitem}{%
    \renewcommand{\item}[1][]{%
        \ifdim\currentlabelwidth>0pt
            \end{minipage}%
        \else\fi%
        \settowidth{\currentlabelwidth}{##1}%
        \olditem[##1]
        \begin{minipage}[t]{\dimexpr\linewidth-\currentlabelwidth}
    }%
}
\newlist{keywords}{description}{1}
\setlist[keywords]{
    font=\bfseries, 
    before=\changeitem,
    after=\end{minipage}\let\item\olditem,
}
\begin{document}
\begin{keywords}
    \item[key] some value not long enough to get split, but lasts till the end.
    \item[other key] some value which might be so long that it is being split over multiple lines.
    \item[super long keyword] some value which might be so long that it is being split over multiple lines.
\end{keywords}
\end{document}

不过,也许有更好的方法可以做到这一点。我想让enumitem左边距适应标签的宽度,但我没有找到任何简单的方法来实现这一点。

答案2

如果您不打算在解释中列出列表,这里有一种方法。

\documentclass{article}

\newenvironment{showkeywords}
 {%
  \par % end the previous paragraph
  \addvspace{\topsep}% some vertical separation
  \setlength{\parindent}{0pt}% no indentation here
  \let\item\showkeywordsitem
 }
 {\par\addvspace{\topsep}}
\def\showkeywordsitem[#1]{%
  \par\addvspace{\smallskipamount}
  \settowidth{\leftskip}{\textbf{#1\quad}}%
  \makebox[0pt][r]{\textbf{#1\quad}}\ignorespaces
}

\begin{document}

\begin{showkeywords}
\item[key] some value not long enough to get split, but lasts till the end

\item[super long keyword] some value which might be so long that it is being 
  split over multiple lines.

\item[another key] which has a very long explanation split into different
  paragraphs.

  Here is the second paragraph of the explanation, which is indented the
  same as the previous one.
\end{showkeywords}

\end{document}

语法与description环境相同。其思想是\item[key]测量键的宽度,然后通过设置悬挂缩进\leftskip。键作为向左突出的零宽度框插入。

条目之间插入一些垂直空间。

在此处输入图片描述

相关内容