tabularx 中的多列列表

tabularx 中的多列列表

我正在尝试在通过 tabularx 定义的表的多列中插入一个列表:

\documentclass[11pt, a4paper]{standalone}
\usepackage{tabularx}
\usepackage[left=25mm, right=25mm, top=25mm, bottom=25mm]{geometry}

\begin{document}
\begin{tabularx}{\textwidth}{>{\hsize=1.5\hsize}X >{\raggedleft\arraybackslash\hsize=0.5\hsize}X}
  Lorem ipsum dolor & sit amet \\
  consectetur adipiscing elit & \\
  \multicolumn{2}{>{\hsize=2\hsize}X}
  {
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque quis dui eu velit tincidunt feugiat at ac magna.
    \begin{itemize}
      \item Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque quis dui eu velit tincidunt feugiat at ac magna.
    \end{itemize}
  } \\
\end{tabularx}
\end{document}

这就是我使用 pdflatex 得到的结果:

测试

如何才能使列表与多列内的文本一样宽?

答案1

这是一个解决方案,(a)\noindent在环境启动之前使用tabularx,(b) 使用@{}指令消除第一列左侧和最后一列右侧的(可能不需要的)垂直空白,以及 (c) 使用\multicolumn{2}{@{}p{\textwidth}@{}}而不是\multicolumn{2}{>{\hsize=2\hsize}X}。请注意,如果您按照此处建议的方式使用指令,不会发生任何不良情况,\multicolumn{2}{...}并且无需加载包enumitem

如上所述,环境@{}的第二个参数的开始和结束处tabularx以及的第二个参数中的项目用于抑制原本会插入的\multicolumn垂直空白(宽度为)。如果你\tabcolsep想要这个空白,去掉@{}项目并将列宽p\textwidth改为\textwidth-2\tabcolsep

(屏幕截图中的细黑线表示文本块的边缘。)

在此处输入图片描述

\documentclass[11pt, a4paper]{article}
\usepackage{tabularx}
\usepackage[margin=25mm,showframe]{geometry}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{@{}
       >{\hsize=1.5\hsize}X 
       >{\raggedleft\arraybackslash\hsize=0.5\hsize}X @{}}
  Lorem ipsum dolor & sit amet \\
  consectetur adipiscing elit & \\
  \multicolumn{2}{@{}p{\textwidth}@{}}
  {
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque quis dui eu velit tincidunt feugiat at ac magna.
    \begin{itemize}
      \item Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque quis dui eu velit tincidunt feugiat at ac magna.
    \end{itemize}
  } \\
\end{tabularx}
\end{document}

答案2

1. Tabularx

首先是手册中第 4.3 节最后一项的警告tabularx

  • 不要使用跨越任何 X 列的 \multicolumn 条目。

要将文本与左边距对齐,一个简单的解决方案是加载包enumitem并使用本地的可选值让项目符号与左边距齐平[leftmargin=*]

为了实现你的第二个目标,我推荐 Mico 在下面他的回答中的解决方案。另一个解决方案是将跨列中的文本设置为parbox与跨列相同的值,即表格的宽度减去列之间的距离,即(\textwidth - 2\tabcolsep)。我已加载calc包来执行计算。将列表括在 中parbox可能会解决您在表格中使用列表时可能遇到的一些间距问题,例如这个答案及其链接。

正如您所见,所有文本现在都排列在右边距。

\documentclass[11pt, a4paper]{standalone}
\usepackage{tabularx,enumitem,calc}
\usepackage[left=25mm, right=25mm, top=25mm, bottom=25mm]{geometry}

\begin{document}
\noindent\begin{tabularx}{\textwidth}
         {>{\hsize=1.5\hsize}X
          >{\raggedleft\arraybackslash\hsize=0.5\hsize}X}
  Lorem ipsum dolor & sit amet \\
  consectetur adipiscing elit & \\
  \multicolumn{2}{>{\hsize=2\hsize}X}
  {\parbox{\textwidth-2\tabcolsep}
          {Lorem ipsum dolor sit amet, consectetur adipiscing
          elit. Quisque quis dui eu velit tincidunt feugiat
          at ac magna.  
          \begin{itemize}[topsep=0pt,leftmargin=*]
            \item Lorem ipsum dolor sit amet, consectetur
                  adipiscing elit. Quisque quis dui eu velit
                  tincidunt feugiat at ac magna.
            \end{itemize}}%
      }
\end{tabularx}
\end{document}

如果表中有多个列表,则可以在本地环境中设置整个表(将表括在花括号中{},并在第一个括号后加上可选协议,即:

\setitemize{topmargin=0pt, leftmargin=*}

或者:如果您要在文档的所有列表中设置,请将 -command 放在setitemize文档的序言中。

图1

2. 表格

您也可以尝试使用普通的表格环境(您需要加载包array)。

当我分析您的 MWE 时,似乎是第一列和第二列之间的关系触发了您使用tabularx。一个稍微简单的解决方案可能是使用两个p-列。

\documentclass[11pt, a4paper]{standalone}
\usepackage{tabularx,enumitem,calc}
\usepackage[left=25mm, right=25mm, top=25mm, bottom=25mm]{geometry}

\begin{document}

\noindent\begin{tabular}
               {p{0.75\linewidth-2\tabcolsep}
                >{\raggedleft\arraybackslash}p{0.25\textwidth-2\tabcolsep}}
               Lorem ipsum dolor & sit amet \\
               consectetur adipiscing elit & \\
               \multicolumn{2}{l}
               {\parbox{\textwidth-2\tabcolsep}
                       {Lorem ipsum dolor sit amet, consectetur
                       adipiscing elit. Quisque quis dui eu velit
                       tincidunt feugiat at ac magna. 
                       \begin{itemize}[topsep=0pt,itemsep=0pt, leftmargin=*]
                         \item Lorem ipsum dolor sit amet, consectetur 
                               adipiscing elit. Quisque quis dui eu
                               velit tincidunt feugiat at ac magna.
                         \item Lorem ipsum dolor sit amet, consectetur 
                               adipiscing elit. Quisque quis dui eu
                               velit tincidunt feugiat at ac magna.
                         \item Lorem ipsum dolor sit amet, consectetur
                               adipiscing elit. Quisque quis dui eu
                               velit tincidunt feugiat at ac magna.
                         \item Lorem ipsum dolor sit amet, consectetur
                               adipiscing elit. Quisque quis dui eu
                               velit tincidunt feugiat at ac magna.\strut
                       \end{itemize}
       }}
\end{tabular}
\end{document}

在此处输入图片描述

我已按照 Mico 的建议更正了示例中的错误,以避免表格突出到右边距。\noindent并不总是必要的,例如在分段命令之后。更好的解决方案是使用 Mico 的p{\linewidth最终减少,-2\tabcolsep}如果您不使用@{}来减少左右空间。

相关内容