![为什么我的表格在 ConTeXt 中超出了页面的边缘?](https://linux22.com/image/257192/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E8%A1%A8%E6%A0%BC%E5%9C%A8%20ConTeXt%20%E4%B8%AD%E8%B6%85%E5%87%BA%E4%BA%86%E9%A1%B5%E9%9D%A2%E7%9A%84%E8%BE%B9%E7%BC%98%EF%BC%9F.png)
我需要制作一个适合页面文本宽度的表格\textwidth
,或者说基本上适合页面文本的宽度。我创建了 20%、60% 和 20% 的列,这些列应该适合宽度,但是,当我编译它时,最后一列超出了页面边缘:
\setuppapersize [A5]
\setuplayout [backspace=40mm, topspace=10mm, width=98mm, height=190mm]
\starttext
\starttable[|xp(0.2\textwidth)|xp(0.6\textwidth)|xp(0.2\textwidth)|]
\HL
\NC A \NC \input knuth \NC Notes \NR
\NC B \NC \input knuth \NC \NR
\HL
\stoptable
\stoptext
- 为什么我的表格超出了页面的边缘?
- 我如何创建适合的表格
\textwidth
?
答案1
正如@Zack 正确指出的那样,context
在列之间添加额外的空间。默认情况下,这是0.5em
。您可以通过以 开头的格式处方来完全消除此空间s0
,但这可能不是您想要的。
要指定表格的宽度,请使用命令\setuptables
并设置参数textwidth
。因此,要使表格的宽度与页面的宽度完全相同,请输入:
\setuptables[textwidth=\textwidth]
并确保您的总宽度规格(包括列空间)不超过此值。 context
然后将扩展表格以适合宽度。
但请注意,第一列之前有一个列间距,最后一列之后有一些粘连。要消除这些,请o0
在格式中使用(它会消除当前列右侧的间距)。下面是一个示例文档,其中有无调整,也有调整。
\setuppapersize [A5]
\setuplayout [backspace=30mm, topspace=10mm,
width=fit, height=190mm]
\setuptables[textwidth=\textwidth]
\starttext
\hrule
\strut Text before tables.
\starttable[|xp(0.1\textwidth)|xp(0.6\textwidth)|xp(0.2\textwidth)|]
\HL
\NC A \NC Some text to put in the middle column. \NC Notes material \NC \AR
\HL
\stoptable
Text between tables.
\starttable[o0|xp(0.1\textwidth)|xp(0.6\textwidth)|o0xp(0.2\textwidth)|]
\HL
\NC A \NC Some text to put in the middle column \NC Notes material \NC \AR
\HL
\stoptable
\strut Text after tables.
\hrule
\stoptext
我为本次演示选择了略有不同的页面布局。最后一列右侧的粘合在这里不可见,但如果指定的总宽度明显小于文本宽度,您会注意到它。感谢@Aditya 的帮助,通过在行末尾添加 可以改善表格中的间距\NC \AR
。请注意上下文花园/桌子告诉我们
您可以在“row”命令之前省略 \NC,但如果在最后一行或单行中使用 \AR,则不能
答案2
@Zack 已经解释了为什么会发生这种情况,而 @Andrew Swann 也提出了一种解决方法。我想指出另一种方法。使用自然表格而不是简单表格。自然表格更灵活,并且可以更好地区分内容和演示。下面是使用自然表格的相同示例:
\startsetups table:width
\setupTABLE[align={hyphenated,normal}]
\setupTABLE[column][1][width=0.2\textwidth]
\setupTABLE[column][2][width=0.6\textwidth]
\setupTABLE[column][3][width=0.2\textwidth]
\stopsetups
\startsetups table:rules
\setupTABLE[frame=off]
\setupTABLE[row][first][topframe=on]
\setupTABLE[row][last][bottomframe=on]
\stopsetups
\starttext
\startTABLE[setups={table:width, table:rules}]
\NC A \NC Some text to put in the middle column. \NC Notes material \NC \NR
\NC A \NC Some text to put in the middle column. \NC Notes material \NC \NR
\NC A \NC Some text to put in the middle column. \NC Notes material \NC \NR
\stopTABLE
\stoptext