我希望在使用 PSTricks 和 (La)TeX 时尽量减少转换错误。转换错误确实会影响边界框的准确性、LaTeX 的粗细\fbox
以及 PSTricks 笔划的粗细。
当我指定长度时
- 页面布局尺寸:
\paperwidth
,,,,,,\paperheight
\voffset
\hoffset
\topskip
\parindent
- TeX框尺寸:
\fboxrule
,,,等\fboxsep
\arrayrulewidth
- PSTricks 对象维度:
\unit
,,\linewidth
等等
我们应该使用哪个单位来最小化转换?我们应该在整个文档中使用单个单位吗?
由于现有的答案没有解释如何最小化转换错误,因此我将强调并重新表述上述问题。根据现有的答案,我的理解如下。
TeX 自然可以在 中工作sp
,PostScript 自然可以在 中工作bp
。如果我想避免在 TeX 块中进行转换,请在 中提供长度sp
。但如果我在 PSTricks 块中工作,我必须在 中提供长度bp
。
不过,我有一个问题:
如果我在 中定义一个\pspicture
维度bp
,PSTricks 如何要求 TeX 保留空间而不发生从bp
到 的转换错误sp
?
答案1
(La)TeX 本身仅适用于pt
(TeX Points,1pt = 1/72.27 英寸)。这些是定点数并在内部存储为整数,即乘以 65536。这些表示称为缩放点并具有单位sp
,因此 65536sp = 1pt (因为 TeX 使用 16 位表示 的小数部分pt
,2^16 = 65536)。换句话说,TeX 精度为 1/65536 pt = 1sp。任何导致小数值的维度或计算sp
都会四舍五入/截断为整数值。所以 0.01pt = 0.01 * 65536 = 655.36 => 655sp(= 0.009994507pt)。请注意,您可以sp
使用 显示 TeX 维度的表示形式\number
,例如\number\textwidth
将为您提供该值sp
但不附带单位。
如果您将任何维度分配给 LaTeX 长度或 TeX 维度(由\newlength
、\newskip
或定义\newdimen
),即使您使用其他单位(如、或),它也会在sp
内部转换为(但向用户显示为) 。这回答了您的第 1 点和第 2 点:这实际上并不重要,因为它无论如何都会转换。如果您想将其保留在例如中,则需要将此值作为字符串内容存储在宏中。(实际上就是这样;它还会剥离单位)pt
cm
bp
in
bp
graphics/x
bp
Postscript 将点四舍五入为更简单的分数:1 PS pt = 1/72 英寸。TeX 称其为大点因为它们比 TeX 点稍大,并且提供了bp
为其提供了单位。如果直接向 PostScript 代码提供长度,则需要使用bp
not来执行此操作pt
。有时还需要另外剥离单元(例如BoundingBox
标题)。
我认为更高级别的接口应该自己pstricks
处理pt
/ 。但是,调用和直接的 postscript 代码需要您自己处理。我会保留所有单位以避免 TeX 的舍入错误,并且如果可能的话只在最后进行转换。bp
\special
pt
答案2
PostScript 不知道任何单位,一切都以 bp 为单位。PSTricks 可以处理有或无单位的值。如果缺少单位,则考虑当前单位。PStricks 以 pt 为单位执行所有操作,TeX 本身也是如此。在将所有值传递给 PS 之前,PostScript 用户坐标系会缩放到 pt。