我怎样才能在枚举中模拟手动设置的 OpenOffice 制表符?
- 右侧必须从统一点开始
- 左侧最右点和右侧最左点之间必须留有一定空间
- 多行项目必须在列之间保持垂直对齐(按第一行)
itemize
左缩进和垂直间距section
(奖励)应跨标签工作
适用于单行项目:
\begin{minipage}{0.28\textwidth}
\begin{itemize}
\item Item 1 left side
\item Item 2 left side
\end{itemize}
\end{minipage}
\hfill
\begin{minipage}{0.7\textwidth}
\begin{itemize}
\item Item 1 right side
\item Item 2 right side
\end{itemize}
\end{minipage}
对于多行项目,这种情况很快就会失效。随着项目内换行符数量的增加,垂直对齐将越来越不准确。
此外,需要大量的错误代码:同一行文本分布在两个块中,itemize
结构必须重复等。
不太有效的尝试灵感来自[1]:
\begin{tabular}{ll}
Item 1 left side & Item 1 right side \\
Item 2 left side & Item 2 right side \\
\end{tabular}
垂直间距(显然)是正常行距,而不是itemize
此处的适当间距。如果需要,项目符号必须按照 [1] 所示进行即兴发挥。
\begin{tabulary}{\textwidth}{PP}
\begin{itemize}
\item[] Item 1 left side & Item 1 right side \\
\item[] Item 2 left side & Item 2 right side \\
\end{itemize}
\end{tabulary}
引发一堆Package array Error
s 和Something's wrong
错误。
可能不会起作用的相关内容:
- [4]- 与我的第一个示例存在相同的问题(如果总体上代码较少的话)。
另外,我很确定我没有正确标记这个问题。请建议更多合适的标签。
答案1
listliketab
按照用户@Dan的建议使用包:
\usepackage{listliketab}
\storestyleof{itemize}
\begin{document}
\begin{listliketab}
\begin{tabular}{lp{11cm}}
\textbullet~ Item 1 left side & Item 1 right side \\
\textbullet~ Item 2 left side & Item 2 right side\newline with manual line break \\
\end{tabular}
\end{listliketab}
\end{document}
缺陷:
- 虽然
listliketab
声称可以模拟 指定的列表样式storestyleof
,但我还没有找到自动模拟枚举器(例如文本项目符号)的方法。必须使用 等手动添加它们\textbullet~
。如果要混合带有 和不带有 的行,则需要将它们放入额外的列中以保持对齐。 - 仅类型为 的列支持换行符
p
,这需要输入手动宽度。
为了克服第 2 点,我尝试使用包tabulary
而不是tabular
,但我无法让它与一起工作listliketab
:所有列都被挤压到页面左侧的一个小空间;只要listliketab
删除封闭的 -tags,它看起来很正常。
为了完整性,使用有缺陷的示例tabulary
:
\usepackage{listliketab}
\usepackage{tabulary}
\storestyleof{itemize}
\begin{document}
\begin{listliketab}
\begin{tabulary}{\textwidth}{LL}
\textbullet~ Item 1 left side & Item 1 right side \\
\textbullet~ Item 2 left side & Item 2 right side\newline with manual line break \\
\end{tabulary}
\end{listliketab}
\end{document}
答案2
一个不寻常的解决方案...看看它是否可以接受:
编辑:
关于您的评论,我重新设计了 MWE。现在定义了两个专用于itemize
列表的类型列:
- 第一个,名为
i
,基于p{<width>}
列的类型。因此,您可以根据p{<width>}
列类型确定其宽度。 - 第二个,名为 I,基于
X
列类型。其宽度由内部计算tabularx
,无法手动更改
通过此更改,您可以在表格中使用两列类型,tabularx
或者仅在表格i
中键入tabular
。新的完整 MWE(通过上表图像获得)是:
\documentclass{article}
\usepackage{calc}
\usepackage{tabularx}
\makeatletter
\newcolumntype{i}[1]{>{\minipage[t]{\linewidth}%
\arraybackslash%
\setlength{\leftmargini}%
{\widthof{\labelitemi}+\labelsep}% less list indent
\itemize
\addtolength{\rightskip}{0pt plus 10pt}% for raggedright
\setlength{\itemsep}{-\parsep}%
\setlength\labelsep{1ex}%
\setlength{\listparindent}{3em}}%
p{#1}<{\@finalstrut\@arstrutbox\enditemize\endminipage}%
}
%%--------------------------------------------------------------%
\newcolumntype{I}{>{\minipage[t]{\linewidth}%
\arraybackslash%
\setlength{\leftmargini}%
{\widthof{\labelitemi}+\labelsep}% less list indent
\itemize%
\addtolength{\rightskip}{0pt + 10pt}% for raggedright
\setlength{\itemsep}{-\parsep}%
\setlength\labelsep{1ex}%
\setlength{\listparindent}{3em}}%
X<{\@finalstrut\@arstrutbox\enditemize\endminipage}%
}
\makeatother
\renewcommand\arraystretch{1.5}
\usepackage{geometry}
\usepackage{blindtext}
\begin{document}
\noindent%
\begin{tabularx}{\textwidth}{ i{0.25\textwidth} I}
\item Item 1 left side
& \item Item 1 right side \\
\item Item 2 left side
& \item \blindtext \\
\item Item 3 left side
\item Item 4 left side
\item Item 5 left side
& \item Item 3 right side (only one in the cell) \\
\item Item 6 left side
& \item Item 6 right side
\end{tabularx}
\end{document}
上述解决方案部分基于 Donald Arseneau 的贡献。我在不同的项目报告中广泛使用它,它为我提供了很好的服务(在我看来,它使用起来简单干净,开销很小),但是如果存在更优雅的解决方案,我很乐意学习(具有相同或更好的功能:项目格式无需手动干预)。
编辑2:showframe package for showing page layout and deleted
在两列中 添加了ragedright` 跳过选项:
\documentclass{article}
\usepackage{calc}
\usepackage{tabularx}
\makeatletter
\newcolumntype{i}[1]{>{\minipage[t]{\linewidth}%
\arraybackslash%
\setlength{\leftmargini}%
{\widthof{\labelitemi}+1.5\labelsep}% now changed/increased for 0.5 \labelsep
\itemize
% \addtolength{\rightskip}{0pt + 10pt}% <-- now deleted
\setlength{\itemsep}{-\parsep}%
\setlength\labelsep{1ex}%
\setlength{\listparindent}{3em}}%
p{#1}<{\@finalstrut\@arstrutbox\enditemize\endminipage}%
}
%%--------------------------------------------------------------%
\newcolumntype{I}{>{\minipage[t]{\linewidth}%
\arraybackslash%
\setlength{\leftmargini}%
{\widthof{\labelitemi}+1.5\labelsep}% now changed/increased for 0.5 \labelsep
\itemize%
% \addtolength{\rightskip}{0pt + 10pt}% <-- now deleted
\setlength{\itemsep}{-\parsep}%
\setlength\labelsep{1ex}%
\setlength{\listparindent}{3em}}%
X<{\@finalstrut\@arstrutbox\enditemize\endminipage}%
}
\makeatother
\renewcommand\arraystretch{1.5}
\usepackage{geometry}
\usepackage{blindtext}
%--------------------------------------- for show page layout --%
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\begin{document}
\noindent%
\begin{tabularx}{\textwidth}{@{} i{0.2\textwidth} I @{}}% <-- changed width of the first column
\item Item 1 left side
& \item Item 1 right side \\
\item Item 2 left side
& \item \blindtext \\
\item Item 3 left side
\item Item 4 left side
\item Item 5 left side
& \item Item 3 right side (only one item in the cell) \\
\item Item 6 left side
& \item Item 4 right side
\end{tabularx}
\end{document}
答案3
可以使用tasks
包来实现这一点。这样就无法设置列的宽度,但至少可以通过选择列数来获得一些灵活性。我们首先定义一个新的列表类型
\NewTasks[style=itemize]{itemlist}[\item]
然后像这样使用它:
\begin{itemlist}(2)% <<< specify number of columns here
\item Item 1 left side
\item* Item 1 right side
\item Item 2 left side
\item* \blindtext
\item Item 3 left side
\item* Item 3 right side (only one item in the cell)
\item* Item 4 left side
\item* Item 5 left side
\item Item 6 left side
\item* Item 6 right side
\end{itemlist}
带星号的版本表示\item
:使用该行的其余部分。这意味着各个项目跨越剩余的列数。以下演示了根据列数(分别为 2、3 或 4)的输出:
\documentclass{article}
\usepackage{tasks,blindtext,showframe}
\NewTasks[style=itemize]{itemlist}[\item]
\begin{document}
\begin{itemlist}(2)
\item Item 1 left side
\item* Item 1 right side
\item Item 2 left side
\item* \blindtext
\item Item 3 left side
\item* Item 3 right side (only one item in the cell)
\item* Item 4 left side
\item* Item 5 left side
\item Item 6 left side
\item* Item 6 right side
\end{itemlist}
\newpage
\begin{itemlist}(3)
\item Item 1 left side
\item* Item 1 right side
\item Item 2 left side
\item* \blindtext
\item Item 3 left side
\item* Item 3 right side (only one item in the cell)
\item* Item 4 left side
\item* Item 5 left side
\item Item 6 left side
\item* Item 6 right side
\end{itemlist}
\newpage
\begin{itemlist}(4)
\item Item 1 left side
\item* Item 1 right side
\item Item 2 left side
\item* \blindtext
\item Item 3 left side
\item* Item 3 right side (only one item in the cell)
\item* Item 4 left side
\item* Item 5 left side
\item Item 6 left side
\item* Item 6 right side
\end{itemlist}
\end{document}