将项目内容拆分为两列

将项目内容拆分为两列

我怎样才能在枚举中模拟手动设置的 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] 所示进行即兴发挥。


不太有效的尝试灵感来自[2][3]

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

缺陷:

  1. 虽然listliketab声称可以模拟 指定的列表样式storestyleof,但我还没有找到自动模拟枚举器(例如文本项目符号)的方法。必须使用 等手动添加它们\textbullet~。如果要混合带有 和不带有 的行,则需要将它们放入额外的列中以保持对齐。
  2. 仅类型为 的列支持换行符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} 

[1]:https://i.stack.imgur.com/LOV2N。png

答案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}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

相关内容