表格中带有 p{} 选项的 \flushleft

表格中带有 p{} 选项的 \flushleft

如果我已经tabular用选项定义了对齐p{}

\begin{tabular}{p{.3\textwidth}p{.7\textwidth}}
...(contents)...
\end{tabular}

有没有办法指定我想要它,\flushleft而无需将每个单元格的内容包装在\parboxminipage环境中?在上面的例子中可能会有麻烦,但我有几十个单元格,所以不是一个非常可行的解决方案(除非我使用 Emacs Lisp 编写一些程序)。

答案1

加载大批打包并写入

\begin{tabular}{>{\raggedright}p{.3\textwidth}
                >{\raggedright\arraybackslash}p{.6\textwidth}}

必须\arraybackslash在最后一列使用 ,否则\\将无法结束表格行。您可以使用\newline来结束最后一列单元格中的行(而常规的 则\\用于其他列单元格)。

顺便说一句,像您这样的表格规范将给出一个过满的框,因为您没有考虑列间空间。如果您希望表格一直延伸到行宽,请说

\begin{tabular}{@{}>{\raggedright}p{.3\textwidth-\tabcolsep}
                >{\raggedright\arraybackslash}p{.7\textwidth-\tabcolsep}@{}}

加载后计算包。或者,没有它

\begin{tabular}{@{}
                >{\raggedright}
                p{\dimexpr.3\textwidth-\tabcolsep\relax}
                >{\raggedright\arraybackslash}
                p{\dimexpr.7\textwidth-\tabcolsep\relax}@{}}

二者均@{}避免了表格前后插入列间空格。

答案2

您可以使用包的功能array插入\raggedright左对齐文本的命令,>{command}在列定义之前插入一个或多个命令:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{array}
\begin{document}
\begin{tabular}{>{\raggedright\arraybackslash}p{.3\textwidth}p{.7\textwidth}}
    \blindtext & \blindtext
  \end{tabular}
\end{document}

你提到过\flushleft- 你可以使用它,但它可能会插入不需要的垂直空间,例如

\begin{tabular}{>{\flushleft\arraybackslash}p{.3\textwidth}<{\endflushleft}p{.7\textwidth}}

如果经常需要,可以考虑使用以下方法定义新的列类型array,就像我做的那样这里

\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}

有些人定义了更多有用的类型,例如

\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

等等。因此你的表格定义变得更简单:

\begin{tabular}{P{.7\textwidth}P{.3\textwidth}}

在窄列中,允许使用连字符可能会更好。可以使用ragged2e.来实现,microtype效果会更好。所以我会使用:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{microtype}
\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}}
\begin{document}
\begin{tabular}{P{.7\textwidth}P{.3\textwidth}}
    \blindtext & \blindtext \\
  \end{tabular}
\end{document}

不需要使用ragged2e命令\arraybackslash。由于框中的第一个单词没有连字符,因此我另外插入了零水平空格。

相关内容