我想在标签纸上打印一些标签,因此必须将文本对齐到页面上非常精确的位置。我必须再次测量实际数字,但它大约有 27 行和 9 列标签,每个标签宽 2 厘米,高 1 厘米,列间距约为 2 毫米,行间距为零(0 毫米)。
现在我的问题是:如何在 ConTeXt 中最好地做到这一点?我的第一个想法是使用表格机制,但理想情况下,我希望远离它,而是使用一种可以只输入单个标签内容的方法,而不必担心某一列已满而我必须转到下一列。
framed
我希望通过s 和的组合来实现这一点,startcolumns
但我无法让框架到达我想要的位置:
\setupframed[width=2cm, height=1cm,after=]
\setupcolumns[distance=1.75mm]
\setuplayout[backspace=8mm,width=194mm,topspace=12mm,height=273mm]
\starttext
\startcolumns[n=9]
\dorecurse{50}{\framed{Label \recurselevel}}
\stopcolumns
\stoptext
我遇到的三个问题是:
- 它似乎忽略了我的顶部空间,它仍然起步太低
- 框架之间有垂直空间,我不知道如何消除它
- 它似乎不是先完全填满第一列再填满第二列,而是尝试在所有列中保持平衡。我宁愿用不同的方式来实现这一点。
有人能指点我如何修复这些问题吗?或者是否有其他专门针对我忽略的此类问题的机制?
答案1
使用framed
和columns
为了在框架之间没有额外空间或每列顶部没有额外空间的环境frames
中堆叠,您必须进行以下更改。columns
禁用
grid
列以避免每列开头有多余的空间。禁用
lineskip
当单独行之间的内容接触时插入的值。禁用列平衡以确保每列都填满至底部,直到开始新的列。
\defineframed
[Label]
[ width=2.5cm,
height=1cm]
\setuplayout
[page]
[backspace=8mm,
topspace=13mm]
\setuplayout [page]
\setupinterlinespace [off]
\setupcolumns
[ n=7,
distance=2.5mm,
grid=no,
balance=no]
\starttext
\startcolumns
\dorecurse{200}{\Label{Label \recurselevel}}
\stopcolumns
\stoptext
使用imposition
机制
columns
您可以使用拼版机制将多个较小的页面放在一张大纸上,而不是滥用环境。
使用nx
和ny
键,\setuppaper
您可以设置标签的行数和列数。
\definepapersize
[label]
[width=2.5cm,
height=1cm]
\setuppapersize [label] [A4]
\setuppaper
[nx=7,
ny=27,
dx=2.5mm,
dy=1sp]
\setuplayout
[page]
[backspace=0.25ex,
topspace=0.25ex]
\setuplayout [page]
\setuppaper
[backspace=8mm,
topspace=13mm]
\setuparranging [XY]
\setuplayout
[location=middle]
\showframe [paper]
\starttext
\dorecurse{200}{Label \recurselevel\page}
\stoptext
答案2
使用 Wolfgang Schuster 评论的修改(并再次测量纸张后),生成了我想要的 PDF:
\setupframed[width=2.5cm, height=1cm,after=]
\setupcolumns[distance=2.5mm]
\setuplayout[backspace=8mm,width=194mm,header=0mm,topspace=13mm,height=272mm,footer=0mm]
\setupinterlinespace[off]
\starttext
\startcolumns[n=7,grid=no,balance=no]
\dorecurse{200}{\framed{Label \recurselevel}}
\stopcolumns
\stoptext