以转置方式格式化多列列表

以转置方式格式化多列列表

希望这很简单:我有一个相对较长的列表,其中每个列表项包含很少的文本。例如:

* A
* b
* C
*d
*e
* F

我希望将其格式化如下:

*一个*b*c
*d*e*f

在乳胶中做到这一点的最佳方法是什么?

我已经看到许多关于以其他方式执行此操作的问题: 将 itemize 拆分为多个列或者https://stackoverflow.com/questions/1398127/breaking-a-list-into-multiple-columns-in-latex。但我不知道如何先从左到右再向下扩展我的列表,而不是先向下再从左到右。

答案1

这里有两种可能性:使用tasks,如@Jhor 的评论中所述,以及shortlst由于许可原因不在 TeX Live 或 MiKTeX 中的包,您必须从 CTAN 下载并自行安装(在本地 TeXMF 根目录中)。我修补了后一个包,以便环境可以通过一组键接受可选参数,以选择列数(默认为 3)和内衬(默认为 1.5)。

一个区别是,对于内容较长的项目,tasks会将内容包装在列中(并且您必须通过命令要求它分布在几列上\task*),而shortlst这是自动执行的,我必须定义一个\paritem命令将其包装在其列中(或几列,但带有可选参数的固定数量的列)。

如果您想对枚举列表执行相同操作,还有另外两个包:tablistsmultenum(后者的语法不同 - 它是用tabular环境定义的)。包也有可能listliketab

例子:

\documentclass[12pt]{article}%
\usepackage[utf8]{inputenc}
\usepackage{showframe}
\renewcommand{\ShowFrameLinethickness}{0.3pt}

\usepackage{tasks}

\usepackage{shortlst,setspace,xkeyval, tasks}%

\makeatletter
\newcounter{ncol}
\define@key{lex}{nc}[3]{\setcounter{ncol}{#1}}%% 3 columns by default
\define@key{lex}{il}[1.5]{\def\@intln{#1}}% interlining![1]
\newenvironment{tabitemise}[1][]{%
\setkeys{lex}{nc,il,#1}
\settowidth{\labelwidth}{\mbox{\textbullet}}
\setlength{\leftmargini}{\dimexpr\labelwidth+\labelsep\relax}%[1][3]
\setlength{\shortitemwidth}{\dimexpr\linewidth/\value{ncol}-\labelwidth-2\labelsep\relax}%
\renewcommand{\labelenumi}{(\alph{enumi})}
\setstretch{\@intln}
\begin{shortitemize}}%
{\end{shortitemize}
 }%
\newcommand\paritem[2][1]{\item \parbox[t]{#1\shortitemwidth}{\setstretch{1}#2\medskip}}%%for a longer item content, 
\makeatother

\begin{document}

\begin{tabitemise}[nc = 3]
\item a
\item b
\item c
\paritem{A somewhat longer contents here}
\item This one has to spread over two columns 
\item d
\item e
\item f
\end{tabitemise}
\bigskip

\begin{tasks}[style=itemize, label-offset=0.em](3)%
\task a
\task b
\task c
\task A somewhat longer contents here
\task* This one has to spread over two columns
\task d 
\task e
\task f
\end{tasks}

\end{document} 

在此处输入图片描述

相关内容