forked from ma6174/vim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprint.cnx
executable file
·646 lines (479 loc) · 27.6 KB
/
print.cnx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
*print.txt* For Vim version 7.3. 最近更新: 2010年7月
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 的程序用在别的打印机上。
备注: 如果用 |:hardcopy| 打印有问题,还有一个办法是用 |:TOhtml| 并在浏览器上打
印生成的 html。
*: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.de/english_examples/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: