为什么我的表格在 ConTeXt 中超出了页面的边缘?

为什么我的表格在 ConTeXt 中超出了页面的边缘?

我需要制作一个适合页面文本宽度的表格\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

相关内容