Tabularx 和多列

Tabularx 和多列

当我尝试在tabularx环境中使用多列时,出现了这种奇怪的行为;其中列没有填满整个宽度。

有人知道为什么会发生这种情况,以及如何解决它吗?

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}

\begin{document}

\begin{tabularx}{\textwidth}{|X|X|}

    \hline
    \multicolumn{2}{|X|}{\sffamily Lorem ipsum dolor sit amet,}\\\hline
    \multicolumn{2}{|X|}{\lipsum[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:\\
    foo&bar\\\hline

\end{tabularx}

\end{document}

tabularx 多列

答案1

您必须指定\hsize|>{\hsize=2\hsize}X|。如果它是三列3\hsize等等。准确地说,将\tabcolsep和 中的一个\arrayrulewidth考虑在内,就像

>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}

代码:

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}
\usepackage[table]{xcolor}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|}

    \hline
    \multicolumn{2}{|>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{\sffamily Lorem ipsum dolor sit amet, }\\\hline
  \rowcolor{blue!40}
    \multicolumn{2}{|>{\hsize=\dimexpr2\hsize+2\tabcolsep+\arrayrulewidth\relax}X|}{\lipsum*[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:\\
    foo&bar \\\hline

\end{tabularx}

\end{document}

在此处输入图片描述

例如,对于三列,您必须使用

>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}

如同

\documentclass[12pt]{article}
\usepackage{tabularx,lipsum}
\usepackage[table]{xcolor}

\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|X|X|X|}

    \hline
    \multicolumn{3}{|>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{\sffamily Lorem ipsum dolor sit amet, }\\\hline
  \rowcolor{blue!40}
    \multicolumn{3}{|>{\hsize=\dimexpr3\hsize+4\tabcolsep+2\arrayrulewidth\relax}X|}{\lipsum*[2]}\\\hline

    \sffamily Lorem av:&\sffamily Ipsum:&\sffamily Ipsum:\\
    foo&bar &bar\\\hline

\end{tabularx}

\end{document}

这里有三列,6\tabcolsep列和 4\arrayrulewidth列。其中 2 个外\tabcolsep列和 2 个外列被保留(多列内部),而 4列和 2列\arrayrulewidth的空间必须使用。\tabcolsep\arrayrulewidth

答案2

我建立在已接受的答案之上,并\newcommand为自己做了一个简单的多列恢复

\newcommand{\tabularxmulticolumncentered}[3] 
    {\multicolumn{#1}
                 {>{\centering\hsize=\dimexpr#1\hsize+#1\tabcolsep+\arrayrulewidth\relax}#2}
                 {#3}}

用于

\tabularxmulticolumncentered{2}{X}{My text spanning two columns}

答案3

Harish Kumar 已经对具体问题给出了答案。这里我想展示一种不同的方法来输入看似某种表格的内容。

\documentclass[12pt]{article}
\usepackage{expl3,environ}
\usepackage{lipsum}

\ExplSyntaxOn
\NewEnviron{Form}[1]
 {
  \keys_set:nn { david/form } { #1 }
  \noindent
  \begin{tabular}
   {
    |
    p{ \dim_eval:n { .5\textwidth - 2\tabcolsep } }
    |
    p{ \dim_eval:n { .5\textwidth - 2\tabcolsep } }
    |
   }
  \hline
  \multicolumn{2}
   { | p{ \dim_eval:n { \textwidth - 2\tabcolsep } } | }
   { \sffamily \l_david_form_title_tl }
  \\
  \hline
  \multicolumn{2}
   { | p{ \dim_eval:n { \textwidth - 2\tabcolsep } } | }
   { \BODY }
  \\
  \hline
  \sffamily Lorem av: & \sffamily Ipsum \\ % <--------- CHANGE HERE
  \l_david_form_bottomleft_tl & \l_david_form_bottomright_tl
  \\
  \hline
  \end{tabular}
 }

\keys_define:nn { david/form }
 {% CHANGE THE KEY NAMES!
  title .tl_set:N = \l_david_form_title_tl,
  loremav .tl_set:N = \l_david_form_bottomleft_tl,
  ipsum .tl_set:N = \l_david_form_bottomright_tl,
 }
\ExplSyntaxOff

\begin{document}

\begin{Form}{
  title = {Lorem ipsum dolor sit amet, eu vel enim virtute, modo rebum},
  loremav = foo,
  ipsum = bar
}
Here goes the body of the form, \lipsum*[2]
\end{Form}

\end{document}

我用expl3它来定义按键和environ收集主体。定义比较长,但输入表格要容易得多,因为各个部分都有明确的位置,而且没有隐藏在代码中。

在此处输入图片描述

答案4

您可以hspan=minimal使用tabularray包裹:

\documentclass[12pt]{article}

\usepackage{tabularray,lipsum}

\begin{document}

\begin{tblr}{
  colspec = {|X|X|},
  row{1,3} = {font=\sffamily},
  cell{1,2}{1} = {c=2}{l}, % multicolumn
  hspan = minimal,
}
\hline
  Lorem ipsum dolor sit amet & \\
\hline
  \lipsum[2] & \\
\hline
  Lorem: & Ipsum: \\
  Foo & Bar\\
\hline
\end{tblr}

\end{document}

在此处输入图片描述

相关内容