LaTex 列表

LaTex 列表


本文介绍了排版和自定义 LaTeX 中各种类型的列表:

  • itemize创建项目符号(无序列)列表的环境
  • enumerate创建编号(有序)列表的环境
  • description创建描述列表的环境
    排版列表是一个很大的话题,因为 LaTeX 列表是非常可配置的,可以创建各种各样的列表类型和结构。我们将调查并演示一些可用于配置和自定义列表的方法。

基本列表示例

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命令采用方括号中的可选参数。您可以在itemizeenumerate环境中使用此功能来更改列表中各个条目的默认标签:

\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 个级别的深度。

嵌套enumerate列表:数字格式
\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}

在这里插入图片描述

嵌套itemize列表:项目符号样式

项目符号样式根据嵌套列表的深度而变化:

\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 参数。

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 非官方参考手册的列表部分中有所描述,因此我们不会在此处复制。

list使用环境创建自定义列表

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包修改和创建列表

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

要创建一个新的列表类型,enumitem请使用\newlist需要 3 个参数的命令:

\newlist{name}{list-type}{max-depth}
  • name:列表的名称,用作环境:
\begin{name}
...
\end{name}
  • list-type这必须是标准 LaTeX 列表类型之一:
enumerate
itemize
description
  • max-depth:此列表将嵌套的最大深度。注意对于超过 LaTeX 的默认嵌套限制 4 的列表,您还必须发出命令where是您打算使用的最大嵌套深度。请参阅律师名单示例以了解这一点。
  • \setlistdepth{integer}integer
    创建新列表后,您可以使用\setlist命令对其进行配置。

用于配置使用\setlist创建的自定义列表enumitem
在此示例中,我们将创建一个名为的新列表myitems,该列表基于enumerate. 我们将设置max-depth为 3:

\newlist{myitems}{enumerate}{3}

最低要求是使用\setlist命令为此自定义列表定义标签。对于基于枚举的列表,一种方法是使用enumitem包创建的计数器变量——这些计数器变量使用name您的列表:myitems在我们的示例中。

以下是我们如何在标签配置中使用相应的计数器变量:

  • myitemsi对于 1 级条目
  • myitemsii对于 2 级条目
  • myitemsiii对于 3 级条目
    如果我们有超过 3 个级别,则相应的计数器变量将被称为(级别 4)、(级别 5)等等,继续使用小写罗马数字。 myitemsiv myitemsv。
    除了标签之外,我们还将为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:<kern>(a), 1.1:<kern>(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}

在这里插入图片描述

使用enumitem包和 MetaPost自定义项目符号

以下示例仅适用于 LuaLaTeX,旨在提供一些可能性的建议——当然,用您喜欢的绘图应用程序/工具替换 MetaPost!

这些示例使用该包,还演示了可在 MetaPost 代码中使用的 luamplib可扩展命令,例如\the\directlua

示例 1:自动调整项目符号大小

此示例生成的项目符号点随着列表深度的增加而减小。


\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}

在这里插入图片描述

示例 2:时髦的自定义项目符号

这个例子的灵感来自于 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包的其他功能

如前所述,该enumitem软件包非常通用,并提供了许多用于使用和自定义列表的功能。例如,我们未涵盖的功能包括:

  • 引用列表条目
  • 控制enumerate清单编号:
  • 设置第一项的起始编号
  • 继续对不同enumerate列表进行编号
    还有很多!浏览tex.stackexchange 可以找到很多很好的例子来说明你可以通过什么来做 当然,阅读enumitem包文档。

PS:该文档从overleaf翻译,请查看 Lists

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值