将 itemize 拆分为多个列

将 itemize 拆分为多个列

是否可以将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} 

在此处输入图片描述

相关内容