itemize
创建项目符号(无序列)列表的环境enumerate
创建编号(有序)列表的环境description
创建描述列表的环境itemize
项目符号(无序列表)列表的环境无序(项目符号)列表由itemize
环境生成,其中每个列表条目都使用\item
命令开始,该命令也会生成项目符号。
Lists are easy to create:
\begin{itemize}
\item List entries start with the \verb|\item| command.
\item Individual entries are indicated with a black dot, a so-called bullet.
\item The text in the entries may be of any length.
\end{itemize}
enumerate
编号(有序)列表的环境编号(有序)列表具有相同的语法,但使用enumerate
环境:每个条目必须以控制序列开头\item
,这将自动生成数字来标记项目。每次使用enumerate
环境时,这些数字从 1 开始——请注意,默认情况下,LaTeX 编号行为可以通过enumitem
包更改/控制。
Numbered (ordered) lists are easy to create:
\begin{enumerate}
\item Items are numbered automatically.
\item The numbers start at 1 with each use of the \texttt{enumerate} environment.
\item Another entry in the list
\end{enumerate}
description
环境以下示例演示了description
环境。\item
每个条目的(可选)标签在命令 后用方括号括起来:
\item[label text] Text of your description goes here...
我们还使用该blindtext
包在第三个条目中生成一些虚拟英文文本。要获得英语,我们需要使用babel
带有语言选项的包[english]
:
\usepackage [english] { babel }
这是示例:
\usepackage[english]{babel} % To obtain English text with the blindtext package
\usepackage{blindtext}
\begin{document}
\begin{description}
\item This is an entry \textit{without} a label.
\item[Something short] A short one-line description.
\item[Something long] A much longer description. \blindtext[1]
\end{description}
\end{document}
如description
环境示例所示,该\item
命令采用方括号中的可选参数。您可以在itemize
和enumerate
环境中使用此功能来更改列表中各个条目的默认标签:
\item[label text] Text of your entry goes here...
将label text用于生成此条目的标签。
\usepackage{amssymb}% to access $\blacksquare$
\begin{document}
Change the labels using \verb|\item[label text]| in an \texttt{itemize} environment
\begin{itemize}
\item This is my first point
\item Another point I want to make
\item[!] A point to exclaim something!
\item[$\blacksquare$] Make the point fair and square.
\item[NOTE] This entry has no bullet
\item[] A blank label?
\end{itemize}
\vspace{10pt}
Change the labels using \verb|\item[label text]| in an \texttt{enumerate} environment
\begin{enumerate}
\item This is my first point
\item Another point I want to make
\item[!] A point to exclaim something!
\item[$\blacksquare$] Make the point fair and square.
\item[NOTE] This entry has no bullet
\item[] A blank label?
\end{enumerate}
\end{document}
在 LaTeX 中,您可以在另一个列表中插入一个列表。上述列表类型可以相互包含,可以是混合的,也可以是一种类型,深度为 4 级。
\usepackage{amssymb}% to access $\blacksquare$
\begin{document}
Change the labels using \verb|\item[label text]| in an \texttt{itemize} environment
\begin{itemize}
\item This is my first point
\item Another point I want to make
\item[!] A point to exclaim something!
\item[$\blacksquare$] Make the point fair and square.
\item[NOTE] This entry has no bullet
\item[] A blank label?
\end{itemize}
\vspace{10pt}
Change the labels using \verb|\item[label text]| in an \texttt{enumerate} environment
\begin{enumerate}
\item This is my first point
\item Another point I want to make
\item[!] A point to exclaim something!
\item[$\blacksquare$] Make the point fair and square.
\item[NOTE] This entry has no bullet
\item[] A blank label?
\end{enumerate}
嵌套列表条目的标签样式根据其在列表中的深度而变化。对于嵌套itemize
列表,项目符号类型更改;enumerate
列出数字格式随着输入深度的增加而变化。两者都限制在 4 个级别的深度。
\begin{enumerate}
\item First level item
\item First level item
\begin{enumerate}
\item Second level item
\item Second level item
\begin{enumerate}
\item Third level item
\item Third level item
\begin{enumerate}
\item Fourth level item
\item Fourth level item
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{enumerate}
项目符号样式根据嵌套列表的深度而变化:
\begin{itemize}
\item First level item
\item First level item
\begin{itemize}
\item Second level item
\item Second level item
\begin{itemize}
\item Third level item
\item Third level item
\begin{itemize}
\item Fourth level item
\item Fourth level item
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
LaTeX 的列表是高度可配置的,为创建许多不同类型的自定义列表提供了充足的空间。您可以直接修改 LaTeX 的标准列表类型,或者最好使用高度通用的enumitem
包来为您完成。
CTAN 托管了许多与列表相关的包,如果您有特定的定制要求,可能值得研究。此外,tex.stackexchange
提供了大量与列表相关的问题以及提供有用见解和很好示例的答案!
我们将从一些修改列表标签的示例开始,然后继续自定义列表布局。
首先,我们展示了如何在不使用enumitem
包的情况下更改列表标签。
可以使用enumitem
包或直接修改标准列表来生成自定义列表。在这里,我们将总结一些您可能需要注意的标准 LaTeX 命令、计数器变量和列表参数。
itemize
下表显示了用于在和enumeratelist
环境 的每个级别生成标签的 LaTeX 命令:
等级 | enumerate标签命令 | itemize标签命令 |
---|---|---|
1级 | \labelenumi | \labelitemi |
2级 | \labelenumii | \labelitemii |
3级 | \labelenumiii | \labelitemiii |
4级 | \labelenumiv | \labelitemiv |
list 环境还使用enumerate四个计数器变量来跟踪每个级别的当前标签值:
等级 | enumerate计数器变量 |
---|---|
1级 | enumi |
2级 | enumii |
3级 | enumiii |
4级 | enumiv |
\renewcommand
您可以通过使用重新定义标签生成命令来配置 LaTeX 的标准标签,并且对于enumerate
环境,您还可以使用适当的计数器变量。
enumitem
下面是一些不使用包 就可以做到这一点的例子。
\documentclass{article}
\begin{document}
\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}}
\renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}}
\renewcommand{\labelenumiv}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.\arabic{enumiv}}
\begin{enumerate}
\item One
\item Two
\item Three
\begin{enumerate}
\item Three point one
\begin{enumerate}
\item Three point one, point one
\begin{enumerate}
\item Three point one, point one, point one
\item Three point one, point one, point two
\end{enumerate}
\end{enumerate}
\end{enumerate}
\item Four
\item Five
\end{enumerate}
\end{document}
在前面的示例中,该命令\arabic
用于排版各种标签计数器变量的当前值。请注意,“阿拉伯数字”和命令的使用\arabic
是指数字 0 到 9.
通常,可以使用以下 5 个命令之一以各种格式打印 计数器变量:
\arabic{counter variable}
\roman{counter variable}
\Roman{counter variable}
\Alph{counter variable}
\alph{counter variable}
例如:
\documentclass{article}
\begin{document}
\begin{verbatim}
\newcounter{foo}
\setcounter{foo}{5}
\end{verbatim}
\newcounter{foo}
\setcounter{foo}{5}
\begin{itemize}
\item \verb|\arabic{foo}| produces \arabic{foo}
\item \verb|\roman{foo}| produces \roman{foo}
\item \verb|\Roman{foo}| produces \Roman{foo}
\item \verb|\Alph{foo}| produces \Alph{foo}
\item \verb|\alph{foo}| produces \alph{foo}
\end{itemize}
\end{document}
此示例使用 OpenType 彩色字体排版表情符号,因此它只能在 LuaLaTeX 中使用。有关排版表情符号的更多信息, 请参阅背页文章支持在 LaTeX 中使用彩色表情符号字体的技术概述。
虽然这只是一个有趣的示例,但它使用 LuaLaTeX 演示了自定义所有四个标签生成命令,并使用标签计数器变量创建一些不寻常的标签。
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\newfontfamily\emojifont[Renderer=Harfbuzz,SizeFeatures={Size=6}]{NotoColorEmoji.ttf}
\newcount\duckcount
\newcount\eggcount
\newcount\chickcount
\def\duck#1{%
\duckcount=\value{#1}%
\loop{\emojifont\Uchar"1F986}%
\advance\duckcount by -1
\unless\ifnum\duckcount=0
\repeat}
\def\duckegg#1{%
\eggcount=\value{#1}%
\loop{\emojifont\Uchar"1F95A}%
\advance\eggcount by -1
\unless\ifnum\eggcount=0
\repeat}
\def\duckchick#1{%
\chickcount=\value{#1}%
\loop{\emojifont\Uchar"1F424}%
\advance\chickcount by -1
\unless\ifnum\chickcount=0
\repeat}
\renewcommand{\labelenumi}{\duck{enumi}}
\renewcommand{\labelenumii}{\duck{enumi}.\duckegg{enumii}}
\renewcommand{\labelenumiii}{\duck{enumi}.\duckegg{enumii}.\duckegg{enumiii}}
\renewcommand{\labelenumiv}{\duck{enumi}.\duckegg{enumii}.\duckegg{enumiii}.\duckchick{enumiv}}
\begin{enumerate}
\item A duck
\item More ducks
\item A flurry of ducks
\begin{enumerate}
\item Ducks and eggs
\begin{enumerate}
\item Do I see...
\item Ducks and pre-ducks
\begin{enumerate}
\item Awww...
\item So cute!
\end{enumerate}
\end{enumerate}
\end{enumerate}
\item Back to ducks
\item Again
\end{enumerate}
\end{document}
除了自定义标签之外,还可以修改列表间距和布局,但首先我们需要知道决定列表排版和布局的各种 LaTeX 参数。
您可以使用layouts
包生成显示 LaTeX 列表参数的图表:
\documentclass{article}
\usepackage{layouts}
\begin{document}
\begin{figure}
\listdiagram
\caption{The \LaTeX{} parameters which define typesetting and layout of lists.}
\end{figure}
\end{document}
这些参数的含义在 LaTeX2e 非官方参考手册的列表部分中有所描述,因此我们不会在此处复制。
LaTeX 提供了一个通用list环境,它提供了一个框架来创建你自己的列表类型。使用上图中包含的信息,以下示例是 LaTeX2e 非官方参考手册列表部分中包含的示例的略微修改版本。
\documentclass{article}
\begin{document}
\newcounter{boxlblcounter}
\newcommand{\makeboxlabel}[1]{\fbox{#1.}\hfill}% \hfill fills the label box
\newenvironment{boxlabel}
{\begin{list}
{\arabic{boxlblcounter}}
{\usecounter{boxlblcounter}
\setlength{\labelwidth}{3em}
\setlength{\labelsep}{0em}
\setlength{\itemsep}{2pt}
\setlength{\leftmargin}{1.5cm}
\setlength{\rightmargin}{2cm}
\setlength{\itemindent}{0em}
\let\makelabel=\makeboxlabel
}
}
{\end{list}}
\newcommand{\randomtext}{Hello, here is some text without a meaning. Hello, here is some text without a meaning. Hello, here is some text without a meaning.}
\noindent\randomtext
\begin{boxlabel}
\item \randomtext
\item \randomtext
\item \randomtext
\end{boxlabel}
\end{document}
该enumitem
软件包是修改标准 LaTeX 列表或创建您自己的自定义列表格式的推荐方法。enumitem
提供了丰富的功能,因此我们无法涵盖所有功能,但我们可以提供一些基本示例来帮助您入门。强烈建议任何希望更深入地探索这个多功能包的人浏览 tex.stackexchange
以获取与包相关的问题、答案(和示例)enumitem
,并阅读包文档。
enumitem
包选项shortlabels
提供enumitem
了一个可选的配置参数shortlabels
,您可以通过
\usepackage[shortlabels]{enumitem}
该shortlabels选项模仿enumerate包的行为,为定义枚举环境的编号方案提供了一种简洁的方法。有关详细信息,请参阅enumerate软件包文档。
参考LaTeX 参数图,我们可以enumitem轻松自定义一个标准的 LaTeX 列表,例如itemize:
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\newcommand{\randomtext}{Hello, here is some text without a meaning. Hello, here is some text without a meaning.}
\section*{Using LaTeX's default settings for \texttt{itemize}}
\randomtext
\begin{itemize}
\item \randomtext
\begin{itemize}
\item \randomtext
\begin{itemize}
\item \randomtext
\end{itemize}
\item \randomtext
\end{itemize}
\item \randomtext
\end{itemize}
\section*{Using a custom \texttt{itemize} via \texttt{enumitem}}
\subsection*{Note the effect of left and right margin settings}
\randomtext
\begin{itemize}[leftmargin=30pt, rightmargin=2cm]
\item \randomtext
\begin{itemize}
\item \randomtext
\begin{itemize}
\item \randomtext
\end{itemize}
\item \randomtext
\end{itemize}
\item \randomtext
\end{itemize}
\end{document}
要创建一个新的列表类型,enumitem请使用\newlist需要 3 个参数的命令:
\newlist{name}{list-type}{max-depth}
\begin{name}
...
\end{name}
enumerate
itemize
description
\setlistdepth{integer}integer
\setlist
命令对其进行配置。用于配置使用\setlist
创建的自定义列表enumitem
在此示例中,我们将创建一个名为的新列表myitems
,该列表基于enumerate. 我们将设置max-depth为 3:
\newlist{myitems}{enumerate}{3}
最低要求是使用\setlist
命令为此自定义列表定义标签。对于基于枚举的列表,一种方法是使用enumitem
包创建的计数器变量——这些计数器变量使用name
您的列表:myitems
在我们的示例中。
以下是我们如何在标签配置中使用相应的计数器变量:
leftmarginand
设置一些值rightmargin
(参见LaTeX 参数图)。\documentclass{article}
\usepackage{enumitem}
\begin{document}
\newcommand{\randomtext}{Hello, here is some text without a meaning. Hello, here is some text without a meaning.}
\newcommand{\shortrandomtext}{Hello, here is some text.}
% Create a custom list based on enumerate
% It is called "myitems"
% We'll create a list that is 3 levels deep
\newlist{myitems}{enumerate}{3}
% Configure the behaviour of level 1 entries
% NOTE: we use the list counter "myitemsi"
\setlist[myitems, 1]
{label=\arabic{myitemsi}., %1., 2., 3., ...
leftmargin=\parindent,
rightmargin=10pt
}
% Configure the behaviour of level 2 entries
% NOTE: we use the list counter "myitemsii"
\setlist[myitems, 2]
{label=\arabic{myitemsi}.\arabic{myitemsii}, %1.1, 1.2, 1.3...
leftmargin=15pt,
rightmargin=15pt}
% Configure the behaviour of level 3 entries
% NOTE: we use the list counter "myitemsiii"
\setlist[myitems, 3]
% Use a label of 1.1:(a), 1.1:(b) etc
{label=\arabic{myitemsi}.\arabic{myitemsii}:\kern1.5pt(\alph{myitemsiii}),
leftmargin=30pt,
rightmargin=30pt}
\randomtext
\begin{myitems}
\item \randomtext
\begin{myitems}
\item \randomtext
\begin{myitems}
\item \randomtext
\item \randomtext
\end{myitems}
\item \shortrandomtext
\item \shortrandomtext
\end{myitems}
\item \randomtext
\end{myitems}
\end{document}
该enumitem
包允许您创建可以嵌套到任意深度的列表,从而消除了 LaTeX 的 4 限制。任何准备具有复杂(深度嵌套)条款结构的合同的人都可能会从中受益,尽管嵌套代码确实看起来有点吓人…
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\newlist{contract}{enumerate}{10}
\setlist[contract]{label*=\arabic*.}
\setlistdepth{10}
\section*{Custom list nested to 10 levels deep!}
\begin{contract}
\item Level 1
\begin{contract}
\item Level 2
\begin{contract}
\item Level 3
\begin{contract}
\item Level 4
\begin{contract}
\item Level 5
\begin{contract}
\item Level 6
\begin{contract}
\item Level 7
\begin{contract}
\item Level 8
\begin{contract}
\item Level 9
\begin{contract}
\item Level 10
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{contract}
\end{document}
以下示例仅适用于 LuaLaTeX,旨在提供一些可能性的建议——当然,用您喜欢的绘图应用程序/工具替换 MetaPost!
这些示例使用该包,还演示了可在 MetaPost
代码中使用的 luamplib
可扩展命令,例如\the
和\directlua
此示例生成的项目符号点随着列表深度的增加而减小。
\documentclass{article}
\usepackage{luamplib}
\usepackage{enumitem}
\everymplib{beginfig(0);}
\everyendmplib{endfig;}
\begin{document}
This list configuration example uses MetaPost code that contains Lua code via \verb|\directlua|. Bullets are created by MetaPost code, size is calculated from the depth of the entry.
% It is convenient to use \let\mpdepth\@listdepth: makes it
% easier to use in MetaPost code
\catcode`@=11
\let\mpdepth\@listdepth
\catcode`@=12
\newcommand{\mpbullet}{%
\begin{mplibcode}%
draw (0,0)..(0,-\directlua{tex.print(\the\mpdepth/2)}) withpen pencircle scaled 2pt withcolor white;
drawdot(0,0) withpen pencircle scaled \directlua{tex.print(5/math.sqrt(\the\mpdepth))}bp;
\end{mplibcode}}
% Declare a new itemize-based list via enumitem
\newlist{myEnumerate}{itemize}{6}
% The nosep option removes all vertical spacing
% the label=\protect\mpbullet causes all bullets to be
% drawn by a macro that uses MetaPost code. \protect
% is required as noted in the enumitem manual
\setlist[myEnumerate]{nosep,label=\protect\mpbullet}
\setlistdepth{6}
\begin{myEnumerate}
\item Level 1
\begin{myEnumerate}
\item Level 2
\begin{myEnumerate}
\item Level 3
\begin{myEnumerate}
\item Level 4
\begin{myEnumerate}
\item Level 5
\begin{myEnumerate}
\item Level 6
\end{myEnumerate}
\end{myEnumerate}
\end{myEnumerate}
\end{myEnumerate}
\end{myEnumerate}
\end{myEnumerate}
\end{document}
这个例子的灵感来自于 tex.stackexchange 上的一个例子,Overleaf已经对其进行了修改,以使用 MetaPost 代码创建自定义项目符号。
\documentclass{article}
\usepackage{enumitem}
\usepackage{luamplib}
\everymplib{beginfig(0);}
\everyendmplib{endfig;}
\begin{document}
\newcommand{\mpyingyang}{%
\lower1.5pt\hbox{\begin{mplibcode}%
path p;
p:=(-1,0)..(0,-1)..(1,0);
fill (p{up}..{down}(0,0){down}..{up}cycle) scaled 0.15cm;
draw (p..(0,1)..cycle) scaled 0.15cm ;
\end{mplibcode}}%
}%
\newcommand{\mpdot}{%
\lower1.5pt\hbox{\begin{mplibcode}%
drawdot(0,0) withpen pencircle scaled 2bp;
draw fullcircle scaled 0.2cm;
draw fullcircle scaled 0.3cm;
\end{mplibcode}}%
}%
\newcommand{\mpsquare}[3]{%
\lower#1pt\hbox{\begin{mplibcode}%
draw unitsquare rotated #3 scaled #2pt;
\end{mplibcode}%
}}%
\newlist{todolist}{itemize}{2}
\begin{itemize}
\item Start thinking about what we hope to achieve
\begin{todolist}
\item[\mpdot] Identify objectives
\item[\mpyingyang] Balance environmental impact
\item[\mpsquare{0}{5}{0}] Implement plans
\begin{todolist}
\item[\mpsquare{-0.5}{4}{0}] Stage 1 plans
\item[\mpsquare{-0.5}{4}{-20}] Stage 2 plans
\item[\mpsquare{-0.5}{4}{-40}] Stage 3 plans
\item[\mpsquare{-0.5}{4}{-60}] Stage 4 plans
\end{todolist}
\end{todolist}
\end{itemize}
\end{document}
如前所述,该enumitem软件包非常通用,并提供了许多用于使用和自定义列表的功能。例如,我们未涵盖的功能包括:
PS:该文档从overleaf翻译,请查看 Lists