我想在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 等方法可以避免这种情况。