窄表格单元格中长单词后面接短单词

窄表格单元格中长单词后面接短单词

在一个狭窄的、右边不规则的表格单元格中,一个长单词后面跟着一个短单词(例如“aaaaaaaaaaaaaa bbb”),如果第一个单词太宽,因此需要连字符(使用此解决方案),那么第二个单词就会出现在第三行,尽管第二行仍有足够的空间。

因此,

aaaaaaaaaa-
aaaa bbb

我懂了

aaaaaaaaaa-
aaaa
bbb

~可以通过在两个单词之间使用 a 来避免这种情况,但可以自动避免吗?

列类型的小示例取自这里

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}

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

\title{tmp}

\begin{document}

\maketitle

\begin{tabularx}{50pt}{|L{50pt}|}
\hspace{0pt} Fooooo-ooo bar
\end{tabularx}

\end{document}

答案1

(请注意后面的空格\hspace

之所以需要多一行,是因为 TeX 避免在段落的最后一个换行符处使用连字符,这只是一个温和的提示,但这里几乎没有其他事情发生,使用连字符的缺点足以导致 TeX 生成一个额外的行来避免这种情况。通常情况下,tex 必须过度拉伸空白才能获得额外的行,而行数不足的惩罚会阻止这种情况的发生,但在这里,你将\raggedright零惩罚无限拉伸到每一行,因此(从 TeX 的角度来看)拥有三行段落的成本相当低。如果将连字符的缺点设置为 0,那么它会选择一个两行的段落。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}

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

\title{tmp}

\begin{document}

\maketitle

\begin{tabularx}{50pt}{|L{50pt}|}
\finalhyphendemerits=0
\hspace{0pt}Fooooo-ooo bar

X\dotfill X
\end{tabularx}

\end{document}

在此处输入图片描述

答案2

借助ragged2e包及其\RaggedRight命令,您可以定义L类型列,如以下示例所示。

在您的原始代码中,您使用了tabularx宽度p相同的类型列。这会导致出现框溢出警告,因为列实际上会比声明的 50pt 更宽,因为\tabcolsep会添加 2* (=2*6pt)。\tabcolsep是垂直线和文本开始/结束之间的小水平空间。因此,我添加了两个不会产生此警告的替代表。第一个替代方法完全不需要tabularx,第二个使用左对齐的X类型列。

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}

\usepackage{ragged2e}

\newcolumntype{L}[1]{>{\RaggedRight\arraybackslash}p{#1}}

\begin{document}

\begin{tabularx}{50pt}{|L{50pt}|}
Fooooo-ooo bar 
\end{tabularx}

\bigskip

Alternative without tabularx:

\begin{tabular}{|L{50pt}|}
Fooooo-ooo bar 
\end{tabular}

\bigskip

Alternative with tabularx's X type column:

\begin{tabularx}{50pt}{|>{\RaggedRight\arraybackslash}X|}
Fooooo-ooo bar 
\end{tabularx}

\end{document}

相关内容