![在 ConTeXt 中设置表格每列的宽度](https://linux22.com/image/266531/%E5%9C%A8%20ConTeXt%20%E4%B8%AD%E8%AE%BE%E7%BD%AE%E8%A1%A8%E6%A0%BC%E6%AF%8F%E5%88%97%E7%9A%84%E5%AE%BD%E5%BA%A6.png)
有时我需要这样的表格,其列宽应该彼此相等。以下是一个例子:
Name Email
John [email protected]
Bill [email protected]
Tim [email protected]
姓名列应靠右,电子邮件列应靠左。当然,每列的宽度相同。
我觉得这个要求可以通过 和 来达到\starttable
,\stoptable
但是如何将l
或r
与需要的宽度结合起来呢?
答案1
该\starttable
语法已被弃用,因此应避免在新文档中使用。这就是为什么我提出使用自然表(也称为 HTML 表)的解决方案。由于自然表非常冗长,因此最好将它们与模块结合使用database
。这允许非常简单且可读的语法,但灵活性较差。
database
在这种情况下模块是否有意义取决于您的要求。两种情况下的自然表设置相同。
对于更简单的任务,制表符可能就足够了。
\usemodule [database]
\defineseparatedlist
[NaturalTable]
[separator=comma, %% not necessary, already the default
before=\bTABLE, after=\eTABLE,
first=\bTR, last=\eTR,
left=\bTD, right=\eTD,
setups=s:NaturalTable]
\startsetups [s:NaturalTable]
\setupTABLE [frame=off, distance=5mm]
\setupTABLE [column] [1] [width=2cm, align=flushright]
\setupTABLE [row] [1] [style=bold]
\stopsetups
\starttext
\startNaturalTable
Name, Email
John, [email protected]
Bill, [email protected]
Tim , [email protected]
\stopNaturalTable
\starttabulate [|p(3cm)r|l|]
\NC Name \NC Email \AR
\NC John \NC [email protected] \AR
\NC Bill \NC [email protected] \AR
\NC Tim \NC [email protected] \AR
\stoptabulate
\stoptext