我遇到的问题是,在编译 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
超过\hsize
了2\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}