书中包含 tabularx 的超额 hbox 以及最小示例

书中包含 tabularx 的超额 hbox 以及最小示例

错误:“未定义控制序列。水平框过满(15.0pt 太宽)”出现在每个“end tabularx”中。我尝试过在 \say{begintabularx} 之前使用 {noindent},但没有成功。虽然我可以继续处理此错误的前 500 多个实例,但现在文档无法呈现。

错误消息https://ibb.co/5Y4DtCS

渲染https://ibb.co/nBWSSth

\documentclass{book}
\usepackage{changepage}
\usepackage{comment}
\usepackage{dirtytalk}
\usepackage[T1]{fontenc}
\usepackage[hang,flushmargin]{footmisc}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{imakeidx}
\usepackage[utf8]{inputenc}
\usepackage{lettrine}
\usepackage{lipsum}
\usepackage{microtype}
\usepackage{marginnote}
\usepackage{pifont}
\usepackage{tabularx}
\usepackage{type1cm}
\usepackage{yfonts}
\geometry{paperwidth=8.5in,paperheight=11in,inner=1in}

\usepackage{perpage}
\MakePerPage{footnote}

\usepackage{afterpage}

\newcommand\blankpage{
    \null
    \thispagestyle{empty}
    \addtocounter{page}{-1}
    \newpage
    }

\begin{document}

\begin{center}
\say{Undefined Control Sequence.\\
Overfull hbox (15.0pt too wide) in paragraph at lines 53 and 63 and 75.\\
- these are the \say{end tabularx} lines.}
\end{center}

\begin{tabularx}{1\textwidth} { 
    >{\full\arraybackslash}X 
    >{\full\arraybackslash}X  }

\begin{center}
\noindent \textbf{Header Left Column}
\end{center}
 &
 \begin{center}
\noindent \textbf{Header Right Column}
\end{center}

\end{tabularx}

\begin{tabularx}{1\textwidth} { 
    >{\full\arraybackslash}X 
    >{\full\arraybackslash}X  }
 
\noindent \lipsum[3]
 &
\noindent \lipsum[4]

\end{tabularx}

\bigskip

\begin{tabularx}{1\textwidth} { 
    >{\full\arraybackslash}X 
    >{\full\arraybackslash}X  }
 
\noindent \lipsum[5]
 &
\noindent \lipsum[6]

\end{tabularx}

\bigskip

\noindent Why the error for \say{end tabularx?} I am using overleaf.com in Firefox 81.0 on OSX 10.15.6. I have tried {noindent} before \say{begintabularx} without success. The usecase is a polyglot book, with one language in the left column and a different language in the right column. The two columns must begin on the same line, but are not required to end on the same line.

\bigskip

\noindent Many thanks for your help.

\end{document}

答案1

“未定义控制序列。水平盒子过满(宽度过大 15.0pt)”

这是两个完全独立的问题:

  • 第一种情况是,您会收到一条错误消息,因为\full未定义。如何定义或在哪里\full定义。

  • 第二条是警告消息(不是错误消息),这是由于您\noindent之前没有指定而导致的begin{tabularx}。有点讽刺的是,您的代码中有很多\noindent不需要的指令,但\noindent在需要它们的地方却缺少指令。

以下屏幕截图显示了两个相同的tabularx环境;唯一的区别是第一个环境前面没有\noindent。 (由于我不知道如何\full定义,我决定从代码中省略它。)果然,第一个环境生成了“段落中 \hbox 过满(15.0pt 太宽)在行...”消息,而第二个环境没有。

在此处输入图片描述

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage[letterpaper,inner=1in,nomarginpar]{geometry}
\usepackage{microtype,tabularx}

\usepackage{booktabs,showframe,lipsum} % <-- new
\begin{document}

%\noindent % <-- "\noindent" deliberately commented out
\begin{tabularx}{1\textwidth}{@{} XX @{}}
\multicolumn{1}{c}{Header Left Column}  &
\multicolumn{1}{c}{Header Right Column} \\
\addlinespace
\lipsum[2] & \lipsum[4] 
\end{tabularx}

\vspace{0.5in}
\noindent
\begin{tabularx}{1\textwidth}{@{} XX @{}}
\multicolumn{1}{c}{Header Left Column}  &
\multicolumn{1}{c}{Header Right Column} \\
\addlinespace
\lipsum[2] & \lipsum[4] 
\end{tabularx}
\end{document}

答案2

如果你查看错误信息,

! Undefined control sequence.
<template> ...p \@startpbox {\TX@col@width }\full 
                                                  \arraybackslash \ignorespa...
l.53 \end{tabularx}

换行符显示了 TeX 在解析行时遇到错误的位置。在这种情况下,问题是\full未定义。我不知道你希望它做什么。

这些overfull \hbox消息指的是整个表格。15pt 来自段落缩进。tabularx用 包裹环境center将解决该问题。

(Leslie Lamport 在创建 LaTeX 时决定将 放在tabular段落中间无疑是有充分理由的,但这一决定在此后几十年中成为用户无数痛苦的根源。当我在 80 年代/90 年代教授 LaTeX 课程时,我鼓励用户声明一个aroundtbl环境(以及aroundpic),以允许表格材料和图形的一致放置。)

相关内容