是否可以将itemize
列表分成几列?(我确信可以,但我在这里找不到解决方案)
另外:如果列表达到一定的项目长度,是否可以自动将其拆分为多列?
例如,我想显示
item1
item2
item3
代替
item1 item2 item3
虽然这仍然会发生:
item1 item4
item2 item5
item3 item6
答案1
下面是一些执行自动列调整的代码,我使用了“提前清点并使用物品数量”帮我。
\documentclass{article}
\usepackage{etoolbox,refcount}
\usepackage{multicol}
\newcounter{countitems}
\newcounter{nextitemizecount}
\newcommand{\setupcountitems}{%
\stepcounter{nextitemizecount}%
\setcounter{countitems}{0}%
\preto\item{\stepcounter{countitems}}%
}
\makeatletter
\newcommand{\computecountitems}{%
\edef\@currentlabel{\number\c@countitems}%
\label{countitems@\number\numexpr\value{nextitemizecount}-1\relax}%
}
\newcommand{\nextitemizecount}{%
\getrefnumber{countitems@\number\c@nextitemizecount}%
}
\newcommand{\previtemizecount}{%
\getrefnumber{countitems@\number\numexpr\value{nextitemizecount}-1\relax}%
}
\makeatother
\newenvironment{AutoMultiColItemize}{%
\ifnumcomp{\nextitemizecount}{>}{3}{\begin{multicols}{2}}{}%
\setupcountitems\begin{itemize}}%
{\end{itemize}%
\unskip\computecountitems\ifnumcomp{\previtemizecount}{>}{3}{\end{multicols}}{}}
\begin{document}
\begin{itemize}
\item Here are two columns
\begin{AutoMultiColItemize}
\item Item 1
\item Item 2
\item Item 3
\item Item 4
\item Item 5
\item Item 6
\end{AutoMultiColItemize}
\item AutoMultiColItemize can be nested in an itemize
\item Or it does not have to be.
\item Normal itemize, like this one, are still single column.
\end{itemize}
Here is one column
\begin{AutoMultiColItemize}
\item Item 1
\item Item 2
\item Item 3
\end{AutoMultiColItemize}
\end{document}
答案2
因为你需要多个列,你应该使用包裹multicol
:
代码:
\documentclass{article}
\usepackage{multicol}
\begin{document}
Two columns:
\begin{multicols}{2}
\begin{itemize}
\item item 1
\item item 2
\item item 3
\item item 4
\item item 5
\item item 6
\end{itemize}
\end{multicols}
Three columns:
\begin{multicols}{3}
\begin{itemize}
\item item 1
\item item 2
\item item 3
\item item 4
\item item 5
\item item 6
\end{itemize}
\end{multicols}
\end{document}
答案3
使用multicol
。如果您的项目没有均匀地分成每列,请将其添加\item[\vspace{\fill}]
到列表末尾以对齐项目。
multicol
来自的包装解决方案阿博阿马尔如果您枚举的项目可以均匀地分成每一列,则效果很好。
但是,如果每列包含的项目数量不相等,则项目之间的间距可能会不一致。例如,将 7 个项目分成两列:
可以通过在列表末尾添加“空”项作为填充来轻松解决此问题。
\item[\vspace{\fill}]
这将生成以下对齐良好的多列枚举列表:
\documentclass[preview]{standalone}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
\begin{enumerate}
\item one \item two \item three \item four
\item five \item six \item seven \item[\vspace{\fill}]
\end{enumerate}
\end{multicols}
\end{document}
答案4
对于第一个问题,您可以使用tasks
以前作为软件包一部分的软件包来执行此操作exsheets
。如果您使用 MiKTeX,请注意它需要软件包cntformats
(来自同一作者),即不是(目前) 是 MiKTeX 的一部分。回答 Werner 的问题,它可以跨页。下面是其工作原理的一个示例:
\documentclass[twoside, a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[x11names]{xcolor}
\usepackage{fourier}
\usepackage[noheadfoot, nomarginpar, showframe]{geometry}
\usepackage{tasks}
\DeclareInstance{tasks}{myitemize}{default}
{
enumerate = false ,
label-width = 1.125em,
label-offset = 0.6em,
label-format = \bfseries\color{IndianRed3}
}
\settasks{style = myitemize, column-sep = 2em}%
\pagestyle{plain}%
\begin{document}
\begin{tasks}(3)
\task First item
\task A second item
\task A third one
\task A second series, item 1
\task Second series, item 2
\task Second series, item 3
\end{tasks}
\end{document}
另一个解决方案是使用shortlst
软件包,由于许可证原因,该软件包不属于任何发行版,因此您必须自行安装。我对其进行了修补,以便能够使用键选择列数nc=value
(默认为 3)和行间拉伸il=value
(默认为 1.33)。
此包的主要优点是,如果项目长度超过列宽,它将automatically
分布在两列(或更多列)上。或者,可以将项目放在宽度为列宽的 parbox 中。我引入了一个\paritem
命令,它将项目分布的列数作为可选参数。
\documentclass[twoside, a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[x11names]{xcolor}
\usepackage{fourier}
\usepackage[nohead, nomarginpar, showframe]{geometry}
\pagestyle{plain}%
\usepackage{ragged2e}
\usepackage{shortlst, setspace, xkeyval}
\makeatletter
\newcounter{ncol}
\define@key{lex}{nc}[3]{\setcounter{ncol}{#1}}%% 3 columns by default
\define@key{lex}{il}[1.33]{\def\@intln{#1}}% interlining![1]
\newenvironment{tabitemize}[1][]{%
\setkeys{lex}{nc,il,#1}
\settowidth{\labelwidth}{\quad\textbullet}
\setlength{\leftmargini}{\dimexpr\labelwidth+\labelsep\relax}%[1][3]
\setlength{\shortitemwidth}{\dimexpr\linewidth/\value{ncol}-\labelwidth-2\labelsep\relax}%
\renewcommand{\labelitemi}{\textcolor{Tomato3}{\bfseries\textbullet}}
\setstretch{\@intln}
\begin{shortitemize}}%
{\end{shortitemize}
}%
\newcommand\paritem[2][2]{\item \parbox[t]{\dimexpr#1\shortitemwidth + (2\labelsep + \labelwidth)*\numexpr#1-1\relax}{\setstretch{1}#2}}
\makeatother
\usepackage{lipsum}
\begin{document}
\vspace*{1 cm}
\begin{tabitemize}
\item First item
\item A second, much longer item
\item A third, short item
\paritem[2]{A second series, with a much longer item. \lipsum[2]}%
\item Second series, item 4\strut
\item Second series, third item, a much much longer item\strut
\item Second series, fourthr item\strut
\end{tabitemize}
\end{document}