枚举描述列表

枚举描述列表

如何创建一个列表,其项目既是

  • 枚举(a、b、c、d、…)
  • \item[texthere]并允许通过?设置描述。

我在 Windows 上使用 MikTex。

答案1

编辑

Ben 的评论:

我是否还可以有一个单独的列表类,比如 enumdescript,这样我就不必每次想要使用其中一个列表时手动应用设置?

包裹enumitem提供了一种定义您自己的列表环境的简单方法。命令\newlistsetlist相关命令结合使用。\newlist您可以使用设置来定义您自己的列表。在下面的例子中,我定义了深度为 2 的\setlist环境。这两个命令在enumdescript文档

\documentclass{scrbook}

\usepackage{enumitem}
\newcounter{descriptcount}
\newlist{enumdescript}{description}{2}
\setlist[enumdescript,1]{%
  before={\setcounter{descriptcount}{0}%
          \renewcommand*\thedescriptcount{\alph{descriptcount}}}
  ,font=\bfseries\stepcounter{descriptcount}\thedescriptcount~
}
\setlist[enumdescript,2]{%
  before={\setcounter{descriptcount}{0}%
          \renewcommand*\thedescriptcount{\roman{descriptcount}}}
  ,font=\bfseries\stepcounter{descriptcount}\thedescriptcount~
}
\begin{document}

\begin{enumdescript}
   \item item one
   \item item two
   \item[Some Text] item three
   \begin{enumdescript}
      \item item one
      \item item two
      \item[Some Text] item three
   \end{enumdescript}
   \item item four
   \item item five
\end{enumdescript}
\end{document}

原始答案:

使用包enumitem在最新版本中:

\documentclass{scrbook}

\usepackage{enumitem}
\newcounter{descriptcount}
\renewcommand*\thedescriptcount{\alph{descriptcount}}
\begin{document}

\begin{description}[%
  before={\setcounter{descriptcount}{0}},%
  ,font=\bfseries\stepcounter{descriptcount}\thedescriptcount~]
   \item item one
   \item item two
   \item[Some Text] item three
\end{description}

\end{document}

在此处输入图片描述

答案2

这实际上是对 Marco Daniel 的回答的增强,与问题略有偏离。但我认为,它仍然比其他地方更适合这里。

对于常见问题列表,我需要一个枚举的描述列表,以便我可以在其中引用项目,因此我添加了一些内容:

  • 我添加了更多自定义计数器(我需要 4 个)并重新定义了它们

    \newcounter{enumdesci}
    \newcounter{enumdescii}[enumdesci] % note the optional reset value
    \newcounter{enumdesciii}[enumdescii]
    \newcounter{enumdesciv}[enumdesciii]
    %
    \renewcommand*{\theenumdesci}{\Roman{enumdesci}} % the default is "\arabic{enumdesci}"
    \renewcommand*{\theenumdescii}{\theenumdesci.\Alph{enumdescii}}
    \renewcommand*{\theenumdesciii}{\theenumdescii.\arabic{enumdesciii}}
    \renewcommand*{\theenumdesciv}{\theenumdesciii.\alph{enumdesciv}}
    

    我用四个不同的此处计数器的表示仅用于说明。

    如果你在最后一个计数器后也需要一个句号,请注意在哪里添加它(与上面的版本相比,哪里需要删除;在我看来,上面的第一个版本更好,也可以在enumdescript下面的定义中添加尾点)

    \renewcommand*{\theenumdesci}{\Roman{enumdesci}.}
    \renewcommand*{\theenumdescii}{\theenumdesci\Alph{enumdescii}.}
    \renewcommand*{\theenumdesciii}{\theenumdescii\arabic{enumdesciii}.}
    \renewcommand*{\theenumdesciv}{\theenumdesciii\alph{enumdesciv}.}
    

    一旦定义,我发现这对其他列表也很有用,但现在hyperref抱怨计数器不是唯一的(参见hyperref文档,例如mafp 引用),所以我不得不在其他行之后直接添加几行:

    % for "hyperref", not needed without this or for a single list:
    \newcounter{enumdesc}
    \newcommand*{\theHenumdesci}{\theenumdesc\theenumdesci}
    \newcommand*{\theHenumdescii}{\theenumdesc\theenumdescii}
    \newcommand*{\theHenumdesciii}{\theenumdesc\theenumdesciii}
    \newcommand*{\theHenumdesciv}{\theenumdesc\theenumdesciv}
    
  • 现在部分内容或多或少改编自Marco 的回答– 定义一个新列表(此处enumdescript)并设置级别。记住,我说过,我需要 4 个。

    \newlist{enumdescript}{description}{4}
      %for a single list (without "hyperref" the "\phantomsection"s must be removed, too):
      \setlist[enumdescript,1]{before={\setcounter{enumdesci}{0}},style=nextline,leftmargin=0pt,topsep=0.5\baselineskip,%
        font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesci}\theenumdesci~}}
      \setlist[enumdescript,2]{style=nextline,leftmargin=0.75em,labelindent=0.75em,topsep=0.5\baselineskip,%
        font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdescii}\theenumdescii~}}
      \setlist[enumdescript,3]{style=nextline,leftmargin=1.5em,labelindent=1.5em,topsep=0.5\baselineskip,%
        font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesciii}\theenumdesciii~}}
      \setlist[enumdescript,4]{style=nextline,leftmargin=2.25em,labelindent=2.25em,topsep=0.5\baselineskip,%
        font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesciv}\theenumdesciv~}}
    

    注意before={\setcounter{enumdesci}{0}}在第一级,如果您开始一个新列表,它将重置计数器。我还\phantomsection从“hyperref”包中添加了一些 s,并替换了\stepcounters,以便使用\refstepcounters 进行引用。边距和标签缩进应根据所需缩进和使用的字体进行调整。可以为较短的项目更改样式nextline,有关详细信息,请参阅“enumitem”文档。

    对于hyperref多个列表,enumdesc必须添加增加计数器的命令。最好在before第一级定义的关键中完成此操作。因此,这变成

      %for more than one list and "hyperref":
      \setlist[enumdescript,1]{before={\stepcounter{enumdesc}\setcounter{enumdesci}{0}},%
        style=nextline,leftmargin=0pt,topsep=0.5\baselineskip,%
        font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesci}\theenumdesci~}}
    
  • 对于内部“目录”或概述(常见问题解答是更大文档的一部分),我使用新命令定​​义了附加列表:

    \newlist{edtoclist}{itemize}{4}
      \setlist[edtoclist,1]{label=\hspace*{1.25em},labelwidth=*,leftmargin=*}
      \setlist[edtoclist,2]{label=\hspace*{1.3em},labelwidth=*,leftmargin=*}
      \setlist[edtoclist,3]{label=\hspace*{2.1em},labelwidth=*,leftmargin=*}
      \setlist[edtoclist,4]{label=\hspace*{3.0em},labelwidth=*,leftmargin=*}
    \newcommand*{\edtitem}[2]{\item[\ref{#1}] \hyperref[#1]{#2}}
    

    当然,这里也必须是 4 个级别。\hspace*需要根据字体、计数器定义和实际级别深度进行手动调整。对于整个列表,必须根据enumdescript级别手动调整级别。此外,项目必须手动复制。

总计(这里只使用了 3 个列表级别):

\documentclass{article}

\usepackage[ngerman,english]{babel} % needed for "blindtext",
                                    % "english" is the active language

\usepackage [pangram,random]{blindtext} % for some filler text
\usepackage{lipsum,kantlipsum} % also for filler text

\usepackage{enumitem}

\usepackage[%
  colorlinks=true,%
  linkcolor=blue,%
]{hyperref}

%-----------------------%
% Further settings for "enumitem"
%-----------------------%
% Custom counters:
\newcounter{enumdesci}
\newcounter{enumdescii}[enumdesci]
\newcounter{enumdesciii}[enumdescii]
\newcounter{enumdesciv}[enumdesciii]
% Redefinition:
\renewcommand*{\theenumdesci}{\Roman{enumdesci}}
\renewcommand*{\theenumdescii}{\theenumdesci.\Alph{enumdescii}}
\renewcommand*{\theenumdesciii}{\theenumdescii.\arabic{enumdesciii}}
\renewcommand*{\theenumdesciv}{\theenumdesciii.\alph{enumdesciv}}
% For "hyperref":
\newcounter{enumdesc}
\newcommand*{\theHenumdesci}{\theenumdesc\theenumdesci}
\newcommand*{\theHenumdescii}{\theenumdesc\theenumdescii}
\newcommand*{\theHenumdesciii}{\theenumdesc\theenumdesciii}
\newcommand*{\theHenumdesciv}{\theenumdesc\theenumdesciv}
%
\newlist{enumdescript}{description}{4}
  \setlist[enumdescript,1]{before={\stepcounter{enumdesc}\setcounter{enumdesci}{0}},style=nextline,leftmargin=0pt,%
    font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesci}\theenumdesci~}}
  \setlist[enumdescript,2]{style=nextline,leftmargin=0.75em,labelindent=0.75em,%
    font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdescii}\theenumdescii~}}
  \setlist[enumdescript,3]{style=nextline,leftmargin=1.5em,labelindent=1.5em,%
    font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesciii}\theenumdesciii~}}
  \setlist[enumdescript,4]{style=nextline,leftmargin=2.25em,labelindent=2.25em,%
    font={\phantomsection\normalfont\normalsize\bfseries\refstepcounter{enumdesciv}\theenumdesciv~}}
%-----------------------%
% Definition of a new list for own "TOC":
\newlist{edtoclist}{itemize}{4}
  \setlist[edtoclist,1]{label=\hspace*{1.1em},labelwidth=*,leftmargin=*}
  \setlist[edtoclist,2]{label=\hspace*{1.37em},labelwidth=*,leftmargin=*}
  \setlist[edtoclist,3]{label=\hspace*{2.16em},labelwidth=*,leftmargin=*}
  \setlist[edtoclist,4]{label=\hspace*{2.94em},labelwidth=*,leftmargin=*}
\newcommand*{\edtitem}[2]{\item[\ref{#1}] \hyperref[#1]{#2}}
%-----------------------%

\begin{document}

\section*{Overview}

% first level
\begin{edtoclist}
  \edtitem{bltxt-xmpl}{``blindtext'' examples}
% second level
  \begin{edtoclist}
      \edtitem{bltxt-xmplen}{English}
% third level
        \begin{edtoclist}
          \edtitem{bltxt-xmplen1}{Example~1}
          \edtitem{bltxt-xmplen2}{Example~2}
        \end{edtoclist}
% second level
      \edtitem{bltxt-xmplde}{German}
% third level
        \begin{edtoclist}
          \edtitem{bltxt-xmplde1}{Beispiel~1}
          \edtitem{bltxt-xmplde2}{Beispiel~2}
        \end{edtoclist}
    \end{edtoclist}
% first level
  \edtitem{lkl-xmpl}{``lipsum'' and derived ``kantlipsum''}
% second level
    \begin{edtoclist}
      \edtitem{lips-xmpl}{``lipsum'' examples}
% third level
        \begin{edtoclist}
          \edtitem{lips-xmpl10}{Tenth section}
          \edtitem{lips-xmpl20}{Twentieth section}
        \end{edtoclist}
% second level
      \edtitem{klips-xmpl}{``kantlipsum'' examples}
% third level
        \begin{edtoclist}
          \edtitem{klips-xmpl15}{Fifteenth section}
          \edtitem{klips-xmpl30}{Thirtieth section}
        \end{edtoclist}
    \end{edtoclist}
\end{edtoclist}

%\newpage

\section*{Examples}

% first level
\begin{enumdescript}
  \item[``blindtext'' examples\label{bltxt-xmpl}]
    ~\\[-2\baselineskip]
% second level
    \begin{enumdescript}
      \item[English\label{bltxt-xmplen}]
        ~\\[-2\baselineskip]
% third level
        \begin{enumdescript}
          \item[Example~1:\label{bltxt-xmplen1}]
            \blindtext[1]
          \item[Example~2:\label{bltxt-xmplen2}]
            \blindtext[1]
        \end{enumdescript}
% second level
      \item[German\label{bltxt-xmplde}]
        ~\selectlanguage{ngerman}\\[-2\baselineskip]
% third level
        \begin{enumdescript}
          \item[Beispiel~1:\label{bltxt-xmplde1}]
            \blindtext[1]
          \item[Beispiel~2:\label{bltxt-xmplde2}]
            \blindtext[1]
        \end{enumdescript}
        \selectlanguage{english}
    \end{enumdescript}
% first level
  \item[``lipsum'' and derived ``kantlipsum''\label{lkl-xmpl}]
    ~\\[-2\baselineskip]
% second level
    \begin{enumdescript}
      \item[``lipsum'' examples\label{lips-xmpl}]
    ~\\[-2\baselineskip]
% third level
        \begin{enumdescript}
          \item[Tenth section\label{lips-xmpl10}]
            \lipsum[10]
          \item[Twentieth section\label{lips-xmpl20}]
            \lipsum[20]
        \end{enumdescript}
% second level
      \item[``kantlipsum'' examples\label{klips-xmpl}]
    ~\\[-2\baselineskip]
% third level
        \begin{enumdescript}
          \item[Fifteenth section\label{klips-xmpl15}]
            \kant[15]
          \item[Thirtieth section\label{klips-xmpl30}]
            \kant[30]
        \end{enumdescript}
    \end{enumdescript}
\end{enumdescript}

\end{document}

示例输出

答案3

您可以使用此enumerate包来实现此目的:

\documentclass{scrbook}

\usepackage{enumerate}

\begin{document}

\begin{enumerate}[a)]
   \item item one
   \item item two
\end{enumerate}

\end{document}

答案4

使用该enumitem包可以扩展enumerate环境,以便拥有类似描述的功能。与扩展环境的相反方法相比,description新方法enumdescript可以采用可选的标签格式化命令。

\documentclass{article}

\usepackage{enumitem}

\makeatletter
\newlist{enum@descript}{enumerate}{1}
\setlist[enum@descript]{label=\arabic*.}
\newenvironment{enumdescript}[1][]{
  \begin{enum@descript}[#1]
  \let\old@item\item
  \renewcommand{\item}[1][]{
    \old@item\ifx&##1&\else\textbf{##1}~\fi
    \@ifnextchar\par\@gobble\relax
  }
}{\end{enum@descript}}
\makeatother

\begin{document}

\begin{enumdescript}[label=\roman*)]
\item[first]\label{one}Text
\item [second] \label{two} Text
\item
[third]

\label{three} Text
\end{enumdescript}

\begin{enumdescript}[label=\{\alph*\}]
\item\label{four}Text
\item  \label{five} Text
\item

\label{six} Text
\end{enumdescript}
Items \ref{one}, \ref{two}, \ref{three}, \ref{four}, \ref{five}, and \ref{six}.
\end{document}

我还没有实现列表嵌套。

相关内容