将项目符号添加到描述列表

将项目符号添加到描述列表

我想在description列表中添加一个项目符号。

\begin{description}
  \item[Term] Description
\end{description}

基本上我想要的渲染效果如下所示:

\begin{itemize}
  \item \textbf{Term} Description
\end{itemize}

使用 itemize 黑客感觉不对。有没有更好的解决方案?

答案1

\documentclass{article}
\let\Item\item
\newcommand\SpecialItem{\renewcommand\item[1][]{\Item[\textbullet~\bfseries##1]}}
\renewcommand\enddescription{\endlist\global\let\item\Item}
\begin{document}
\SpecialItem
\begin{description}
  \item[Text] more text
  \item[and some] more text
  \item[] empty
\end{description}

\begin{description}
  \item[Text] more text
  \item[and some] more text
  \item[] empty
\end{description}

\end{document}

如果不设置\SpecialItem它将是默认列表

答案2

enumitem包提到了以下解决方案

\documentclass{article}
\usepackage{enumitem}
\newcommand\litem[1]{\item{\bfseries #1,\enspace}}
\begin{document}
 \begin{itemize}[label=\textbullet]
  \litem{Text} more text
 \end{itemize}

\end{document}

显然这并不比你已经做的更好……

答案3

使用enumitem我们可以简化问题

\newenvironment{mydescription}
  {\description[before=\let\makelabel\bulletbfseriesmakelabel]}
  {\enddescription}
\newcommand\bulletbfseriesdescriptionlabel[1]{\textmd{\textbullet}~\textbf{#1}}

在可选参数中\description可以添加其他自定义项。

一个更复杂的方法,可以确保始终使用原始enumitem提供的\makelabel内容

\newcommand{\changemakelabel}{%
  \let\enumitemmakelabel\makelabel
  \renewcommand\makelabel[1]{%
    \enumitemmakelabel{\normalfont\textbullet~\textbf{##1}}%
  }%
}

进而

\newenvironment{mydescription}
  {\description[before=\changemakelabel]}
  {\enddescription}

一种可能更简单的技术是改变\descriptionlabel命令;方法如下:

\documentclass{article}
\usepackage{enumitem}

\newcommand{\bulletdescriptionlabel}[1]{%
  \hspace\labelsep
  \normalfont
  \textbullet\ %
  \bfseries #1}

\newlist{mydescription}{description}{1}
\setlist[mydescription]
  {before=\let\makelabel\bulletdescriptionlabel}

\begin{document}
\begin{mydescription}
\item[title] test2
\end{mydescription}
\end{document}

人们可能只想以\descriptionlabel一种更抽象的方式修补当前命令,而不必查找的定义\descriptionlabel

\usepackage{etoolbox}
\let\bulletdescriptionlabel\descriptionlabel
\patchcmd\bulletdescriptionlabel
  {#1}
  {{\normalfont\textbullet\ }#1}
  {}{}

也就是说,获取 的副本\descriptionlabel并对其进行修改,以便它{\normalfont\textbullet\ }在参数( 的可选参数\item)之前排版。

答案4

这是一个与 paralist 包配合使用的简单方法,例如,如果您想要一个紧凑的列表(很少的垂直空间)。这实际上是对 egreg 的答案的轻微修改。

\usepackage{paralist}

\newcommand{\bulletdescriptionlabel}[1]{%
\hspace\labelsep
\normalfont
\textbullet\ %
\bfseries #1}

\newenvironment{compactitemdesc}
{\begin{compactdesc}
  \let\makelabel\bulletdescriptionlabel
}
{\end{compactdesc}}

如果您有子列表,这种方法比 Herbert 的方法效果更好:如果您的新列表类型中还有其他列表,那么其项目将照常工作。在 Herbert 的方法(重新定义 \item)中,子列表的所有 \item 命令都将受到影响。使用 egreg 建议的 \makelabel 等方法可以避免这种情况。

相关内容