PRINT

*print.txt*     For Vim version 7.1.  最近更新: 2006年4月


		  VIM REFERENCE MANUAL    by Bram Moolenaar
				译者: Willis
				http://vimcdoc.sf.net


打印							*printing*

1. 简介					|print-intro|
2. 打印选项				|print-options|
3. PostScript 打印			|postscript-printing|
4. PostScript 打印编码			|postscript-print-encoding|
5. PostScript CJK 打印			|postscript-cjk-printing|
6. PostScript 打印疑难解答		|postscript-print-trouble|
7. PostScript 工具			|postscript-print-util|
8. 换页字符				|printing-formfeed|

{Vi 无此功能}
{仅当编译时加入 |+printer| 特性才有效}


1. 简介							*print-intro*

在 MS-Windows 上 Vim 可以在任何打印机上打印你的文本。在别的系统上,它产生一个
PostScript 文件。该文件能直接发送到 PostScript 打印机上,也能通过类似
ghostscript 的程序用在别的打印机上。

					*:ha* *:hardcopy* *E237* *E238* *E324*
:[range]ha[rdcopy][!] [arguments]
			打印 [range] 指定的行 (缺省是整个文件)。

			在 MS-Windows 上,会显示打印对话框,用来选择打印机和
			纸张尺寸等。[!] 版本跳过对话框。这里,打印机由
			'printdevice' 指定。如果 'printdevice' 为空,就使用
			系统缺省打印机。

			对于非 MS-Windows 的系统,先在一个临时文件写入
			Postscript,然后用 'printexpr' 打印它。这时,
			[arguments] 可以在 'printexpr' 里通过 |v:cmdarg| 得到。
			否则的话,[arguments] 被忽略。'printoptions' 可以用来
			指定纸张尺寸,是否双面打印,等等。

:[range]ha[rdcopy][!] >{filename}
			同上,但把 Postscript 打印到文件 {filename}。
			其中,"%" 等结构通过 |cmdline-special| 得到扩展。
			需要小心的是,现存的同名文件将被不加提示的覆盖。
			{仅当编译时加入 |+postscript| 特性才能有此功能}
			在 MS-Windows 上应使用打印机驱动程序的 "输出到文件"
			功能。

打印过程中显示完成的页号和百分比。要中断打印,按中断键 (CTRL-C 或者在 MS-系统
里。CTRL-Break)。

'printfont' 和 'printoptions' 选项控制打印输出。'printheader' 指定页眉的格式。

打印文件根据指定的边界 (margin) 排版,这不受当前窗口的 'wrap' 或 'linebreak'
设置影响。'printoptions' 里的 "wrap" 项可以用来关闭回绕。

打印的文本使用当前的高亮色彩,但有以下考虑:
1) 正常的背景色总是白色 (白纸的颜色)。
2) 白色文本和缺省前景总是黑色,这样你才能看得出来!
3) 如果 'background' 是 "dark",则颜色会加深,否则在白纸上它们因太亮而无法清晰
   辨别。


2. 打印选项						*print-options*

这里提供改变打印方式的所有选项的细节。设置选项的一般信息见 |options.txt|。

							*pdev-option*
'printdevice' 'pdev'	字符串	(缺省为空)
			全局
|:hardcopy| 命令的感叹号 (!) 版本跳过打印机选择对话框,本选项指定此时所用的打
印机的名字。在 Win32 上,它必须和标准打印对话框里出现的打印机名字完全一致。
如果该选项为空,vim 会为 ":hardcopy!" 使用系统的缺省打印机。

							*penc-option* *E620*
'printencoding' 'penc'	字符串	(缺省为空,除了:
					Windows、OS/2: cp1252,
					Macintosh: mac-roman,
					VMS: dec-mcs,
					HPUX: hp-roman8,
					EBCDIC: ebcdic-uk)
			全局
设置打印时使用的字符编码。本选项告诉 VIM 使用 'runtimepath' 的 "print" 目录里
哪个打印字符编码文件。

本选项接受任何 |encoding-names| 里的值。任何能识别的名字被转换为 VIM 的标准名
字 - 详情见 'encoding'。VIM 不能识别的名字会被转换为小写形式,而且下划线被替换
成 '-' 符号。

如果 'printencoding' 为空或者 VIM 找不到该文件,那么它会用 'encoding' (如果
VIM 编译时加入 |+multi_byte| 而且此选项设为 8 位编码的话) 来找到打印字符编码文
件。如果 VIM 找不到字符编码文件,那么使用的是 "latin1" 打印字符编码文件。

如果 'encoding' 是多字节编码,VIM 会试图把字符转换为打印编码再进行打印 (如果
'printencoding' 为空,那么转换到 latin1)。转换到非 latin1 的打印编码需要 VIM
编译时加入 |+iconv| 特性。如果无法转换,打印会失败。任何不能转换的字符会被倒过
来的问号代替。

提供了四个打印字符编码文件,分别支持缺省的 Mac、VMS、HPUX 和 EBCDIC 字符编码,
而且也是这些平台上缺省使用的。Windows 和 OS/2 平台缺省使用代码页 1252 打印字符
编码。

							*pexpr-option*
'printexpr' 'pexpr'	字符串	(缺省: 见下)
			全局
			{Vi 无此功能}
			{仅当编译时加入 |+printer| 和 |+postscript| 特性
			才有效}
用于打印 |:hardcopy| 产生的 PostScript 文件的表达式。
要打印的文件名在 |v:fname_in|。
":hardcopy" 命令的参数在 |v:cmdarg|。
该表达式必须在打印后负责删除文件。如果有错误,表达式必须返回非零值。如果没有
错,返回零或空字符串。
非 MS-Windows 或 VMS 系统的缺省就是简单地使用 "lpr" 来打印文件:

    system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice)
	. ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error

在 MS-DOS、MS-Windows 和 OS/2 机器上,缺省是把文件复制到当前指定的 printdevice
上:

    system('copy' . ' ' . v:fname_in . (&printdevice == ''
		? ' LPT1:' : (' \"' . &printdevice . '\"')))
		. delete(v:fname_in)

在 VMS 机器上,缺省是把文件发送到缺省或者当前指定的 printdevice 上:

    system('print' . (&printdevice == '' ? '' : ' /queue=' .
		&printdevice) . ' ' . v:fname_in) . delete(v:fname_in)

如果你改变此选项,使用函数是避免转义所有的空格的简便方法。例如:

	:set printexpr=PrintFile(v:fname_in)
	:function PrintFile(fname)
	:  call system("ghostview " . a:fname)
	:  call delete(a:fname)
	:  return v:shell_error
	:endfunc

要记住有些打印程序在读入文件之前就返回控制权。如果你过早地删除文件,它不会被打
印。这些程序通常提供选项,在打印完成时让它们删除文件。
								*E365*
如果表达式计算失败,或者产生非零值,你会得到错误信息。那种情况下,Vim 会删除文
件。非 MS-Windows 的缺省值里使用一个技巧: 加上 "v:shell_error" 会在 system()
调用失败时返回非零值。

为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。

							*pfn-option* *E613*
'printfont' 'pfn'	字符串	(缺省为 "courier")
			全局
|:hardcopy| 命令输出使用的字体名。它和 'guifont' 选项的格式一样,除了只能给出
一个字体的名字,而且不能使用特殊的 "guifont=*" 语法以外。

在 Win32 GUI 版本上,它指定字体名还有附加属性,就如同 'guifont' 选项那样。

其他系统上,只能识别 ":h11",其中 "11" 是字体的点数 (point) 大小。如果忽略,使
用 10 点字。

							*pheader-option*
'printheader' 'pheader'	字符串  (缺省为 "%<%f%h%m%=Page %N")
			全局
定义 |:hardcopy| 输出的页眉格式。该选项和 'statusline' 选项以同样的方式定义。
如果 Vim 编译时没有加入 |+statusline| 特性,本选项没有效果,而使用简单的缺省页
眉,其中只包含页号。

							*pmbcs-option*
'printmbcharset' 'pmbcs'  字符串 (缺省为 "")
			  全局
设置 |:hardcopy| 产生 CJK 输出时使用的 CJK 字符集。目前,VIM 识别以下这些预先
定义的值:

		值		描述 
  中文		GB_2312-80
  (简体)	GBT_12345-90
		MAC		Apple Mac Simplified Chinese
		GBT-90_MAC	GB/T 12345-90 Apple Mac Simplified Chinese
		GBK		GBK (GB 13000.1-93)
		ISO10646	ISO 10646-1:1993

  中文		CNS_1993	CNS 11643-1993, Planes 1 & 2
  (繁体)	BIG5
		ETEN		Big5,带 ETen 扩展
		ISO10646	ISO 10646-1:1993

  日文		JIS_C_1978
		JIS_X_1983
		JIS_X_1990
		MSWINDOWS	Win3.1/95J (JIS X 1997 + NEC + IBM 扩展)
		KANJITALK6	Apple Mac KanjiTalk V6.x
		KANJITALK7	Apple Mac KanjiTalk V7.x

  韩文		KS_X_1992
		MAC		Apple Macintosh Korean
		MSWINDOWS	KS X 1992,带 MS 扩展
		ISO10646	ISO 10646-1:1993

上面的值和 'printencoding' 只有特定的一些组合。下表显示合法的组合可能:

				euc-cn	 gbk	ucs-2	utf-8 
  中文		GB_2312-80	   x
  (简体)	GBT_12345-90	   x
		MAC		   x
		GBT-90_MAC	   x
		GBK			   x
		ISO10646			  x	  x

				euc-tw	 big5	ucs-2	utf-8 
  中文		CNS_1993	   x
  (繁体)	BIG5			   x
		ETEN			   x
		ISO10646			  x	  x

				euc-jp	 sjis	ucs-2	utf-8 
  日文		JIS_C_1978	   x	   x
		JIS_X_1983	   x	   x
		JIS_X_1990	   x		  x	  x
		MSWINDOWS	   x
		KANJITALK6	   x
		KANJITALK7	   x

				euc-kr	 cp949	ucs-2	utf-8 
  韩文		KS_X_1992	   x
		MAC		   x
		MSWINDOWS		   x
		ISO10646			  x	  x

要设置打印日文文本所用的合适的编码和字符集,你需要做;
	:set printencoding=euc-jp
	:set printmbcharset=JIS_X_1983

如果 'printmbcharset' 不是以上给出的值,就假定这是个自定义的多字节字符集,因而
没有它是否与 'printencoding' 的值兼容的检查。VIM 会在 'runtimepath' 里的
"print" 目录下寻找定义该字符集的文件。

							*pmbfn-option*
'printmbfont' 'pmbfn'	字符串 (缺省为 "")
			全局
这是逗号分隔的字段列表,用于 |:hardcopy| 生成的 CJK 输出使用的字体名。每个字体
名必须有一个字符前导,指示要使用的字体的风格,如下:

  r:{font-name}		用于普通字符的字体
  b:{font-name}		用于粗体字符的字体
  i:{font-name}		用于斜体字符的字体
  o:{font-name}		用于粗体斜体字符的字体

执行 CJK 打印时,带有 r: 前缀的字体是必需的。其它字体名的描述符可选。如果某个
描述符不存在,使用另一个字体,如下:

  如果 b: 不存在,使用 r:
  如果 i: 不存在,使用 r:
  如果 o: 不存在,使用 b:

有些 CJK 字体不包含 ASCII 代码范围内的字符编码。还有,在少量代码点上,有些 CJK
ASCII 代码范围里的字符和传统的 ASCII 字符有差异。有两个附加的域可以用来控制
ASCII 代码范围内的字符打印。

  c:yes			使用 Courier 字体打印 ASCII 代码范围内的字符。
  c:no (缺省)

  a:yes			在 ASCII 代码范围内的代码使用 ASCII 字符集。
  a:no (缺省)

下面的例子指定两个多字节字体,一个用于普通和斜体打印,一个用于粗体和粗体斜体打
印,它使用 Courier 打印 ASCII 代码范围内的代码,但使用国家字符集:
	:set printmbfont=r:WadaMin-Regular,b:WadaMin-Bold,c:yes

							*popt-option*
'printoptions' 'popt'	字符串	(缺省为 "")
			全局
			{Vi 无此功能}
			{仅当编译时加入 |+printer| 特性才有效}
这是逗号分隔的项目列表,控制 |:hardcopy| 的输出格式:

  left:{spec}		左边界 (缺省: 10pc)
  right:{spec}		右边界 (缺省: 5pc)
  top:{spec}		顶部边界 (缺省: 5pc)
  bottom:{spec}		底部边界 (缺省: 5pc)
			{spec} 是一个数字,后面跟 "in" 代表英寸,"pt" 代表点数
			(1 点等于 1/72 英寸),"mm" 代表毫米,或者 "pc" 代表媒
			介大小的百分比。
			古怪的例子:
			    left:2in,top:30pt,right:16mm,bottom:3pc
			如果单位不能识别,不会出错。只是使用缺省值。

  header:{nr}		保留作页眉的行数。
			只填入第一行,所以如果 {nr} 为 2,有一个空行。页眉的格
			式由 'printheader' 控制。
  header:0		不打印页眉。
  header:2  (缺省)	页眉使用两行

  syntax:n		不使用语法高亮。这样更快,因而打印大文件也更实用。
  syntax:y		使用语法高亮。
  syntax:a  (缺省)	如果打印机可以打印色彩或者灰色,使用语法高亮。

  number:y		打印输出里包含行号。
  number:n  (缺省)	没有行号。

  wrap:y    (缺省)	回绕长行。
  wrap:n		截断长行。

  duplex:off		单面打印。
  duplex:long (缺省)	双面打印 (如果可以),长边装订。
  duplex:short		双面打印 (如果可以),短边装订。

  collate:y  (缺省)	逐份打印: 1 2 3,1 2 3,1 2 3
  collate:n		非逐份打印: 1 1 1,2 2 2,3 3 3

  jobsplit:n (缺省)	单个打印任务完成所有份数
  jobsplit:y		每份使用不同的打印任务。用于 N-路后期处理。

  portrait:y (缺省)	打印方向为竖向。
  portrait:n		打印方向为横向。
						*a4* *letter*
  paper:A4   (缺省)	纸张大小: A4
  paper:{name}		纸张大小可见下表:
			{name}	    厘米计的尺寸     英寸计的尺寸
			10x14	    25.4  x 35.57    10    x 14
			A3	    29.7  x 42	     11.69 x 16.54
			A4	    21	  x 29.7      8.27 x 11.69
			A5	    14.8  x 21	      5.83 x  8.27
			B4	    25	  x 35.3     10.12 x 14.33
			B5	    17.6  x 25	      7.17 x 10.12
			executive   18.42 x 26.67     7.25 x 10.5
			folio	    21	  x 33	      8.27 x 13
			ledger	    43.13 x 27.96    17    x 11
			legal	    21.59 x 35.57     8.5  x 14
			letter	    21.59 x 27.96     8.5  x 11
			quarto	    21.59 x 27.5      8.5  x 10.83
			statement   13.97 x 21.59     5.5  x  8.5
			tabloid     27.96 x 43.13    11    x 17

  formfeed:n (缺省)	把换页字符 (0x0c) 看成普通的打印字符。
  formfeed:y		遇到换页字符时,当前行从新页的第一行开始处继续打印。

没有给出某项目时,使用标明为 (缺省) 的项目。不需要总是给出这些值,尤其是可以使
用对话框来选择打印机和选项。
例如:
	:set printoptions=paper:letter,duplex:off


3 PostScript 打印					*postscript-printing*
						*E455* *E456* *E457* *E624*
只要你有足够的磁盘空间,产生一个 PostScript 文件当无问题。你需要正确安装运行时
文件 (如果你能找到帮助文件,它们大概都已经安装好了)。

PostScript 打印有若干限制:

- 'printfont' - 字体名被忽略 (总是用 Courier 家族字体 - 它应在所有 PostScript
  打印机上可用) 但还能指定字体大小。

- 'printoptions' - 产生 PostScript 输出时使用了双面打印设置,但是否如此打印决
  定于打印机本身。如果打印机不支持双面打印,则该设置应简单给予忽略。但是有些打
  印机彻底不能打印。

- 8 位支持 - 尽管很多 8 位打印字符编码得到支持,还是有可能部分字符无法打印。这
  决定于打印机所带的字体是否能识别该字符。丢失的字符会以一个倒转的问号代替,或
  者如果该字体不能识别该字符的话,则留一个空格。安装新版的 Courier 字体家族可
  能会使某一个编码里的字符完全得到支持。

- 多字节支持 - 目前,VIM 会试图把多字节字符转换为 'printencoding'  (如果为空,
  latin1) 所指定的 8 位编码。不能成功转换的字符会显示为未知字符。如果 Vim 不
  能完成该转换,打印将会失败。


4. 自定义 8 位打印字符编码			*postscript-print-encoding*
								*E618* *E619*
打印 8 位字符数据,如果要使用你自己的打印字符编码,你需要定义自己的 PostScript
字体编码。关于如果定义字体编码向量的细节超出了本帮助文件的范围。为此,你可查阅
Addison-Wesley 出版的 PostScript 语言参考手册第三版,或从 http://www.adobe.com
得到 PDF 版本。以下,说明一下如果使 Vim 找到并使用你自己的打印字符编码。

i.   为你的编码向量定义一个唯一的名字,以不与 VIM 使用的已识别的或标准的编码名
     字冲突为原则 (这些编码可以参见 |encoding-names|)。最好是一个别人也不太可能
     使用的名字。
ii.  把 $VIMRUNTIME/print/latin1.ps 复制到你的 'runtimepath' 里的 print 子目录
     并换成你选好的唯一的名字。
iii. 编辑你换名了的 latin1.ps。把所有出现的 latin1 替代成你的编码名 (不要忘了
     %%Title: 开头的那行)。同时,把字型名字 (glyph names) 数组改成你新定义的
     编码向量。该数组必须恰好有 256 项,不然你无法打印!
iv.  在 VIM 里,设置 'printencoding' 为你的唯一的编码名,然后打印你的文件。
     VIM 会使用你自定义的打印字符编码。

如果除了 %%Title: 开头一行里的编码名字和 %%Version:: 开头的一行里的版本以外,
你修改了前三行的顺序或者任何别的内容,Vim 会报告此资源文件有错误。

[对通晓 PostScript 者的技术解释 - VIM 打印时,查找并使用和编码同名的文件。该文
件定义一个新的名为 /VIM-name 的 PostScript Encoding 资源,其中 name 即 VIM 会使
用的打印字符编码。]


5. PostScript CJK 打印				*postscript-cjk-printing*
							*E673* *E674* *E675*

VIM 支持打印中文、日文和韩文文件。要能正确地打印 CJK 文件,VIM 需要设置更多的
选项。

这些国家有许多标准字符集和编码,打印时两者都要指定。另外,CJK 字体通常没有斜体
字形的概念,为了在打印时达到强调的效果,需要使用不同的重量 (weight) 和风格
(stroke style)。因此,要指定打印时使用的字体,需要不同的方法。

'printencoding' 和 'printmbcharset' 选项分别指定编码和字符集。如果没有设置
'printencoding',就像一般使用那样,使用 'encoding'。如果设定 'printencoding',
打印时字符会被翻译成此编码。你要确保该编码和文件内容需要的字符集兼容,否则有些
字符可能打印不出来。

'printmbfont' 指定 CJK 打印要用的字体。该选项允许你指定在语法高亮时使用不同字
体风格: 普通、斜体、粗体和粗体斜体的字符使用不同的打印字体,

VIM 不提供 CJK 字体。一些免费的中 (繁体) 日韩字体可以在这里得到:

  http://examples.oreilly.com/cjkvinfo/adobe/samples/

在 readme 文件里可以找到这些字体的说明,它在

  http://examples.oreilly.com/cjkvinfo/adobe/00README

请阅读你的打印机文档,以了解如何安装新的字体。

CJK 字体可以很大,因为它们包含了数以千计的字形,即使如此,某个字体只包含了国家
标准的一个子集也是很常见的。如果你发现打印输出没有半宽的罗马字符,你需要在
'printmbfont' 里配置 VIM 使用 Courier 字体来打印半宽 ASCII 字符。如果你的字体不
包括其它字符,也许你需要找一个能够包含所有需要的字形的字体。

另一个 ASCII 字符的问题是若干国家字符集指定一些 ASCII 代码范围的代码使用不同的
字形。如果你用国家字符集打印 ASCII 文本,你可能会看到意想不到的字符。如果你需
要真正的 ASCII 代码打印,你需要用 'printmbfont' 来配置 VIM 使 ASCII 代码范围内
的代码输出 ASCII 字符。

可以定义你自己的多字节字符集,虽然这个过程不应轻易尝试。关于此过程的讨论超出了
这些帮助文件的范围。具体细节可见 http://www.adobe.com 提供的 PDF 文件格式的文
档 'Adobe CMap and CIDFont Files Specification, Version 1.0' 里的 CMap (字符映
射表) 文件。


6. PostScript 打印疑难解答			*postscript-print-trouble*
									*E621*
通常唯一说明打印 PostScript 出现问题的症状是你的打印结果没有出现。如果你运气
好,你也许会得到一页打印说明,告诉你哪个 PostScript 操作符产生了使打印无法继续
下去的错误。

有若干使打印失败的可能的原因:

- prolog 资源文件版本错误。prolog 资源文件包含一些 VIM 用来打印的必需的
  PostScript。每个 VIM 版本需要它一个不同的版本。确信你安装了正确的运行时的文
  件,而且没有在你的 'runtimepath' 里的 print 目录里保留了一个旧版本的 prolog
  文件。

- 纸张大小。有些 PostScript 打印机会因为不支持请求的纸张大小而中止打印。缺省,
  VIM 用 A4 纸。用 'printoptions' 找到和设置你打印机合用的纸张大小。如果你找不
  到所用纸张的名字,度量打印纸的尺寸,然后和 'printoptions' 里支持的纸张大小列
  表逐一比较,然后用宽_和_高都最接近的纸张。 注意: 实际的纸张尺寸和列出的大小
  可能稍有差异。如果没有相近的纸张被列出,那你可以试试以下讨论的 PSUtils 里的
  psresize 工具。

- 双面打印 (duplex)。通常,不支持双面打印的 PostScript 打印机只是忽略该请求。
  但有的打印机就彻底放弃该打印任务。试试关掉 duplex 再打印。注意: 用 PSUtils
  里的工具可以手动设置双面打印 - 见下。

- 逐份打印 (collated)。和双面打印一样,大多数不支持逐份打印的打印机只是忽略该
  请求。有的或许不是这样。试试关掉逐份打印的选项。

- 语法高亮。有些打印管理代码不让含有语法高亮的 PostScript 文件在黑白打印机上打
  印,即使唯一用到的颜色是黑色。试试关掉语法高亮。

一个安全的 printoptions 设置是:

	:set printoptions=paper:A4,duplex:off,collate:n,syntax:n

把 "A4" 换成你的打印机纸最适合的纸张大小。


7. PostScript 工具				*postscript-print-util*

7.1 Ghostscript

Ghostscript 是一个 PostScript 和 PDF 的解释器,从而可以显示和在非 PostScript
的打印机上打印 PostScript 和 PDF 文件。它还可以把 PostScript 文件转换成 PDF 文
件。

Ghostscript 可在多种平台上运行。

有三个可用的版本:

- AFPL Ghostscript (以前的 Aladdin Ghostscript) 是对非商业用途免费的。它可如下
  得到:

    http://www.cs.wisc.edu/~ghost/

- GNU Ghostscript 可在 GNU General Public License 下,从以下地址得到:

    ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/

- 用于商业产品的一个商业版本。

更多关于 Ghostscript 的信息可以在这里找到:

  http://www.ghostscript.com/

该发布包含对许多非 PostScript 打印机的标准支持。如果你没找到对你的打印机的支
持,查一下 Ghostscript 网站了解如何支持其他缺省没有支持的打印机。


7.2 Ghostscript 预览器

Ghostscript 界面十分原始,所以有不少图形化的前端程序。它们提供了方便的
PostScript 文件选择,不同放大倍数的预览,还有打印。具体细节可查看它们提供的文
档。

X11

- Ghostview。可如下取得:

    http://www.cs.wisc.edu/~ghost/gv/

- gv。基于 Ghostview。可如下取得:

    http://wwwthep.physik.uni-mainz.de/~plass/gv/

  这里也能找到 (也许不是最新的):

    http://www.cs.wisc.edu/~ghost/gv/

OpenVMS

- 看起来,在主代码已经支持 (未经测试)。见:

    http://wwwthep.physik.uni-mainz.de/~plass/gv/

Windows 和 OS/2

- GSview。可如下取得:

    http://www.cs.wisc.edu/~ghost/gsview/

DOS

- ps_view。可如下取得:

    ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/
    ftp://ftp.dante.de/tex-archive/support/ps_view/

Linux

- GSview。流行的 Windows 和 OS/2 预览器的 Linux 版本。可如下取得:

    http://www.cs.wisc.edu/~ghost/gsview/

- BMV。和 Ghostview 与 gv 不同,它不使用 X 而使用 svgalib。可如下取得:

    ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz


7.3 PSUtils

PSUtils 是一组操作 Postscript 文档的工具程序。可以得到许多平台上的二进制发布和
完全的源代码。PSUtils 可如下得到:

  http://knackered.org/angus/psutils

我们感兴趣的工具包括:

- psnup.     把 PS 文件转化为 N-路打印版本。
- psselect.  选择页范围和打印顺序。
- psresize.  改变页面大小。
- psbook.    重新排列顺序和页面排版,从而打印成册。

一个程序的输出可以作为另一个的输入,从而可以创建复杂的打印文档。


N-路 打 印

psnup 工具把一个 VIM 生成的 PostScript 文件转化为一个 n-路版本 (即在一物理页上
打印 n 个逻辑页)。最简单的生成 2-路输出的方法是先如下一个创建 PostScript 文
件:

	:hardcopy > test.ps

然后在你的命令行上执行:

	psnup -n 2 test.ps final.ps

注意: 有些 Ghostscript 预览器可能会对 psnup 产生的文件给出警告 - 可以安全地忽
略。

最后,用你平台上的打印命令把 final.ps 输出到 PostScript 打印机上。(这以后,你
需要自己删除中间文件: 两个 PostScript 文件)。可以修改 'printexpr' 来执行这项打
印前的额外转换。


双 面 打 印 的 替 代 方 法

用 PS 工具 psselect 可以完成一个原始的双面打印任务。该工具有 -e 和 -o 选项,
可以分别打印一个 PS 文件的偶数页和奇数页。

先用 'hardcopy' 命令生成 PS 文件,然后如下生成只包含奇数和偶数页的新文件:

	psselect -o test.ps odd.ps
	psselect -e test.ps even.ps

然后用你平台上普通的打印命令打印 odd.ps。然后取出打印输出,翻过来,重新放到取
纸器里。然后用你平台上的打印命令打印 even.ps。现在,所有的偶数页面应该出现在奇
数页的反面。

要记住以下几点:

1. 第一页的位置。如果打印奇数页时第一页出现在最上方,那你需要倒转奇数页打印的
   顺序。这可以通过 psselect 的 -r 选项完成。这样可以保证第 2 页打印在第 1 页
   的反面。
   注意: 倒转奇数页的打印顺序比倒转偶数页更合适。因为原始的 PS 文件里可能有奇
   数页。

2. 纸张方位。取出奇数页的打印输出时,你或者需要横向翻转 (沿着长边),或者需要纵
   向翻转 (沿着短边),甚至有可能要旋转 180 度。这决定于打印机 - 桌上型的喷墨打
   印机可能比看不见纸张打印的路径的办公室激光打印机更明显一点。



8. 换页字符						*printing-formfeed*

缺省,VIM 不对换页 |formfeed| 控制字符作任何特殊处理。设置 'printoptions' 的
formfeed 项,使得 VIM 可以识别换页字符,从而在新的一页里打出当前行。换页字符
提供了较为原始的打印控制。不过,还是有若干事情需要注意。

VIM 总是从包含换页字符的那行开始打印 (如果有相应设置,还包括行号),即使它是这
一行的第一个字符。这意味着,如果以换页字符开头的一行刚好在一页的第一行,VIM 就
会打印完全空白的一页。

因为行号在包含换页字符的一行的开始打印,在新页打印的该行的其余部分就不会有行号
(和 'printoptions' 里置位了 wrap 项时长行的回绕行的打印结果相同)。

如果换页字符是一行的最后一个字符,那么打印会从新页的第二行而不是第一行开始。这
是因为 VIM 在换页字符后处理行尾,从而在继续打印之前先往下移动了一行。

根据以上几点,我们推荐如果使用换页字符处理,关闭行号的打印,而且不要在行尾用换
页字符。即使如此,你还是需要调整换页符之前的行的数目,以防止偶尔出现的空白页。


 vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2008年 03月 27日 星期四 17:04:45 CST