尝试研究这个问题一直很困难。不确定在网络上搜索时应该使用什么术语,所以这里有一个例子:想要实现这一点:
注意:对象描述可以跨越多行。有些对象描述可能只在一行上。左侧的对象需要右对齐和加粗。右侧的对象对应描述需要左对齐。有些行可能只包含一个对象和相应的描述,但有些行可能最多包含八行。有些行可能左侧只有一个对象,右侧有一个大段落。在这种情况下,左侧的对象应该位于顶部“行”(?) 并再次右对齐和加粗。
这篇文章看起来很有希望很多帖子都介绍了如何在单元格中顶部/居中/底部对齐,以及这个似乎也很有希望,但它们似乎大多是关于顶部/中心/底部对齐,而不是如何将左侧单元格中的对象与右侧单元格中的对象对齐(以单个行为基础)。第一个链接有点意思,只是不清楚如何实现以下目标:
- 换行
- 左侧的对象应加粗
- 左侧的对象右对齐
这种方法似乎会变得很复杂(要插入的列表很大,而且需要采用所呈现的格式)。有没有更简单的方法来实现上面的图片(知道大约有 30-40 行和 2 列)?
这是 tex 中的示例代码:需要进行更多研究,因为 \pbox 后的 20cm 的含义并不完全清楚。
\begin{tabular}{|c|c|}
\hline
\pbox{20cm}{Object 1 \\ Object 2 \\ Object 3 \\ Object 4 \\ Object 5} & \pbox{20cm}{This is object 1s description. It is on the same line, but it may be longer than one line in the cell. \\ This is object 2s description, same line as object 2. \\ Object 3 description \\ Object 4 description may be longer than one line also, but object 5 will be aligned. \\ Object 5 description} \\
\hline
\pbox{20cm}{Object 1 \\ Object 2 \\ Object 3} & \pbox{20cm}{This is a different group of objects...object 1 description \\ This is a different group of objects...object 2 description, and this one might be longer than one line. \\ This is a different group of objects...object 3 description} \\
\hline
\end{tabular}
笔记上面的 tex 实际上无法正常工作。右侧被截断。它看起来像:
问题:这可以在 TeX 中合理地完成吗?有没有更简单的方法(在 Tex 中)来完成?上面的要点可以补救吗?
答案1
这里有两个分别使用 atabularx
和 a 的解决方案tabular
。
tabularx
:r
列说明符使列右对齐且上对齐。该X
说明符使列的宽度延伸至tabularx
(\textwidth
在此示例中) 的第一个参数允许的宽度。
tabular
:在此示例中,p
列说明符将列的宽度作为参数。9cm
要使第一列始终以粗体显示,您可以使用>
在每个单元格的开头插入格式化命令(\bfseries
在本例中)。要使此功能有效,您必须加载array
或tabularx
包。
最后,我建议不要使用垂直线。我认为使用包可以获得最佳效果booktabs
(提供\toprule
,\midrule
以及\bottomrule
改善行间距)。
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{>{\bfseries}rX}
\toprule
Object 1 & This is object 1s description. It is on the same
line, but it may be longer than one line in the cell. \\
Object 2 & This is object 2s description, same line as object 2. \\
Object 3 & Object 3 description \\
Object 4 & Object 4 description may be longer than one line also,
but object 5 will be aligned.\\
Object 5 & Object 5 description \\
\midrule
Object 1 & This is a different group of objects...object 1
description \\
Object 2 & This is a different group of objects...object 2
description, and this one might be longer than
one line.\\
Object 3 & This is a different group of objects...object 3 description \\
\bottomrule
\end{tabularx}
\bigskip
\noindent
\begin{tabular}{>{\bfseries}rp{9cm}}
\toprule
Object 1 & This is object 1s description. It is on the same
line, but it may be longer than one line in the cell. \\
Object 2 & This is object 2s description, same line as object 2. \\
Object 3 & Object 3 description \\
Object 4 & Object 4 description may be longer than one line also,
but object 5 will be aligned.\\
Object 5 & Object 5 description \\
\midrule
Object 1 & This is a different group of objects...object 1
description \\
Object 2 & This is a different group of objects...object 2
description, and this one might be longer than
one line.\\
Object 3 & This is a different group of objects...object 3 description \\
\bottomrule
\end{tabular}
\end{document}
答案2
这看起来安排起来相对简单。
首先,我建议您使用p{width}
列。该列类型将能够换行。不幸的是,p
和b
列m
将使文本在左侧和右侧对齐。
第二:如果您想让整个表格的宽度整齐地适应您的页面,那么您应该考虑使用 -package tabularx
。这能够拉伸列以使用给定的最大宽度。为此,它引入了一种新的列类型,即X
(大写 X)列。它与 -column 相同p
,因为它使用可拉伸的宽度尺寸。
第三:(只要我理解你的问题正确!)你想让“Object1”作为第一行的第一个条目,让“Object2”作为第二行的开头等等,这样会容易得多,可以一行接一行地输入你的表格,而不是像你做的那样(首先插入第一列的所有条目,然后插入第二列的所有文本,热切地希望它们会神奇地对齐!)。
第四:为了让第二列在左侧(或右侧)对齐——以防万一——,您必须在表格声明中添加一些额外的魔法。在这种情况下,使用技巧>{\cmd}
。>
每次您进入符号指向的列时,都会起作用。当起作用时,它将执行括号中的代码和命令。我使用了这个技巧,通过执行来自包的 . >
,让第一列为粗体系列(命令\bfseries
),在第二列中获得齐平的左边距\RaggedRight
。 它可以实现与标准 LaTeX (全部使用小写字母)更好的换行。第一个命令将断开单词,以获得更好的填充行,而后者只会断开单词之间的行,这会浪费空间,尤其是在小列中。\RaggedRight
ragged2e
\raggedright
第五:您要求第一列格式正确。那么您应该使用r
-column 标识符作为第一列。我对此进行了更改。
以下 MWE 将向您展示如何在 LaTeX 中排版您想要的内容。无需切换到 TeX。我想说:
- 换行在第二列:检查
- 左侧的对象应加粗: 查看
- 左侧的对象右对齐: 查看
等一下:你要求解释正确的但你的形象是合理的左边。我不确定...没问题。如果我的 MWE 错误,请\RaggedRight
在表声明的定义中替换为RaggedLeft
。
以下是我的示例:
\documentclass{article}
\usepackage{tabularx} % Tables with varying column widths
\usepackage{array} % some extra array magic you should
% know about
\usepackage{ragged2e} % better ragged text
\usepackage{lipsum} % blindtext
\begin{document}
\begin{tabularx}{1.0\linewidth}{|>{\bfseries}r|>{\RaggedRight\arraybackslash}X|}
\hline
Object 1 & This is object 1s description. It is on the same line,
but it may be longer than one line in the cell.\\
Object 2 & And this is even longer text. But this time, this is a
\texttt{X}-column, it will be line wrapped nicely and
well.\\
Object 3 & To avoid the justification on both sides of the columns,
use the package \texttt{ragged2e}, which will break also
in the middle of the words. Classical \LaTeX{} linewrap
will only break after the words, not in between.\\
\hline
Another Object 1 & \lipsum[2]\\
Object 2 & \lipsum[3]\\
\hline
\end{tabularx}
\end{document}
并且视觉证明看起来就像您的示例图像:
为了确保万无一失,这次使用\RaggedLeft
:
还要注意:您c
在示例中为第一行使用了指示器。这将使第一列的内容居中。由于您的“对象 x”几乎都使用相同的宽度,因此您不会注意到与我的r
列的区别。因此,我使用了“另一个对象 1”,它要宽得多。这显示了列类型定义的效果l
,c
而且r
更清晰。
玩得开心。