嵌套的 tabularx 和 itemize => TeX 容量超出

嵌套的 tabularx 和 itemize => TeX 容量超出

我遇到的问题是,在编译 MWE 时出现错误(这本身没有什么意义)。我遵循解决方案来自大卫。

\documentclass[a4paper,11pt]{article}
\usepackage[shorthands=off,bidi=basic,english, ngerman]{babel}
\usepackage{enumerate} 
\usepackage{ltablex} 
\keepXColumns

\usepackage[font=small, format=hang]{caption}

\begin{document}

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

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

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

A &  B \\

\end{tabularx}
 } \\

\begin{itemize}
\item One item

\end{itemize}
 &  ABD \\
\end{tabularx}

\end{document}

当编译上述结构时我得到TeX capacity exceeded, sorry [input stack size=5000]. \end{tabularx}

有什么想法可以解决这个问题吗?

答案1

  • 色谱柱规格

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

    存在根本缺陷。(+\arrayrulewidth从纯粹意义上来说,这一部分是错误的计算的观点(因为您的表格没有垂直条),但它不会导致错误异常。)将列规范替换为

    p{\dimexpr\textwidth-2\tabcolsep\relax}
    
  • 为什么说根本性错误?该tabularx包允许用户为 类型的列指定不相等的列宽X。但是,必须满足几个健全性检查。首先,相对列宽的总和必须等于 类型的列数。X例如,对于tabularx具有 2 列类型的环境X>{\hsize=1.333\hsize}X >{\hsize=0.667\hsize}X是可以的,因为1.333+0.667=2。请注意,您的代码确实不是实现2\hsize;相反,它实现了2\hsize+2\tabcolsep+\arrayrulewidth。单凭这种差异就应该让你意识到有些事情是错误的。那么,你犯的根本错误是,你试图使用单身的X第二个参数中的列类型为\multicolumn。因此我建议使用单个列类型p

  • 接下来,“内部”环境的整体宽度tabularx是错误的。替换

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

    \begin{tabularx}{\hsize}{XX}
    

    为什么?根据构造,\textwidth超过\hsize2\tabcolsep

  • 最后但同样重要的一点是,不要忘记\noindent在第一个或“外部”tabularx环境之前插入 -除非tabularx你不希望被环境太宽的警告信息轰炸。

以下代码可以编译。话虽如此,我确信它会曾经赢得代码之美奖。就我而言,我无法理解嵌套tabularx环境的目的。我会绝不在我自己的 LaTeX 工作论文中编写类似代码。

\documentclass{article}
\usepackage{tabularx} 

\begin{document}
\noindent % <-- very important
\begin{tabularx}{\textwidth}{XX}

\multicolumn{2}{ p{\dimexpr\textwidth-2\tabcolsep\relax} }{
   \begin{tabularx}{\hsize}{XX}
      A & B 
   \end{tabularx}
} \\

\begin{itemize}
  \item One item
\end{itemize}
 &  ABD 
\end{tabularx}

\end{document}

相关内容