longtable 中的 \hbox 未满(不良率 10000)

longtable 中的 \hbox 未满(不良率 10000)

我有 1 个 badbox:段落中 \hbox 未满(badness 10000)。我知道 badbox 是从哪里来的。如果您将代码中的“BBBBBW”更改为“BBBBB”,badbox 就会消失。所以可能是因为 LaTeX 不知道如何正确而漂亮地转到换行符。有办法解决这个问题吗?

\documentclass[a4paper,man,natbib]{apa6}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{longtable}

\title{AA}
\shorttitle{AA}
\author{AA}
\affiliation{AA}
\abstract{AA}

\begin{document}
\maketitle

\centering
\begin{longtable}{|p{.25\textwidth}|p{.20\textwidth}|p{.47\textwidth}|}
\caption{\label{tab:reading}AAA.}
\\ \hline
AAAAAAAAAA & AAAA BBBBBW & AAA \\ \hline
\end{longtable}
\end{document}

答案1

在对 OP 的评论中,我指出了未满的原因\hbox,即在尝试强制对窄列进行完全对齐时出现问题,因为该列宽度内只能容纳一个单词。在这种情况下,无法实现完全对齐,并导致框未满。建议的解决方案是将单元格定义为\raggedright

然后 OP 询问是否有办法自动解决 longtable 的问题,因为它很大,有很多这样的框问题。我在这里提出的解决方案是定义一种新的列类型(我称之为P),它调用\raggedright和处理所有列所需的其他内容。(我偶然从这个不相关的问题中抓取了列类型定义:使 LaTeX 表格环境在复制/粘贴时表现良好

\documentclass[a4paper,man,natbib]{apa6}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{longtable}

\usepackage{array}
\newcolumntype{P}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}


\title{AA}
\shorttitle{AA}
\author{AA}
\affiliation{AA}
\abstract{AA}

\begin{document}
\maketitle


\begin{longtable}{|P{.25\textwidth}|P{.20\textwidth}|P{.47\textwidth}|}
\caption{\label{tab:reading}AAA.}
\\ \hline
AAAAAAAAAA & AAAA BBBBBW & AAA \\ \hline
\end{longtable}
\end{document}

相关内容