如何使用 enumitem 制作关键字列表,并使标签在边缘对齐?

如何使用 enumitem 制作关键字列表,并使标签在边缘对齐?

我有点成功地做到了没有使用该enumitem包,方法是: (忽略线条,它是用 制成的showframe

\newenvironment*{keywordlist}{%
    \list{}{%
        \setlength{\labelwidth}{\marginparwidth}%
        \setlength{\labelsep}{\marglistsep}%
        \setlength{\leftmargin}{0pt}%
        \renewcommand*{\makelabel}[1]{\hss\marglistfont##1}%
    }%
}{%
    \endlist%
}

在此处输入图片描述

这就像一个description环境,但标签被移动到了边缘。标签也与右侧对齐,即文本主体,以 分隔\marglistsep。中间的长标签显示了如果标签太长而无法完全放入边缘时会发生什么。

现在,我尝试使用提供的功能集来执行此操作enumitem,但我只得到了这么多:

\newlist{keywordlist}{description}{1}
\setlist[keywordlist]{style=multiline, labelsep=5pt, leftmargin=0pt, labelindent=-\marginparwidth}

在此处输入图片描述

这会将标签放入边距中,但我几乎失去了分隔符值,并且所有标签都与左边框对齐,这会使标签和文本主体之间产生巨大的间隙。这看起来不太好。我喜欢让这个标签跨越多行,这就是为什么我想用这种方法而不是第一种方法。

本质上,我有点想两全其美,因此标签与文本主体对齐,可以跨越多行,但如果其中一行太长,它会将文本内容向内推。

答案1

您可以尝试使用alignenumitem并定义您自己的align键:

 \SetLabelAlign{myright}{strut\smash{\parbox[t]{\labelwidth}{\raggedleft#1}}}

并将其用作align=myright

\documentclass{article}
\usepackage{enumitem,showframe}
\SetLabelAlign{myright}{strut\smash{\parbox[t]{\labelwidth}{\raggedleft#1}}}
\newlist{keywordlist}{description}{1}
\setlist[keywordlist]{style=multiline, labelsep=5pt, leftmargin=0pt,align=myright,
           labelindent=-\marginparwidth}
\begin{document}
 \begin{keywordlist}
 \item[yow] So this is some thing
 \item[This is very long item] This is one kind. This is one kind. This is one kind. This is one kind. This is one kind. This is one kind. This is one kind.
 \item[abcde] This is another kind.
 \end{keywordlist}
\end{document}

在此处输入图片描述

但请注意,如果商品标签较长而描述较短,则商品将会重叠。

相关内容