如果我已经tabular
用选项定义了对齐p{}
,
\begin{tabular}{p{.3\textwidth}p{.7\textwidth}}
...(contents)...
\end{tabular}
有没有办法指定我想要它,\flushleft
而无需将每个单元格的内容包装在\parbox
或minipage
环境中?在上面的例子中可能会有麻烦,但我有几十个单元格,所以不是一个非常可行的解决方案(除非我使用 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
。由于框中的第一个单词没有连字符,因此我另外插入了零水平空格。