以下 LaTeX 源代码
\documentclass[12pt]{article}
\usepackage{makecell}
\begin{document}
\begin{tabular}{ll}
foobar & 0 \\
foo & 1 \\
\makecell[tl]{bar plus \\
other \\
stuff} & 2 \\
baz & 3 \\
qux & 4 \\
quux & 5 \\
\end{tabular}
\end{document}
...产生以下渲染:
这几乎就是我想要的,但我希望多行单元格(“条形图加其他内容”)中行之间的间距明显小于表格行之间的间距。
因此,我尝试在第1行\renewcommand{\arraystretch}{1.3}
之前添加;即:\begin{tabular}[ll}
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{ll}
foobar & 0 \\
foo & 1 \\
\makecell[tl]{bar plus \\
other \\
stuff} & 2 \\
baz & 3 \\
qux & 4 \\
quux & 5 \\
\end{tabular}
结果如下:
看到这个之后,我意识到我想保持行间距和以前一样(即在我添加之前\renewcommand{\arraystretch}{1.3}
),而是让多行单元格中的行间距更窄2。
我读过,又读过,又读过,makecell
软件包的文档但我就是搞不懂。(我没有逐字复制从该文件中甚至可以编译,更不用说做我想要做的事了。)我确信在该文档的某处我需要改变间距的信息之间多行单元格中的行。有人能帮我解释一下吗?3
编辑:我从中学到@Bernard 的回答很有帮助当我尝试自定义 的行为时,没有任何东西对我起作用,原因makecell
是我缺少指令\usepackage{array}
。掌握了这些知识后,我尝试在多行单元格的行之间获得尽可能紧密的间距,如下所示:
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{makecell}
\renewcommand\cellset{\renewcommand\arraystretch{0}%
\setlength\extrarowheight{0pt}}
\begin{tabular}{ll}
foobar & 0 \\
foo & 1 \\
\makecell[tl]{bar plus \\
other \\
stuff} & 2 \\
baz & 3 \\
qux & 4 \\
quux & 5 \\
\end{tabular}
\end{document}
结果:
当然,行间距是由这特定指令可能有点太紧;可能稍微宽松一点的间距(但仍然比行间距紧)会更好。不过,我使用这个极端情况来更好地说明剩余的问题:即新添加的指令
\renewcommand\cellset{\renewcommand\arraystretch{0}%
\setlength\extrarowheight{0pt}}
...不仅影响间距之间多行单元格中的行(根据需要),但还多行单元格的最后一行(“stuff”)和下一行(“baz 3”)之间的间距,这绝对不是我想要的4。
有没有办法调整这个最新版本(基于makecell
5),以便只有间距之间多行单元格中的行减少了,但所有其他垂直间距,包括多行单元格的最后一行(“stuff”)和下一行(“baz 3”)之间的间距都保留了?
编辑2:实际上,如果将第一列中的所有条目替换为通用字符串(例如“0000”),则可以更清楚地理解我上次编辑中的问题。因此,如果我们将文档的主体更改为
\begin{tabular}{ll}
0000 & 0 \\
0000 & 1 \\
\makecell[tl]{0000 \\
0000 \\
0000} & 2 \\
0000 & 3 \\
0000 & 4 \\
0000 & 5 \\
\end{tabular}
...其他一切都保持不变,结果如下:
文字说明:新增指令做减少多行单元格中行与行之间的间距,但还减少多行单元格的最后一行与下一行(第二列为“3”)之间的间距。当然,后者的间距比前者略大,但仍然显著地小于其余行之间的间距。
编辑3:正如我之前提到的,我还没有找到一个参数组合,可以让新指令产生所需的结果。例如,我从下面的源代码(其中我将\extrarowheight
的参数更改为1pt
)得到的结果在我看来一模一样正如我在上面最后一个展示中所示。
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{makecell}
\renewcommand\cellset{\renewcommand\arraystretch{0}%
\setlength\extrarowheight{1pt}} %% NB: I see no difference in results
%% between 0pt and 1pt
\begin{document}
\begin{tabular}{ll}
0000 & 0 \\
0000 & 1 \\
\makecell[tl]{0000 \\
0000 \\
0000} & 2 \\
0000 & 3 \\
0000 & 4 \\
0000 & 5 \\
\end{tabular}
\end{document}
1如果我理解正确,我添加指令的方式\renewcommand{\arraystretch}{1.3}
意味着它将影响所有后续代码,直到文件末尾。只是好奇:有没有办法可以将此指令的影响限制在一个表中?
2我意识到,将多行单元格中的行距缩小会使文本看起来很拥挤。没关系。实际上,我预计多行单元格会非常少见。因此,我更喜欢一种解决方案,即使偶尔的多行单元格最终看起来很拥挤,也能保持正常情况(行完全由单行单元格组成)的美观。
3提出这样的问题让我非常尴尬。我靠编程谋生已有 30 多年,而且我几乎一直在使用 LaTeX。我用 LaTeX 写过几十篇报告和科学论文,还有一篇博士论文。我从头到尾读过关于 LaTeX 的书。即使有了这么多的经验和学习,我仍然查找 LaTeX完全令人费解(请不要谈论 TeX...)这对于典型的 LaTeX 包的文档尤其如此,正如我完全找不到甚至近似软件包文档中对我的问题的回答makecell
。我希望,除了解决我眼前的问题之外,这个问题的答案还可以教我如何找到 LaTeX 文档。
4不管怎样,我还没有找到一个参数值的组合来坚持到\renewcommand\cellset{\renewcommand\arraystretch{...}\setlength\extrarowheight{...}}
指令中,既能同时解决原始问题,又能使结果不受上面最后显示的缺陷的影响。
5我读完后意识到@Zarko 的回答也很有帮助,这makecell
可能不是我想要实现的最佳软件包,因此,坚持使用makecell
它,我可能不必要地使这个问题变得困难。不幸的是,似乎tabularray
需要比我系统中的更新的 LaTeX 安装。这意味着,在我弄清楚如何升级系统上的 LaTeX 安装之前,我基本上只能使用 ,而这已经困扰了我数周makecell
。
答案1
这个解决方案只makecell
适合您吗?
\documentclass{article}
\usepackage{array, makecell}
\renewcommand\cellset{\renewcommand\arraystretch{0.8}%
\setlength\extrarowheight{0pt}}
\begin{document}
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{ll}
foobar & 0 \\
foo & 1 \\
\makecell[tl]{bar plus \\
other \\
stuff} & 2 \\
baz & 3 \\
qux & 4 \\
quux & 5 \\
\end{tabular}
\end{document}
答案2
该包的使用tabularray
很简单:
\documentclass[12pt]{article}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{cells=l,
rowsep=3pt}
foobar & 0 \\
foo & 1 \\
{bar plus\\other\\stuff} & 2 \\
baz & 3 \\
qux & 4 \\
quux & 5 \\
\end{tblr}
\end{document}
编辑:
如果您希望多行单元格中的线条更加紧密,那么您可以尝试\linespread
在表格中进行更改:
\begin{tblr}{cells=l,
rowsep=3pt,
rows = {font=\linespread{0.9}\selectfont} % <---
}
通过上述设置,您将获得: