summaryrefslogtreecommitdiff
path: root/Master/tlpkg/dviout/DOC/cmode.html
blob: 66b9ae2bf3cbd7a59dba814f425af9e51406f117 (plain)
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
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
<!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>dviout-cmode</title>
</head>

<body BGCOLOR="#eeffff">

<hr NOSHADE ALIGN="left" WIDTH="65%">

<h1 align="center">DVIware としての dviout</h1>

<hr NOSHADE ALIGN="right" WIDTH="65%">

<p align="center">May 5, 2005</p>

<p><a HREF="http://akagi.ms.u-tokyo.ac.jp/ftp-j.html#TeX" name="contents">TeX 
のページへ </a><br>
<a href="tex_dvioutw.html">dvioutのインストール</a></p>

<pre>
<b>目次</b>

 0. 序
 1. dvioutの基本
 2. 各種のDVIwareやワープロ
 3. gray scale
 4. 文字の色づけ - その1 -
 5. 文字の色づけ - その2 -
 6. 文字の重なり
 7. <a
href="#graphics">画像データの取り込み</a>
 8. <a href="#rotate">文字や画像の回転</a>
         <a
href="#BWvsColor">白黒画像とカラー画像</a>
         <a href="#rotPS">カラーPostScript画像の回転</a>
         <a
href="#BMC">BMC画像ファイル</a>
 9. <a href="#tpic">斜線やtpicによる描画</a>
10. <a
href="#printer">プリンタとの関わり</a>
   10.1. <a href="#Winprinter">Windows専用プリンタ</a>
           <a
href="#CheckDriver">プリンタドライバのチェック</a>
   10.2. <a
href="#PSprinter">PostScriptプリンタ</a>
   10.3. <a href="#color2bw">カラー画像の白黒印刷</a>
11. <a
href="#picture">画像出力</a>
   11.1. <a href="#cut">矩形領域の指定</a>
   11.2. <a
href="#BMPout">BMP/BMC画像出力</a>
   11.3. <a href="#EMFout">EMF画像出力</a>
   11.4. <a
href="#png">PNG/EPS等の画像出力</a>
   11.5. <a href="#PDF">PDF画像出力</a>
   11.6. <a href="#PSout">PostScript画像出力</a>
   11.7. <a href="#PDFT">PDF変換</a>
   11.8. <a href="#OTHER">上記以外の画像ファイルへの切り出し</a>
   11.9. <a href="#FAX">FAX送信</a>
12. <a href="#dviprt">dviprt機能</a>
   12.1. <a
href="#LBP">LBP用ドライバ</a>
   12.2. <a href="#raw">他のプリンタドライバの制御</a>
13. <a
href="#CompBMC">BMC画像の圧縮率</a>
</pre>

<h2>0. 序</h2>

<p><b>dviout</b>が如何にして preview 画面(= 
画像)を作成しているか、ということを解説します。<br>
それとともに、On-line Help のみでは解説が不十分と思われる </p>

<p>Option → Setup Parameters ... → [Graphic] の <br>
<br>
<b>cmode</b>: auto mode(p2), merge, replace(def), replace(bak), patch, patch2, auto 
mode(rep)<br>
<b>GIF</b>:&nbsp;&nbsp; raw PBM, monochrome BMP, BMP(16 colors), BMP(256 colors), BMP(full 
color)<br>
<b>gfit</b>:&nbsp; ON/OFF<br>
<b>gow</b>:&nbsp;&nbsp; ON/OFF<br>
<b>gclip</b>: ON/OFF<br>
</p>

<p>の説明をします。 </p>

<p>他の<b> WinDvi</b> や<strong> lips3dvi</strong> などとのDVIwareとの原理的な違い、あるいは 
PostScript printer を使うとき、どうして <b>auto mode(rep)</b> が良いか、Windows用のカラーインクジェットプリンタを 
使うときは、どうすれば高速に印刷できるか、など、プリンタと<b>cmode</b>との関係の解説もあります。 
<br>
</p>

<h2>1. dviout の基本</h2>

<p>DVIファイルはページ毎に独立に書かれており、何番(例えば2番)のフォントの何番 
(例えば65番)のコードの文字を、そのページのどの位置(<b>reference 
point</b>)に配置せよ、という 
命令のほか、中が詰まった矩形を縦横のサイズを指定して指定した場所に描け、という命令などか 
ら成っています。後者は、例えば罫線を引く場合に、線の太さと長さと引く位置を指定することに 
なります。 </p>

<p>全てのページ内容を記述したDVIファイルの最後には、そのDVIファイルで使われるフォントの情報が書 
いてあります。例えば、2番のフォントは<b>cmr10</b>(Compuer Modern 
Roman 10pt)を12ptのサイズで用いる、というような情報が書かれています。 
</p>

<blockquote>
  <p>フォントの番号はdvioutの <strong>Help → Font Info.</strong> 
  で表示されるもので、DVIファイルで便宜的に決められるものですが、文字のコード番号は、フォントに応じて決まっているものです(例えば、cmr10 
  の65番の文字は「A」にあたります)。 </p>
</blockquote>

<p><b>dviout</b>などの<b>DVIware</b>は、各フォントの使われる文字の画像データを得て、それを張り付けていくことにより、1ページの紙面の画像データを作成します。最も普通に使われるフォントの画像データは、<b>PKフォント</b>
と呼ばれる形式で、各文字の画像データが独自の方法で圧縮されて文字毎に収録 されています。
文字の画像データは、実際の文字の部分を囲む最小の矩形(<b>Bounding Box</b>)
で切りつめられており、指定位置(reference point)から見てBounding Box
をどこに配置すべきかの相対位置、次の文字との標準の空き、などの情報(これらは解像度と独立なデータ)も画像データ(これは解像度に依るデータ)と共に入っています。 
</p>

<p>通常の横書きでは、reference point 
は文字下部の基準線の左端に位置します。例えば「A」では 
ほぼ文字の最左下点ですが、「g」などでは、文字は基準線の下にもはみ出ています。また、「’」では 
Bounding Box は「A」の場合より小さく、Bounding Box をreference point 
から見て上の位置に配置 することになります。 </p>

<p>解像度が600dpi(600 dots/1 inch)でcmr10を12ptに拡大して使う場合のPKフォントは、通常 
<b>cmr10.720pk</b> という名前のファイルになっています。cmr10 という 
10pt のフォントを12ptのサイズで 使うため、720 = 600 x 12/10 
という数がファイル名に入っています。標準の10ptで使う場合のPKフォン 
トのファイル名は、<b>cmr10.600pk</b> となります。</p>

<p>dviout は、DVIファイルを解釈して、指定したページの紙面の画像データを作成します。具体的にはPKフォ 
ントから黒で描かれた<strong>文字の画像</strong>(Bounding Boxの大きさの矩形上に白の背景に黒で一つの文字が描かれた切手のようなものを想像すればよい)
を得て、空白(白とみなして良い)の紙面に張り付けていく、 
と考えればよいでしょう。そのほか、<strong>指定された矩形の部分を黒で塗りつぶす</strong>ことも行います。 
</p>

<p>このようにして紙面の画像データが完成すると、それをディスプレイ画面で表示したり、プリンタに出力することになります。これがdviout(あるいは多くのDVIware)の基本的な仕組みです。 
なお、Windowsでは<b>BMP画像形式</b>(あるヘッダ付きの無圧縮画像データ)が用いられますので、dvioutもこの形式で紙面の画像データを作成します。 
</p>

<p>元来のTeXの場合、紙面作成にはこの2つしか存在しません。カラー画像を張り付けたり、文字に色づけするのは、TeXの <strong>special</strong> 
という拡張したコマンドを使ってなされ、元来のTeXの仕様には定義されていません
(従ってこれは個々のDVIwareに依存する仕様になる)。 
これについては、後から述べます。 </p>

<p>Windowsの<b>TrueTypeフォント</b>などの場合も、WindowsのSystemから必要な文字の画像データを得ることにより、PKフォントと同様に考えることが出来ます。<br>
</p>

<h2>2. 各種のDVIwareやワープロ</h2>

<p>dviout 
は、紙面の画像データを作成することが基本ですが、単なる一つの画像データを受け付ける出力デバイスは多い上、そのコマンドは単純であるため、各種出力デバイスに対応することが出来ます。一方、ある出力デバイスに特化したDVIwareについては、別のやり方が可能です。 
</p>

<p>かつてよく使われた <b>lip3dvi</b>(Canon の LBP 用の DVIware)では、DVIファイルで使われる 
PKフォントの画像データをあらかじめLBPにダウンロードしておき、DVIを読んで、ページの開始・終了や、あるフォントのある文字をある位置に置け、という命令があると、それをプリンタ制御コマンド(LIPS 
III)の対応する命令に翻訳し、翻訳したその命令をプリンタに送ります。したがって、紙面の画像作成はプリンタ側で行われることになります。指定し 
た矩形を黒く塗りつぶす場合も同様です。 </p>

<p>なお、dviout での印刷においても <b>dviprt機能</b>を使えば、このような方法で印刷をすることができます。 
</p>

<p>このやり方は、他のDVIwareでも使われることがあり、たとえばインプレスの<b>WinDvi</b>では、基本的には 
MS Windowsに登録されたTrueTypeフォントを用い、「紙面のどの位置にどのフォントのどの文字をどのサイズで置け」という命令をWindowsのシステムに送ることにより、
Windows側で文字の画像データを作成して紙面に張り付けて紙面を完成させ、画面に出したりプリンタに出力したりします。すなわち、WinDvi は文字の画像データを扱わないのが基本となっています。 </p>

<p>dviout では<b>patch2</b>というモード(<b>cmode</b>)やデフォルトの印刷方式(<b>auto 
mode (p2)</b>)がこれにあたります。 </p>

<p><b>Word</b>や<b>一太郎</b>などのMS Windowsのワープロも、上記と同様な方法が用いられており、それは紙面作成のためのデータからMS 
Windowsの紙面作成コマンドへの翻訳機と見なすことができます。一方、 
dviout では、「文字の画像データという沢山の画像データを合成して一つの紙面の画像データを作成する」
という画像処理の要素が多分に入ることになります。 </p>

<p><b>dvipsk</b>などのDVIwareは、DVIの紙面作成命令を<b>PostScript言語</b>に翻訳するものであり、その後の紙面の画像データ作成は、<strong>PostScriptプリンタ</strong>や<b>Ghostscript</b>によってなされます。 
<br>
</p>

<h2>3. <a name="GrayScale">gray scale</a></h2>

<p>DVIwareにおいて、ディスプレイ画面に出力を行う<b>previewer</b>は印刷の場合とは異なった側面が 
あります。すなわち、高速に動作することと、低い解像度でそれなりに美しく表示することです。 
後者のために、<b>gray scale</b> という手法が用いられます。 </p>

<p>印刷では 600 dpi (600 dots/ 1 inch)
というのは普通ですが、ディスプレイの解像度はずっとそれより低いので、 
600 dpi 
用に作成された画像データでは、紙面が大きく拡大され、その一部のみが表示されることに 
なります。150 dpi 
程度に解像度を落とさないと、紙面全体を見ることが出来ません。このとき 
600 dpi の白黒の画像データを 150 dpi の gray scale 
画像に変換することができます。 </p>

<pre>
  ●○○○
  ●●○○
  ●●●○  →  ◎  黒が 9/16 で 明るさは 7/16(c=1), 4/16(c=0.5 でのγ補正)
  ●●●○
</pre>

<p>150 dpi の 1 dot は、600 dpi の 4 x 4 = 16 dots 
の部分に対応します。白を1、黒を0という数字 
で表し、その中間の灰色を明るさを 0 と 1 
の間の数字で表すことにします。「150 dpi の縮小画像の、ある 1 dot 
に対応する 600 dpi の画像の 16 dots のうち n dots 
が黒(文字や線の部分) に対応していた場合、150 dpi のその 1 dot 
を (1 - n/16) の明るさの灰色にする」というような 手法で 150 dpiのgray 
scale画像が得られます。 </p>

<p>たとえば、1 inch x 1 inch の白黒2値の画像は、600 dpi 
では 600 x 600 dots のサイズですが、150 dpi の gray scale に変換すると 
150 x 150 dots
のサイズになります。</p>

<p>その際に、若干調整をして、正数 c を用いて (1 - (n/16)<sup>c</sup>) 
の明るさにしています。これは <b>γ補正</b>と呼ばれます。c = 1 
のときが補正無しで、c が 0 
に近くなるほど、文字の周りが黒くなります(dviout の [Display] の <strong>contrast</strong> 
では <strong>high</strong> と表現されています)。 </p>

<p>dviout では、c が 0.01 から 6.00 の範囲で調整でき、デフォルトは 
0.80 としてあります。これは、 
ディスプレイや好みに応じて見やすいように調整するのが良いでしょう。また、dviout 
では、gray scale での白から黒までは、γ補正に応じた16 
段階に固定しており(600 dpi → 100 dpi でも同じ)、 このときdvioutで作成される画像データは 
<strong>16色</strong>(色は白から黒までの16段階で、γ補正に従って 
パレットで指定)の<strong>カラーBMP画像</strong>となります。このgray 
scaleのBMP画像をMS Windowsを通じてディプレイ 画面に表示します。 </p>

<p><img src="cmode1.png" WIDTH="165" HEIGHT="47"><img src="cmode2.png" WIDTH="166"
HEIGHT="47"><img src="cmode3.png" WIDTH="166" HEIGHT="48"><img src="cmode6.png"
WIDTH="166" HEIGHT="48"></p>

<p>上は、<a href="ftp://akagi.ms.u-tokyo.ac.jp/pub/TeX/font/bakoma/bakoma.lzh">BaKoMaのCM 
TrueTypeフォント</a>をLaTeXの \Large で用いた場合(<strong>cmr12</strong>が使われます)のdvioutの100 
dpi での表示からの画像コピーで、順にgray scale無し、そのあとは 200 
dpi, 300 dpi, 600 dpi からのgray scale です。</p>

<p>このdviout の gray scale 機能は、MS-DOS版のdvioutが一部Display Card用に対応していたことが元になっています。 
</p>

<blockquote>
  <p>一文字の画像を紙面に置く、ということをWindowsなどのSystemに任せているDVIwareの場合は、 
  あらかじめ gray scale 
  に変換された文字の画像データを張り付けます、あるいは、Windows 
  の TrueType フォントの場合では、gray scale によって文字を置くというSystemの機能を用いる 
  こともできます。 </p>
</blockquote>

<p>高解像度のディスプレイではあまり差は明らかではありませんが、以下の違いがあります。 

<ul>
  <li>dviout方式に比べ、gray scaleの文字画像を張り付ける方式では、文字間の間隔やbase 
    line の位置などが、並んだ文字で不揃いに見えることがあります。 </li>
</ul>

<ul>
  <li>600 dpi → 150 dpi の縮小によるgray scaleの例では、3 dots幅の横線は、dviout方式では 
    1/4の明るさの1 dot幅の横線になる場合と、1/2の明るさ1 dot幅と3/4の明るさの1 
    dot幅の合計2 dots幅の横線と場合があります。gray scale画像を張り付ける方式では、前者でしょう。文字の時も同様で、dviout方式では、同じ文字でも位置により線の端の画像が異なります。 
  </li>
</ul>

<dl>
  <dt><b>previewでの表示方法の違いについて</b></dt>
  <dd>dviout のデフォルトの表示方式は、ページ全体のBMP画像を作成しておき、WindowsのSystemによって 
    preview Windowに入る部分を表示します。一方、<strong>WinDvi</strong>や<b>patch2</b>方式では、文字などの描画命令に対し、preview 
    Windowに入る部分のみを解釈して表示します。従って、ページスク 
    ロールを行った場合、preview Windowに新たに入る部分を描画しなくてはなりません。その 
    ため、スクロールがより遅くなると思われます。また、MS Windowsのフォントのgray 
    scale やanti-aliasing機能が貧弱ならば、previewの画質が劣ります(γ補正などなし?)。<br>
  </dd>
</dl>

<h2>4. 文字の色づけ - その1 -</h2>

<p>dviout では、<strong>HyperTeX</strong>におけるホットスポットにあたる文字や、<strong>文字列検索</strong>で見つかった文字に対し、<strong> 
色づけ表示</strong>や<strong>アンンダーライン</strong>を付加することができます。特に前者は、Windows版のdvioutを作成する動機に 
なったものなので、dviout for Windowsの基本設計段階で組み込まれています。 
</p>

<p>この<strong>色づけの文字</strong>や<strong>アンダーライン</strong>などは、graphics 
package などによる文字の色づけと違って、previewのみに関係し、色を付けたり消したりが容易に出来る必要がある一方、色数は多い必要がありません。またpreview 
での gray scale 
に応じて、色づけした文字にも同様な処理が望まれます(カラーの時は、<b>anti-aliasing</b> 
と言います)。 </p>

<p>基本的な8色、それに対する2種類16段階の anti-aliasing用ということで、2・8・16 
= 256 のカラーパレットを用意し、<strong>256色BMP画像</strong>として表示画面を作成することで対応しています。2種類というのはnormal背景と色づけ背景で、例えば、赤を指定した場合、
normal背景では 文字色赤と背景色白の間をγ補正を考慮して16段階の色とし、
色づけ背景では、文字色黒と背景色赤の間のanti-aliasingとします。
なお、graphics packageのcolor.styなどによって<strong>背景色を指定</strong> 
した場合、その背景色と文字色との間でanti-aliasingを行います。 </p>

<p>dviout では、たとえば 600 dpi の紙面の画像(背景は白、文字は黒の2色画像)を用意し、 
その際、HyperTeXのホットスポットなどのために色づけすべきBondingBoxの紙面での位置をすべて記憶しておきます。次にたとえば、150 dpiに縮小し、
16段階のgray scaleにした上記 256色BMPに変換します。
その後、色づけすべきBoundingBoxに属する dots のすべての色を変更します。</p>

<p>赤の文字の場合、黒から白までの 16 段階の gray scale 
が、赤から白までの 16段階のanti-aliasing 
に変更され、紙面は白のままで、文字はanti-aliasing処理がなされた赤の文字となります。具体的には、カラーパレットを表す8ビットのうち、色を表す3ビットを変更することになります(残りの5ビットのうち、4ビットが gray scale に、1ビットが反転背景かどうかに対応)。 </p>

<p>アンダーラインや箱で囲む場合は、その線に対応するdotに 
対し、反転背景色と文字色とのanti-aliaslingを逆にしたものに変更します(元が復元可能、すな 
わち、可逆な操作にするためこうなっています。青で線を引くと文字と重なった部分は黒にな 
ります。よって、文字の色づけとアンダラインの同時指定の場合の処理は、より複雑です)。 
</p>

<p>色づけされる文字のBoundingBoxの中に、色づけされない文字が入っていた場合は、そちらの文字も色づけされてしまうことになりますが、使われる目的から言って大きな支障はないと考えています。 
</p>

<blockquote>
  <p>なお、<b>WinDvi</b> のような形式(dviout での<b>patch2</b>のモード)におけるWindowsのTrueTypeフォントの文字出力は、WindowsのSystemが行うので、その際に文字色指定をするだけで、上記と比べて極めて簡単に色づけが実現されます。次項の文字の色づけも区別が無く同様です。<br>
  </p>
</blockquote>

<h2>5. <a name="DefBack">文字の色づけ</a> - その2 -</h2>

<p>LaTeX2eのgraphics packageのcolor specialなどで、文字に色を付けた場合を考えましょう。 
このときは、previewにおいても印刷においても指定した色で正確に出力することが望まれます。 
一方、フルカラー(24bits)で600dpiのA4サイズの紙面に必要なBMPファイルのサイズは約100M 
byte 
のサイズとなり、処理を快適に行うにおいて現実的なサイズを超えており、WindowsのSystem 
が扱う場合にも様々な支障が生じてしまいます。そこで、以下のような方法を取ります。 
</p>

<p>一文字毎に画像ファイルを(文字色と背景色の)2色BMP形式で作成し、印刷の時は紙面全体の画像に色づけされた一文字の画像を順に張り付けてから出力する操作をWindowsのSystemの関数を通じて行います。dvioutのワークエリア上には、紙面全体の大きなBMP画像の他、色づけ文字の小さな<strong>2色BMP画像</strong>を複数保持することになります。 
</p>

<p>画面表示も同様ですが、anti-aliasingの処理が入ります。すなわち、一文字の2色BMP画像はサイズを縮めてanti-aliasingを行った<strong>16色BMP画像</strong>に変換しておき、それを印刷の時と同様 
WindowsのSystemの関数を通じて、紙面と合成して出力します。このときの 
anti-aliasing を文字色と背景色で行うか、あるいは(graphics package 
に従って、dviout内部での色指定は色の push/pop を使います) 
その一つ前の色のスタックで定義されている色(それが無ければ背景色)で行うかを選択できます 
(cmode の<b>replace(def)</b> と<b>replace(bak)</b>)。但し、前者でも文字色が白の場合は、 
背景色は黒とみなします。<br>
</p>

<h2>6. 文字の重なり</h2>

<p>dvioutでの1ページの紙面にあたるBMP画像作成は、黒で一文字が描かれた切手のようなものを白い紙面に貼っていく、というような操作である、と述べました。
このとき、「切手」が重なりなく貼られていけば問題ありませんが、重なりが生じたときに問題が生じます。
透明な紙に黒で文字が描かれた「切手」ならば良いでしょうが、BMP画像には「<strong>透明色</strong>」というものは存在しません。 
</p>

<p>欧文タイプライタで「¥」の文字を、「Y」と「=」との重ね打ちで作る、ということがありましたがTeXでもこのようなことはよく行われます(たとえば、\sqrt[n]{2} 
や AMSフォントを使わない場合の \hvar 
で重なりが生じます)。画像データは、それぞれ </p>

<pre>
  ●○○○○○●       ●○○○○○●
  ○●○○○●○       ○●○○○●○
  ○○●○●○○       ○○●○●○○
  ○○○●○○○       ○○○●○○○
  ○●●●●●○       ○○○●○○○       ●●●●●
  ○○○●○○○       ○○○●○○○       ○○○○○
  ○●●●●●○       ○○○●○○○       ●●●●●
  ○○○●○○○       ○○○●○○○
  ○○○●○○○       ○○○●○○○
</pre>

<p>であるとします。 </p>

<table border="1" align="left">
  <tr>
    <th> </th>
    <th>AND</th>
    <th>OR&nbsp;&nbsp;</th>
    <th>XOR</th>
  </tr>
  <tr>
    <td>(1,1)</td>
    <td align="center">1</td>
    <td align="center">1</td>
    <td align="center">0</td>
  </tr>
  <tr>
    <td>(1,0)</td>
    <td align="center">0</td>
    <td align="center">1</td>
    <td align="center">1</td>
  </tr>
  <tr>
    <td>(0,1)</td>
    <td align="center">0</td>
    <td align="center">1</td>
    <td align="center">1</td>
  </tr>
  <tr>
    <td>(0,0)</td>
    <td align="center">0</td>
    <td align="center">0</td>
    <td align="center">0</td>
  </tr>
</table>

<p>白黒2色の時、白と黒をそれぞれ1と0で表し、画像は1と0とを並べて表すとします。上の図では、○が1に●が0にあたります。画像の合成は、この1と0に対する(重なりが生じた)各点毎の演算 
<b>AND</b>, <b>OR</b>, <b>XOR</b> によって表すことが出来ます。 </p>

<p>OHP(オーバーヘッドプロジェクタ)で、透明シートに黒で描かれた字をスクリーンに投影することを考えてみましょう。このとき、AND 
は、「字が描かれた2枚のOHPシートを重ねて投影する」ことに対応します。また、OR 
は、2枚のOHPシートに対し、「OHPを2台用意して、同じスクリーンに重ねて投影すること」に対応します。これは、後述のカラー画像でも同様です。<br
clear="all">
<br>
よって、ANDの操作を行えば正しく文字の重ね合わせがなされます。この合成を「<b>merge</b>」 
と呼ぶことにします。実際、dviout は merge によって紙面のBMP画像を作成するのが基本です。 
一方、切手を貼るように「Y」の上に「=」を張り付けると下左のようになってしまいます(なお、OR 
や XOR は下中や下右のようになります)。</p>

<pre>
     ●○○○○○●         ●○○○○○●     ●○○○○○●
     ○●○○○●○         ○●○○○●○     ○●○○○●○
     ○○●○●○○         ○○●○●○○     ○○●○●○○
     ○○○●○○○         ○○○●○○○     ○○○●○○○
     ○●●●●●○         ○○○●○○○     ○●●○●●○
     ○○○○○○○         ○○○○○○○     ○○○●○○○
     ○●●●●●○         ○○○●○○○     ○●●○●●○
     ○○○●○○○         ○○○●○○○     ○○○●○○○
     ○○○●○○○         ○○○●○○○     ○○○●○○○
        張り付け                 OR                XOR
</pre>
また、貼る順番を逆にすると、「=」が隠れてしまいます。この画像合成を「<b>貼り付け</b>」 と呼ぶことにします。</p>

<p>Windows のPostScriptプリンタでの印刷や <strong>xdvi</strong> 
での表示では、「張り付け」現象が生じて上記の不具合が起きることがあります。このとき、後者では 
<strong>overstrike</strong> のWarningが出ます(前者は<a href="#PSprinter">ドライバのバグ</a>です)。 
</p>

<p>色づけがなされた文字の場合は、より難しい問題が生じます。 
色は、24bitで表されているとします。16進数で <strong>ffffff</strong>, <strong>ff0000</strong>, 
<strong>00ff00</strong>, <strong>0000ff</strong>, <strong>000000</strong> 
が、それぞれ白、赤、緑、青、黒といった具合です。<strong> ffff00</strong>は黄色に、<strong>808080</strong>は灰色に対応することになります。この場合の画像合成も色を表す<strong>24bit整数</strong>についての 
<strong>AND</strong>,<strong> OR</strong>, <strong>XOR</strong> が考えられます。 </p>

<p>「Y」は緑で「=」は赤として、「Y」の上に後から「=」を描くとしたとき、下図の最左図 
が望むものであるとしましょう。このような合成を「<b>replace</b>」と呼ぶことにします。 
<font color="#008000">●</font>は緑に、<font color="#FF0000">★</font>は赤に対応しています。「merge」すなわち 
AND 
で合成すると、中左図のようになり、色が重なった◆は黒になってしまいます。一方、「張り付け」では、中右図のようにな 
りこれも望むものではありません。 </p>

<p>dviout は以下のように「replace」を実現しています。すなわち、後から描く「=」の画像の色パレットを変えて<font
color="#FF0000">★</font>を白、○を黒にした画像を用意し、それともとの画像とを 
OR で合成 
します。すると後から描かれる文字の部分のみ白抜きされます。その後、色パレットを元に戻 
して AND で合成すれば、望みのものになります。「merge」より複雑なステップを踏むことになります。 
</p>

<p>なお、後で描かれる文字が黒の時は「merge」のみでOKで、また、白のときは★を白、○を黒にした画像による OR のみでOKです(dviout もこの最適化を行っています。
後者は<strong>白抜き文字</strong>のときに、 黒で矩形を描いた後に使われます)。 </p>

<pre>
  <font color="#008000">●</font>○○○○○<font color="#008000">●</font>     <font
color="#008000">●</font>○○○○○<font color="#008000">●</font>     <font
color="#008000">●</font>○○○○○<font color="#008000">●</font>
  ○<font
color="#008000">●</font>○○○<font color="#008000">●</font>○     ○<font
color="#008000">●</font>○○○<font color="#008000">●</font>○     ○<font
color="#008000">●</font>○○○<font color="#008000">●</font>○
  ○○<font
color="#008000">●</font>○<font color="#008000">●</font>○○     ○○<font
color="#008000">●</font>○<font color="#008000">●</font>○○     ○○<font
color="#008000">●</font>○<font color="#008000">●</font>○○
  ○○○<font
color="#008000">●</font>○○○     ○○○<font color="#008000">●</font>○○○     ○○○<font
color="#008000">●</font>○○○
  ○<font color="#FF0000">★★★★★</font>○     ○<font
color="#FF0000">★★</font>◆<font color="#FF0000">★★</font>○     ○<font
color="#FF0000">★★★★★</font>○    <font color="#FF0000">★★★★★</font>
  ○○○<font
color="#008000">●</font>○○○     ○○○<font color="#008000">●</font>○○○     ○○○○○○○    ○○○○○
  ○<font
color="#FF0000">★★★★★</font>○     ○<font color="#FF0000">★★</font>◆<font
color="#FF0000">★★</font>○     ○<font color="#FF0000">★★★★★</font>○    <font
color="#FF0000">★★★★★</font>
  ○○○<font color="#008000">●</font>○○○     ○○○<font
color="#008000">●</font>○○○     ○○○<font color="#008000">●</font>○○○
  ○○○<font
color="#008000">●</font>○○○     ○○○<font color="#008000">●</font>○○○     ○○○<font
color="#008000">●</font>○○○
     replace             AND             張り付け               
</pre>

<p>表示の際の「replace」は anti-aliasing の問題と絡んできますが、dvioutは文字が少しでもかかる部分を白、それ以外を黒という色パレットにして 
OR の操作を行い、その後、元に戻してanti-aliasing処理をした文字画像の「merge」を行っています。 
</p>

<p>dviout では、カラー文字の描画はWindowsのSystemの関数を使った合成でなされますが、あるページでDVIを順に見て白と黒しか使われていない段階、あるいは、<strong>cmode</strong> 
が<strong>merge</strong>の場合は常に、 白や黒の文字は紙面BMPに直接描かれます。具体的には白抜き文字など、黒の背景に白で描く場合に意味を持ちます。紙面BMPを作成した後、WindowsのSystemを使って色つき文字描画やカラー 
画像の張り付けがなされますが、(「merge」と異なり)「relace」は描画順序に依存するため、 
このような仕様になっています。 

<ul>
  <li>色づけ文字の画像の「merge」の際、dvioutは文字の無い部分は全て「白」にして 
    AND の操作を行います。color special 
    で背景色が青、文字が赤の場合は、preview用のanti-aliasingを行った16色画像は、文字のかからない部分は白に、文字のかかった部分は赤と青との間のanti-aliasingされた画像ということになります。</li>
</ul>

<ul>
  <li>背景色と文字色が同じ場合は、anti-aliasing処理で異なった色パレットに同じ色が割り当てられることになります。パレットを使っているので、文字の部分と文字以外の部分との区別が256色の 
    8 bit 中の 3 bit を見るだけで可能なので「replace」などの操作が容易に行えます。</li>
</ul>

<ul>
  <li>dviout for Windowsでは、反転画面がサポートされています(黒の画面に文字が白という、MS-DOS版のdvioutと同じ)。このときは、この節で述べたことは白と黒とを逆にし、AND 
    と OR も逆にして解釈します。従って、「merge」は OR 
    による合成となります。</li>
</ul>

<p><strong>cmode</strong> が <b>auto mode(p2)</b> や <b>auto mode(rep)</b> の場合の 
preview の際は、 基本的には「replace」ですが、より簡単な「merge」でそれが実現されると推測される場合は、 
「merge」で代用します。 </p>

<p>色づけされた矩形あるいは線を描く場合も同様で、それをカラーBMP画像として保存し 
カラー文字と同様な処理をします。但し、矩形や線の場合は 1 dot x 
1 dot のサイズのカラーBMP画像として保存しておき、紙面に描画の際に縦横実際のサイズにWindowsのSystem関数により拡大して合成します。 
</p>

<p><b>patch2</b>では、WindowsのTrueTypeフォントの場合や矩形塗りつぶしの場合は、BMP画像に変換する必要はなく、 
Systemの文字等の描画関数を使えば通常「replace」の操作が可能です。PKフォントの場合はBMP画像 
となるので、この節で述べたやり方が使われます。 </p>

<p><b>patch</b>は、一文字とか線とかの全ての描画要素をBMP画像として作成しておき、DVIに現れてくる 
順序に従ってWindowsのSystem関数を使って合成していく、という出力形態です。すなわち、全ての文字や線がカラー画像データである、と見なした処理と考えることができます。 
</p>

<p><a href="#contents">目次へ</a></p>

<h2>7. <a name="graphics">画像データの取り込み</a></h2>

<p>PostScript画像の場合も、それ以外の画像の場合も、dviout 
での取り込み画像の処理はBMP画像 
として得て合成することになります(PBM 
などのこともあるが、以下の原理は同じ)。 実際 PostScript画像の場合は、GhostScriptを通じてBMP画像に変換したファイルをdvioutが用いる 
ことになります。 </p>

<blockquote>
  <p>ただし、<strong>WMF/EMF画像</strong>は、WindowsのSystem関数を使った画像の描き方が記された形式であるので、WindowsのSystemに任せて処理します(付属の 
  <strong>sample.dvi</strong> の Graphic specials 
  のページには、それを使った例があるので、その画像をルーペなどで拡大してみると、実際<strong>メッシュの細かさが変化します</strong>)。</p>
</blockquote>

<p>文字画像の場合と異なり、BMP画像の場合は背景色の概念がないので、dvioutでは紙面との画像合成は「<b>merge</b>」(<b>gow</b> 
の<strong>OFF</strong>)または「<b>張り付け</b>」(<b>gow</b> の<strong>ON</strong>)のどちらかを選ぶことになります 
。 白黒画像の時は、必要ならばスケール変換を行って紙面BMPに 「merge」または「張り付け」で描きます。カラー画像や<b>patch2</b>の場合は、Windowsの関数で、必要ならスケール変換を行って 
「merge]または「張り付け」を行います。 </p>

<p>PostScript画像の時は、Ghostscriptを通じて必要なサイズの画像を得ることが出来るので、スケール変換は不要と考えられますが、表示の際の縮小gray 
scale画像との関係で選択肢が生じます。 パラメータ <strong>GIF</strong> 
がカラーBMPでない場合は、縮小画像の解像度でなくて、もとの大きなサイズで画像を得て、紙面BMPに合成し、その後gray 
scaleに変換します。よって、比較的綺麗な画像となり、 
また白黒画像ファイルなので、サイズもあまり大きくありません。<strong>GIF</strong> 
がカラーのBMPとなっている場合、元のサイズで画像を得るか(<b>gfit</b> 
の<strong> OFF</strong>)、縮小したものを使うか(<b>gfit</b> の <strong>ON</strong>)が選択できます。 

<ul>
  <li>Windowsの関数でカラー画像を合成の際縮小すると、anti-aliasing処理が満足できるものでないので、最初から縮小画面を作成して合成したものに比べて、品質が悪くなります。 
  </li>
</ul>

<ul>
  <li>previewでgray scale表示を行っているとき、その縮小比に応じたカラーBMP画像を使う場合は、縮小比を変えると、あるいは、previewと印刷との間で、Ghostscriptによる画像の再生成のオーバヘッドが生じます。 
  </li>
</ul>

<p>通常使われるEPSF形式のPostScript画像は、指定されているBoundingBoxをはみ出て描画が行われているものがあるので、BoundingBoxよりも上下左右<strong>1 
inch</strong>ずつ大きなサイズでBMP画像を生成するようにできます(<b>gclip</b> 
を<strong>OFF</strong> にする)。 <b>gclip</b> を<strong>ON</strong>にする事により、BoundingBoxのサイズのBMP画像になります。 
特に<b> gow</b> が<strong> ON</strong> の「張り付け」のときは、自動的に<b> 
gclip</b> が<strong> ON</strong> になります。 </p>

<p><a href="#contents">目次へ</a></p>

<h2>8. <a name="rotate">文字や画像の回転</a></h2>

<p>文字や画像の<strong>回転</strong>や<strong>変形</strong>があると、カラーや 
anti-aliasing の問題と絡んで、より複雑な処理にな ります。 </p>

<p>まずWindowsのSystemにおける基本的事項を述べます。 

<ul>
  <li>WindowsのSystemは、画像を回転して出力することをサポートしていません。 
  </li>
  <li>文字については、TrueTypeフォントの文字について、回転しての出力が可能です。</li>
  <li>画像や文字の変形しての出力は、縦横のスケール変換程度しかサポートされていません。</li>
  <li>TrueTypeフォントの文字を任意の一次変換によって変換した画像を得ることは可能です。</li>
</ul>

<p>白黒画像の場合は、dvioutが紙面BMP画像に描画しますので、拡大・縮小のみならず任意角の回転を含む任意の一次変換が原則として可能です。一方、カラー画像や<b>patch2</b>のモードでは、Windows 
の System が描画を行うので、90度の整数倍以外の角度での変換は出来ません。縦横のスケール変換は可能です。 
</p>

<p>カラー文字の回転は、通常は文字毎に回転したBMP画像を得て、必要ならanti-aliasing処理を行った 
BMP画像にして張り付けるので問題ありません。ただし、<b>patch2</b>でTrueTypeフォントを使った場合は、 
回転や色づけによる描画をWindows の Systemがサポートしているので、より綺麗な出力が期待でき 
ます(印刷の際)。この場合も、複雑な変形を伴う場合は、BMP画像にしてから合成します。 

<dl>
  <dt><a name="rotPS"><b>カラーPostScript画像の回転</b></a></dt>
  <dd><a href="#rotate">上記の理由</a>で、回転の角度が90度の整数倍のみサポートされています。このときは、その回転を行ったBMP画像をGhostScript 
    によって作成し、それを用いています。画像回転処理を元のPostScriptファイルに書き込んでおけばそれ以外 
    の角度で回転を行った画像が取り込めます。例えば、45度回転を行った画像は 
    ◇ の形ですが、生成される画像データはそれを囲む □ 
    の形になるので、背景が白でない場合や、「貼り付け」(<b>gow</b>)によって 
    取り込む場合は注意が必要です。 </dd>
</dl>

<dl>
  <dt><a name="BWvsColor"><b>白黒画像とカラー画像</b></a></dt>
  <dd>白黒画像とは、ここでは白黒2値の画像のことを言っています。従って、 
    gray scale 画像はカラー画像と見なします。またカラー原画のPostScript画像に対し、<strong>GIF</strong> 
    を <b>raw PBM</b> または <b>monochrome BMP</b> としてGhostscriptを通じて得た画像は、色の違いが適当な白黒のパターンによって表現されていますので、白黒画像です。また、白黒のPostScript画像を256色BMP画像形式で 
    出力した場合、カラーパレットは256色存在しますが、実際に画像で使われるのは白と黒の2色のみ 
    です。dviout は、BMPの画像形式だけでなく、実際に画像で使われている色のチェックを、カラーパ 
    レットのみならず画像の中身を読んで行っていますので、この場合も白黒画像と判断されます。</dd>
</dl>

<dl>
  <dt><a name="BMC"><b>BMC画像ファイル</b></a></dt>
  <dd>dvioutはPostScript画像の取り込みに対し、Ghostscriptを起動して必要なサイズのBMP画像ファイルとして出力し、それを用います。このとき、必要なら左右反転や90度回転などの操作を行ったBMP画像を得ています。dvioutは、再度そのBMP画像を使う時(例えばpreviewで別のページに移動して戻ってきたとき)に再利用するため、独自の圧縮形式の<strong>BMC画像ファイル</strong>に変換しておきます。但し、回転などの変形を行って作成したBMP画像ファイルは、そのページのみで有効で、ページを移動した場合は破棄されます。同じPostScript画像が、あるページで回転せずに、別のページで回転して、と2回使われた場合、対応する画像ファイルを区別することが困難なためです。再利用可能なBMC画像ファイルは、もとの画像ファイル名の拡張子を<strong> 
    .bmc</strong> に変えたものです。同じPostScript画像を同一ページで別サイズで取り込む場合も、後の方はテンポラリなファイルとなり、再利用されません。</dd>
  <dt> </dt>
  <dt><a href="#contents">目次へ</a></dt>
</dl>

<h2>9. <a name="tpic">斜線やtpicによる描画</a></h2>

<p><strong>斜線</strong>(すなわち回転した矩形領域の塗りつぶし)は、通常のTeXの矩形塗りつぶしに 
graphics packageなどの回転が組合わさった場合に生じます。また、<strong>tpic 
specials</strong>では、斜線や<strong>自由曲線の描画</strong>、それらで<strong>囲まれた領域のパターンでの塗りつぶし</strong>や、内部に既にあった文字などの<strong>消去</strong> 
が可能です。さらに <strong>color special</strong> 
と関連して、塗りつぶしが<strong>色つきのパターン</strong>で行われること 
も想定されます</p>

<p>まず、通常の<b>auto mode(p2)</b>などの場合を考察します。 
黒の線での描画や適当なパターンでの塗りつぶし、あるいは、閉領域内部の消去などは、紙面の白黒2色BMP画像に対して直接行ないますので、問題ありません。</p>

<p>例えば、赤で紙面に対角線を引いた場合を考えてみましょう。全体を囲む矩形は紙面と同じサイズとなり、似たような直線や曲線を何本も引くことを想定すると、そのような矩形領域をBMP画像ファイルとして作成して後から合成する方法では困ります。そこで 
dvioutは、カラーの斜線や回転したカラーの中が詰まった矩形は、(縦横のサイズに限界を設けた)小さなサイズに分割して複数のBMPファイルとして保存し、WindowsのSystem関数を用いて、後から紙面と合成します。<strong>tpic</strong>によるカラーの線画も同様です。</p>

<p><strong>閉領域の塗りつぶしや消去</strong>は<strong> tpic </strong>の持つ機能ですが、実際は 
1 dot ずつ内部かどうか判断しながら描かれます。このとき、1 dotずつのカラーBMP画像として保存していくと、画像数が膨大になって不具合が生じます。このような場合、dvioutは仮想紙面を用意し、そこに塗りつぶしや消去のパターンを生成し、(線画の時と同様に、必要ならそれを適当に分割して)カラーBMPファイルとして保存して、後からWindowsのSystem関数で紙面との合成の処理を行います。</p>

<p><strong>patch2</strong>の場合は、基本的にWindowsの描画関数を使います。Windowsの描画関数の場合、太さと色を与えたブラシを定義し、それで線を画くこと、また、頂点を指定した多角形領域を指定した色で塗りつぶすことができます。実際は、前者の方が後者より高速に処理されます。しかしながら、ブラシが太い場合、線を引いても始点と終点に対応する辺が直線にならず、矩形またはそれを回転した形にはなりません。</p>

<p>dvioutでは、回転の無い矩形の場合は、細いブラシで何度も平行な線を画くことにより矩形の塗りつぶしを実現しています(多角形領域の塗りつぶし関数を使うよりも遙かに高速です)。斜線の場合は、線がある程度細い時にはブラシによる線画、そうでないときは矩形領域の塗りつぶし関数を使っています。</p>

<p>なお<strong>patch2</strong>では、色が黒かカラーかによる動作の差はありません。ただ、<strong>白のブラシ</strong>を指定して描いても何も描かれないので(透明な筆? 
- 理由は不明です)、白の場合は、ほぼ白の色<strong> fefefe </strong>を指定して描くことによって、下に描かれたものの実質的な消去を実現しています。</p>

<p><a href="#contents">目次へ</a></p>

<h2>10. <a name="printer">プリンタとの関わり</a></h2>

<p>dviout での印刷はいくつか方法がありますが、ここではdviprt機能を使わない、Windowsのプリンタ 
ドライバによる通常の印刷を考察します。 </p>

<p><b>cmode</b>との関係で、以下の印刷方法の違いがあります。</p>

<table BORDER="1">
  <tr>
    <th>cmode=</th>
    <th>auto mode(p2)</th>
    <th>merge</th>
    <th>replace(def)</th>
    <th>replace(bak)</th>
    <th>patch</th>
    <th>patch2</th>
    <th>auto mode(rep)</th>
  </tr>
  <tr>
    <th>表示</th>
    <td>auto mode(rep)</td>
    <td>merge</td>
    <td>replace(def)</td>
    <td>replace(bak)</td>
    <td>patch</td>
    <td>patch2</td>
    <td>auto mode(rep)</td>
  </tr>
  <tr>
    <th>印刷</th>
    <td>patch2</td>
    <td>merge</td>
    <td>replace</td>
    <td>replace</td>
    <td>patch</td>
    <td>patch2</td>
    <td>auto mode(rep)</td>
  </tr>
</table>

<p>dviout 
は、プリンタの解像度に合わせた印刷ページに対応する白黒BMP画像を作成し、それをWindows 
のSystemを通じて印刷するのが基本でした。その際、カラー画像などの要素があれば、それもBMP画像 
として用意してWindowsのSystemによって合成して出力する、という訳です。画像処理的な部分を出来るだけ 
dviout 側で行う、という方針です。 </p>

<h3>10.1. <a name="Winprinter">Windows専用プリンタ</a></h3>

<p>プリンタ(+ドライバ)にとっては、完成された紙面の白黒BMP画像を印刷する方が、TrueTypeフォン 
トの文字や線を描いて紙面を作成する処理も行って出力するより、遙かに楽なはずですが、MS 
Windows 
が普及し、安値なカラーインクジェットプリンタが使われるようになると、プリンタメーカの競争から 
MS Windowsに特化されたプリンタで、通常使われる印刷方式(たとえば、Wordとかでなされる方式、すなわち、dviout 
ではWindowsのTrueTypeフォントを使った<b>patch2</b>方式にあたる)でのみ高速化や高品位化がなされるように開発が進んだようです。そのような状況から、dviout 
for Windows では、Ver.3.08 から <b>patch2</b> 
モードがサポートされました。 </p>

<p>あるカラーの<strong>インクジェットプリンタ</strong>での実験では 

<ul>
  <li>プリンタの解像度は 1200dpi 
    となっているが、実際に印刷可能な画像データは、300dpiであった(なお、カラープリンタの解像度(dpi) 
    というのは、白黒プリンタと違って、極めて不明確である(一つのドットでフルカラーの色が表現できる訳ではない)。 
    白黒プリンタの場合は、よりはっきりしているが、それでも 1200dpi 
    相当などと書いてあって、実際 
    のコントロール可能な解像度とは異なる大きな値になっていることがある)。</li>
</ul>

<ul>
  <li>WindowsのTrueTypeフォントを、WindowsのSystem関数を使って出力した場合(<b>patch2</b>)、300 
    dpi より 高解像で文字が印刷されるようである。</li>
</ul>

<ul>
  <li>Windowsに登録されたTrueTypeフォントをWindowsの描画関数を使って描画したり、あるいは、線を描く 
    Windowsの描画関数を使っていて、それ以外のBMP画像の描画やカラーの要素が含まれていない場合、印 
    刷は極めて高速化される(10 sec/page 程度)。一方、BMP画像が一つだけ、あるいは、カラー文字が 
    一文字だけでも含まれていると、極端に遅くなる(1 min/page 以上)。</li>
</ul>

<p>という結果になりました。このようなWindows専用プリンタの普及を考えて、<b>auto 
mode(p2)</b> 
が現在デフォルトになっています。すなわち、表示の際は<b> auto 
mode(rep)</b> で、印刷の際は<b> patch2</b> 
に切り替えるというものです。 </p>

<p>上記の結果から、<b>patch2</b>方式での印刷で高速化を行うためには、フォントは全てWindowsに登録された 
TrueTypeフォントを使うことが望ましいことになります。なお、通常和文フォントはWindowsのTrueType 
フォントが使われています。なお、この速度はページ単位で決まりますので、カラー要素がないページやPKフォントが使われていないページが高速印刷されることになります。 
</p>

<p>一方、<b>patch2</b>を使っていても、欧文でPKフォントを使っている場合は、このような高速化の効果が無く、逆に多くの画像張り付けの処理をプリンタドライバが行うため、速度が却って遅くなったり、 
不具合が生じる場合もあります。 

<dl>
  <dt><a name="CheckDriver"><b>プリンタドライバのチェック</b></a></dt>
  <dd><b>auto mode(p2)</b> では、印刷は<b>patch2</b>方式で行います。従って、印刷に不具合があるとき、 
    <b>cmode</b> を<b>patch2</b> にし、最大に拡大した状態(Display → Size → 
    Magnify 
    を実行してもそれ以上拡大されない状態)にしておくと、表示と印刷とでは、WindowsのSystemに対して全く同一の描画コマンドとデータを送ることになり、出力デバイスの指定のみが異なります。よってこのとき、表示に問題が無くて印刷に不具合があるならば、Windowsのプリンタドライバかプリンタなどdviout以外に不具合がある 
    ことになります。</dd>
  <dt> </dt>
</dl>

<h3>10.2. <a name="PSprinter">PostScriptプリンタ</a></h3>

<p>PostScriptプリンタ用のWindowsのドライバは、Windowsのプリンタドライバが一般的にサポートするデータを入力して、PostScript言語に翻訳することになります。PostScript言語では、画像合成は 
「張り付け」のみサポートされているようで、画像の AND, OR, XOR 
などの合成命令からの翻訳は 
ドライバがすべきですが、実際はうまく行われない、という<strong>Windowsのプリンタドライバの仕様を満たさない根本的な不具合</strong>を抱えているようです。たとえば、 
<strong>白抜き文字が印刷できない</strong>、というようなことになります。また、そのような不具合で結果がどうなるかは、Windows95/98用 
の PostScriptプリンタドライバとWindowsNT/2000用とで異なっているようです。 
</p>

<p>さらに、多くの画像や大きな画像を合成して印刷する、というような場合(例えば、<b>patch2</b>で 
PKフォントを使い、さらにカラー画像を張り込む、といった場合の出力)、メモリーなどから来る機能制約のためか、いくつかの画像要素が無視されて、それが出力されなかったり、間違って出力される、というような事例が多く 
報告されています。 </p>

<p>上記は、例えば市販の画像処理ソフトから印刷を行う場合のPostScriptプリンタの不具合としても知られているようです。以上の理由から、PostScriptプリンタで、PKフォントを使う場合や画像の取り込みが 
ある場合は、プリンタドライバ側での画像合成操作を最少にする<b>auto 
mode(rep)</b> を用いると、 多くの不具合が解消されるようです。 
さらに、プリントダイアログにおける<strong> Unite job</strong> 
のチェックをはずすと、状況が改善されるかも知れません。</p>

<blockquote>
  <p>PostScriptプリンタを使う場合は、<strong>dvipsk</strong> などのDVIファイルからPostScriptへの変換プログラムを用いて印刷すれば、WindowsのPostScriptプリンタドライバの上記不具合などの問題点が無く印刷できます。特に、<strong>PSTrick</strong> 
  などのPostScriptに特化されたspecialsを使っている場合は、こちらでないと印刷できません。なお、<a
  href="#raw">dvioutのGUIを使ってdvipskによる印刷をする</a>ことも可能です。</p>
</blockquote>

<h3>10.3. <a name="color2bw">カラー画像の白黒印刷</a></h3>

<p>カラーのPostScript画像を、白黒プリンタなどを使って、適当な白黒のパターンで表現して印刷するという場合があります。dvioutは、カラーから白黒変換などの画像の変更は一切行いません。従って 
dvioutが白黒化した画像を受け取るか(これは、Ghostscriptが作成します)、プリンタドライバがカラー画像を白黒化するかのどちらかです。なお、ここでいうカラーのPostScript画像というのは、 
gray scale画像も含まれています。この変換を 

<ol>
  <li>Ghostscript側で行う場合は、<b>GIF</b> を <b>raw PBM</b> または、<b>monochrome 
    BMP</b>と指定します。 </li>
  <li>プリンタドライバ側で行う場合は、プリンタドライバの設定を変えることにより、様々な調整が可 
    能な場合があります。 </li>
  <li>Ghostscriptが出力したカラー画像ファイルを、別のプログラムを使って白黒画像に変換するという 
    方法もあります。 </li>
</ol>

<p>手間はかかりますが、よいプログラムを使うならば 3. が最良でしょう。
また、プリンタドライバの性能次第では 2. が良いこともあります。
一方、1. や 3. ではプリンタに依らない結果が得られることになります。 </p>

<p><a href="#contents">目次へ</a></p>

<h2>11. <a name="picture">画像出力</a></h2>

<p>dvioutで表示されている紙面を、プリンタにでなく画像データとして出力したい場合があります。用途によって最適な方法が異なります。また、画像やカラー文字が入っているかどうかによっても異なります(EMFまたはBMP形式画像形式として、クリップボードにコピーすることも可能です -- October 9, 2002版以降)。
</p>

<blockquote>
  <p><strong>注意</strong>:適当な外部プログラムを用いることによって、dvioutから出力されるBMP/BMC/EMF/PNG/PDF/EPS画像を、必要なら画像処理をして 
  BMP/PNG/JPEG/EPS画像などに変換することができます(例えば、付属の<strong>ifbmc.spi</strong> 
  をグラフィックコンバータ<a href="http://homepage1.nifty.com/beny/">BTJ32</a>に登録して使うと便利)。</p>
</blockquote>

<h3>11.1. <a name="cut">矩形領域の指定</a></h3>

<p>Ver.3.12.2 (June 29, 2001) 以降では、Display → Region → On 
(Nov. 25, 2002 以降は <b>CTRL+[</b> にデフォルトで割り当てられている)の後、切り出す矩形の左上頂点と右下頂点をマウスカーソルで示し、それぞれマウスの左ボタンと右ボタンを、SHIFTキーを押した状態でクリックして指定します。
<ul>
<li>切り出す矩形が赤の枠で示されます。</li>
<li>修正が必要ならその頂点を再度同様に指定します(このとき、拡大表示にした方が、より正確に指定できます)。</li>
<li>設定した矩形領域を画像として出力したり、Display → Region → Cut 
で切り出すことができます。</li>
<li>ページ全体を画像ファイルにする場合は、矩形領域を指定する必要はありません。</li>
<li>
dviout がより古い版の場合は、以下のようにします。 </p><p>
<ol>
  <li>preview画面で切り出す矩形の<strong>左上端</strong>にマウスカーソルを持っていき、<strong>CTRL+SHIFT</strong> 
    を押しながらマウスの左ボタンをクリックします。</li>
  <li>その点の座標が表示されるので、<strong>Option → Setup Parameters... → 
    [Paper] </strong>の <strong>OX</strong>, <strong>OY</strong> に cm で示された値を<strong>100倍</strong>して 
    mm に直し、<strong>マイナス</strong>に符号を変えて設定して<strong>[OK]</strong>で抜け出ます。</li>
  <li>左部と上部がカットされますが、それが適当でなければ、上記のパラメータ 
    <strong>OX</strong>, <strong>OY </strong>を再調整します。</li>
  <li>切り出す矩形の<strong>右下端</strong>にマウスカーソルを持っていき、<strong>CTRL+SHIFT</strong>を押しながらマウスの左ボタンをクリックして、その点の座標を得ます。</li>
  <li><strong>Paper → User Defined</strong> を選んで、座標のcmの値を<strong>100倍</strong>してmmに直し、<strong>Width</strong> 
    と <strong>Height</strong> 
    に設定します。必要なら微調整します。これは上の Option → Setup 
    Parameters... → [Paper] からも設定可能です。</li>
</ol>
</li></ul>
<h3>11.2. <a name="BMPout">BMP/BMC画像出力</a></h3>

<p>WEBページなどに張り付けるような場合で、白黒部分の切り出しに適します。 
カラー文字やカラー画像は除かれます。 

<ol>
  <li>解像度(<strong>[Resolution] → dpi</strong>)やコントラスト(<strong>[Display] 
    → contrast</strong>)および縮小率を調整し、希望の画像を得て、それを 
    <strong>File → Save as Image</strong> を選んで <strong>BMP/BMC画像</strong>として出力します。</li>
  <li>必要なら、適当な画像処理プログラムによって<strong>PNG/GIF/EPS画像</strong>などに変換します(文字画像には、<strong>JPEG</strong>は圧縮率が低く適さない)。</li>
</ol>

<p>なお、gray scale 変換など、画像処理プログラムによって画像を加工する場合は、縮小しないで(すなわち、プレビュー画面を最大に拡大表示して)白黒2値のBMP/BMC画像ファイルとして出力しておくと良い。 
</p>

<h3>11.3. <a name="EMFout">EMF画像出力</a></h3>

<p>他のワープロやプレゼンテーションためのプログラムで作成するページに張り付ける場合などに適します。そのプログラムが<strong>EMF</strong>(Windows 
Enhanced MetaFile)に対応している必要があります。<strong>File → Save as 
Image</strong> を選んで <strong>EMF画像</strong>として出力します。</p>

<p>この場合、フォントは<strong>Windows TrueType </strong>を使うことが望まれます。<strong>patch2</strong> 
にあたるモードで出力され、<strong>EMF</strong> にはWindowsのSystem関数を使った描き方が記録されます。文字や線や色づけなど、それの描き方が記録されるので、サイズの変換に対応したファイルを作成することが可能です。ファイルサイズは比較的大きくなります。</p>

<h3>11.4. <a name="png">PNG/EPS等の画像出力</a></h3>

<p>Susie plug-in の出力版にあたる ABC 出力プラグイン(画像出力用DLL)を用いることにより、各種の形式でプレビュー画面を切り出して画像ファイルにすることができます(July 
2, 2001以降)。どの形式になるかは、指定したファイルの拡張子で判断されます。</p><p>
<strong>256色以下の画像に対応しているもの</strong>が必要で、現在 
<a href="http://www.asahi-net.or.jp/~kh4s-smz/">PNG 用の ABC出力プラグイン</a>や
<a href="http://at.sakura.ne.jp/~t-mz/">ラスター形式EPS 用の ABC出力プラグイン</a>
が存在します。
</p><p>
画質や解像度等の調整については、<a href="#BMPout">BMP/BMC画像出力</a>のときと同じです。
<ul>
<li>ABC出力プラグイン、すなわち、PNGやEPS用の出力プラグイン <strong>expng.xpi</strong>, <strong>exeps.xpi</strong> 
などは、Susie plug-in と同じディレクトリか、そのサブディレクトリ 
<strong>exp_plug</strong> 、あるいは dviout のディレクトリに入れておくと、dviout 
により認識されます。</li>
<li>カラー文字やカラー画像には非対応です。</li>
<li>PNG形式では、<a href="#CompBMC">サイズが小さい画像ファイル</a>となります。</li>
<li>出力ファイル名の拡張子で画像形式が決まります。たとえば、 All files を選び、
出力ファイルの拡張子を eps とする(たとえば、<font color="blue">fig1.eps</font>)
ことによって、EPS形式で出力されます。</li>
</ul>

<h3>11.5. <a name="PDF">PDF画像出力</a></h3>
<p>dvipdfmx 20040204以降および dviout Ver.3.16 以降が必要ですが、
矩形領域を指定し、その領域を PDF形式画像ファイルに変換して出力する
ことが出来ます。
拡張子 .pdf を用いれば、自動的に PDF 変換になります。</p>

<h3>11.6. <a name="PSout">PostScript画像出力</a></h3>
<p>DVIファイルをPostScriptファイルに変換するには、dvipsk や dvi2ps 
などを用いるとよいでしょう。また、Windows の PostScriptプリンタドライバに 
dviout から出力する方法もあります。ここでは、画像を切り出して<a
href="#dviprt">dviprt機能</a>を使い、ビットマップ形式の<strong>EPSFファイル</strong>を作成する方法を述べます。</p>

<p>切り出す部分を指定し、Display → Region → Cut で<a href="#cut">カット</a>しておきます。dviout 
のパッケージに含まれるコンフィギュレーションファイルの <strong>epsimage.cfg</strong> 
を、Option → Setup Parameters... → [Printer] の<strong> [CFG file]</strong> 
ボタンで選択します。印刷ダイアログで、<strong>dviprt</strong> と <strong>Print 
to file</strong> をチェックしてファイルに出力すると、-dpi: 
で指定された解像度の白黒画像の<strong>EPSF形式</strong>画像ができます(前項の方法と異なり、画面の拡大/縮小とは無関係で、
カラー文字やカラー画像取り込みには非対応)。
同様なやり方で、<strong>g3fax.cfg</strong>や<strong>dvi2pbm.cfg</strong>を使うことにより、
<strong>G3FAX形式</strong>や<strong>PBM 形式</strong>画像出力が出来ます。</p>

<h3>11.7. <a name="PDFT">PDF変換</a></h3>

<p>PDF形式の画像は、DVIファイルのように複数ページをまとめて扱うことが出来ます。また、汎用性が高く、フォント埋め込みなどに注意して作成すれば、高解像度の印刷にも向くファイルとすることができます。</p>

<p>PDFファイルの作成は、dvioutからPrinterドライバにAcrobat <strong>PDF 
Writer</strong>を指定して作成する、<strong>dvipsk</strong>を使って<strong>PostScript</strong>ファイルに変換し、それを 
Acrobat <strong>Distiller</strong> によってPDFファイルにする、<strong>PDFTeX</strong>を使う、<strong>dvipdfm</strong> 
を使う、など多くの方法があります。現時点では<a
href="texinst98.html#dvipsk">dvipsk とDistiller を使う方法</a>が最も勧められるようですが、版によっては、あるいは使い方によっては不具合が生じることがあるので、注意が必要です。 
また、日本語に対応がなされた<strong> dvipdfmx</strong> も勧められるでしょう。</p>
<p>Ver.3.15.1 以降では 
2nd tool button のニコニコマークのボタンにデフォルトでPDFへの変換が定義されています
。dvipdfm(x)を用います。
Option->Choose Parameters... からは種々のやり方が定義されています。</p>
<p>dviout でも<strong>フォントや画像の埋め込み機能</strong>がサポートされているので、<strong>DVI 
ファイル + dviout for Windows</strong> を <strong>PDFファイル + Acrobat Reader </strong>のように考えることもできます。</p>

<h3>11.8. <a name="OTHER">上記以外の形式の画像ファイルへの切り出し</a></h3>
<p>
File → Save as Image... (矩形領域を指定しての切り出しをサポート)で,拡張子により外部のDVIファイルから画像ファイルへの変換用の一般的なプログラムを呼ぶことが可能(Ver.3.16以降).
11.5 の<a href="#PDF">PDF画像出力</a>は,この機能で実現されている.
<p>
拡張子 .foo の画像ファイル出力の場合,utility\dvi$foo.bat に変換の手順を書い
ておけば,それが呼び出される.渡されるパラメータは
<pre>
   %1  横の原点移動  (単位は cm).デフォルト(移動なし)は 2.54cm
   %2  縦の原点移動  (単位は cm).デフォルト(移動なし)は 2.54cm
   %3  紙面の横幅    (単位は cm)
   %4  紙面の縦の長さ(単位は cm)
   %5  出力するページの番号(1つのみ)
   %6  DVIファイルのフルパス名(" " で囲まれた形式)
   %7  出力ファイルのフルパス名
   %8  横の移動      (単位は cm).デフォルト(移動なし)は 0cm
   %9  縦の移動      (単位は cm).デフォルト(移動なし)は 0cm
</pre>
<h3>11.9. <a name="FAX">FAX送信</a></h3>

<p>Windowsのプリンタドライバとして<strong>FAX送信</strong>が組み込まれていれば、それとモデムとを使ってdvioutから直接FAX送信が可能です。</p>

<p>解像度は<strong> 200 dpi </strong>程度が適当でしょう。印刷ダイアログで、<strong>Unite 
job</strong> 
のチェックが外れていると、各頁毎に別々に送信することになるので注意。</p>

<p><a href="#contents">目次へ </a></p>

<h2>12. <a name="dviprt">dviprt機能</a></h2>

<p>dviout for Windowsの前身であるMS-DOS版のDVIwareは、previewer の dviout と 
printer driver の dviprt の2つに別れており、特に dviout 
はパソコンのグラフィック表示機能の違いから、PC-9801用とDOS/V用というように別のプログラムになっていました。 
dviout for Windowsは、パソコンのグラフィック画面の制御が不要なため、MS-DOS版dviprtを元に開発されたものですが、MS-DOS版でのdviprtの機能をdviout 
for Windowsでも実現するものが、dviout for Windowsの<strong>dviprt機能</strong>です。 
</p>

<p>dviprt機能は、「白黒2色の紙面画像を個々のプリンタの制御コードを用いて直接プリンタに送って印刷する」というのが基本となっています(よって<strong>カラー非対応</strong>)。MS-DOS時代に使われたプリンタの多くは、その制御コードが公開されていたので、このことが可能でした。個々のプリンタの制御コードの違いに対応するため、<strong>プリンタ定義ファイル</strong>を用意し、それに従って出力する、というものです。この定義ファイルの仕様は、付属の 
<strong>cfg\optcfg.dvi </strong>に詳しい解説があります。</p>

<p>optcfg.dvi の入っているフォルダーに定義ファイル <strong>*.src</strong> 
をパックしたものが入っています。多くの人の協力で種々のプリンタに対する定義ファイルが作成され、実際50種類以上のものが入っています。定義ファイルは、<strong>optcfg.exe</strong> 
で dviout が解釈可能な<strong> *.cfg</strong> 
ファイルに変換し(変換したものもパックして入れてあります)、それをパラメータ 
<strong>dviprt </strong>に指定することで、その機能を有効にできます。</p>

<p>出力先は、プリンタとは限らないので、FAXモデム用の定義ファイルや画像ファイル出力用の定義ファイルも存在します。画像ファイル出力用としては、<a
href="#PSout"><strong>G3FAX</strong>, <strong>PBM</strong>, <strong>EPSF</strong> 
の形式用</a>があります。</p>

<h3>12.1. <a name="LBP">LBP用ドライバ</a></h3>

<p>MS-DOS時代から高品位で高速なプリンタとして <strong>LBP</strong>(Laser 
Beam Printer)が使われています。特にMS-DOSには、高品位で自由にサイズ変更可能な和文フォントをシステムが持っていなかったため、そのようなフォントを内蔵しているLBPへの対応が望まれ、dviprtは早い時期にLBPに対応しました。対応が行われたLBPの制御コードは、Canonの<strong>LIPS III/IV </strong>および Epson の <strong>ESC/Page</strong> です。</p>

<p>dviprt機能のLBP対応の基本は、次の2つです。 

<ul>
  <li><strong>プリンタ内蔵の和文フォント</strong>使用</li>
  <li><strong>フォントのダウンロード機能</strong></li>
</ul>

<p>プリンタ内蔵の和文フォント使用では、TeXのどのフォントに対してどのようにプリンタ内蔵のフォントを使うか(各種の装飾や変形が可能)、あるいは使わないか、を指定できます。LBP対応の印刷は、以下のように<strong>2パス</strong>でなされます。</p>

<p>ダウンロードするフォントについては、欧文のみ、あるいは(プリンタ内蔵フォントを使う設定になっていない)和文フォントも含めるかどうか指定できます。dvioutはダウンロードの可能性のあるフォントの使われている文字を、実際に印刷するページに渡って調べ、その文字サイズや頻度に応じてソートし、ダウンロード容量や使用頻度を考慮してダウンロードするものを決定します。
dvioutはダウンロードする文字のセットを(欧文文字も和文文字も区別せずに)組みなおして、新たな1 byteの文字コードを与えた複数の新たな欧文フォントセットとして定義して、文字の画像データをLBPにダウンロードします。</p>

<p>そのあと、各ページ毎の印刷を行いますが、各ページに対応する白黒2色のBMP画像は、ダウンロードされなかった文字(たとえば、1回しか使われない文字とか、サイズが大きすぎてダウンロードができない文字)や取り込みが指定された白黒画像などのみが貼り付けられた、空白の多いものになります。
dviout はこの空白の多い画像を、適当に細かく分割し、分割された小画像のうち空白でないもののみを抽出して(これはLBP対応でないdviprt機能での印刷も同じ)そのデータをLBPに送り、さらに内蔵フォントやダウンロードされたフォントの文字を、フォント選択コマンドと文字コードで呼び出してページを完成させて印刷します。</p>

<blockquote>
  <p>MS-DOS版では、ページ全体の画像データを作成するだけのメモリーが取れなくて、ページをいくつかに分割して画像データを作成していましたので、より複雑でした。</p>
</blockquote>

<p>そのほか、LBPの仕様上の問題点に関連して種々の複雑なことがありますが、ここでは省略します。なお、各種のオプション機能については、On-line 
Help の<strong> 概要 →&nbsp; 印刷 → dviprtによる印刷 → LBP用ドライバ</strong> から<strong>サブパラメータ</strong>を参照してください。MS-DOS版からほとんど機能は変わっていないので、パラメータ指定はGUIでなくて文字列での指定になっています。</p>

<p>dviprt機能のLBP対応印刷は、個々のプリンタに対応したWindowsのドライバを使った印刷よりはるかに高速であり(特に大量のページを含む文書)、Windowsのドライバを使うということで生じる不確定要素がないので、現時点(2002年)でもdviout開発者によって使われています。</p>

<h3>12.2. <a name="raw">他のプリンタドライバの制御</a></h3>

<p>「dviout でpreviewを行うが、dvipskなど他のプリンタドライバから出力したい」という場合への対応もdviprt機能と呼びます。これは今まで述べたdviprt機能と意味が異なっていますが、やはりパラメータ dviprt で設定します。</p>

<p>印刷のページや順序の指定、紙面サイズの指定など、dviout 
の印刷ダイアログのGUIを使って指定したものを、どのような書式でどのようなプログラムに渡すか、ということをパラメータ 
dviprt に指定します。詳しくは、On-line Help のパラメータ <strong>-dviprt:</strong> 
の解説などをご覧ください。</p>

<p>その例は、Ver.3.14.3以降では Option->Choose Parameters... の選択肢にありますので、その例を参考に環境に合わせて書き直すと便利に使えるでしょう。</p>

<p>外部のプリンタドライバのプログラムの出力先が<strong>標準出力</strong>の場合、Windowsではプリンタへのリダイレクトが正常に動作しない場合があります。dvioutのパッケージには、Windowsの<strong> 
rawプリンタドライバ</strong> 
を使って標準出力やファイルの内容をそのままプリンタに送るためのプログラム<strong> 
rawprt.exe</strong> 
を添付してあるので、それを利用すれば問題が解決します。</p>

<h2>13. <a name="CompBMC">BMC画像の圧縮率</a></h2>

<p>dviout で使われているBMC画像形式(可逆圧縮)の圧縮率を調べてみました。dviout付属のepsfdoc.dvi 
をサンプルとしました。紙面サイズは、A4 です。画像は</p>

<blockquote>
  <p>\includegraphics*[height=10cm]{golfer}<br>
  \includegraphics*[height=6cm]{tiger}</p>
</blockquote>

<p>によって300dpiとして作成したものです。文書の方は600dpiを用いています。<br>
<br>
epspdoc(2) : 最初のページを 600 dpi で B/W(2色)画像としたもの。<br>
epsfdoc(16): 最初のページを 600 dpi/6 として gray scale(16色)画像としたもの。<br>
golfer(256) : golfer.ps を 256色で画像ファイルにしたもの<br>
tiger(256)&nbsp; : tiger.eps を 256色で画像ファイルにしたもの<br>
golfer(full)&nbsp; : golfer.ps を full color(24 bit)で画像ファイルにしたもの<br>
tiger(full)&nbsp;&nbsp; : tiger.eps を full color(24 bit)で画像ファイルにしたもの<br>
</p>
<div align="left">

<table border="1" width="754" height="2">
  <caption><strong>画像データサイズ(byte)</strong></caption>
  <tr>
    <td width="130" height="31"></td>
    <th width="61" height="31" align="center">BMP</th>
    <th width="55" height="31" align="center">BMP+LZH </th>
    <th width="55" height="31" align="center">BMP+GZIP</th>
    <th width="61" height="31" align="center">BMC</th>
    <th width="70" height="31" align="center">BMC+LZH </th>
    <th width="78" height="31" align="center">PNG</th>
    <th width="67" height="31" align="center">PNG+LZH </th>
    <th width="53" height="31" align="center">GIF</th>
    <th width="75" height="31" align="center">GIF+LZH</th>
  </tr>
  <tr>
    <th width="130" height="32">epsfdoc(2)</th>
    <td width="61" height="32" align="right">4378046</td>
    <td width="55" height="32" align="right">189330</td>
    <td width="55" height="32" align="right">190107</td>
    <td width="61" height="32" align="right">204831</td>
    <td width="70" height="32" align="right">148307</td>
    <td width="78" height="32" align="right">204643</td>
    <td width="67" height="32" align="right">197189</td>
    <td width="53" height="32" align="right">291454</td>
    <td width="75" height="32" align="right">291454</td>
  </tr>
  <tr>
    <th width="130" height="32">epsfdoc(16)</th>
    <td width="61" height="32" align="right">486838 </td>
    <td width="55" height="32" align="right">46648</td>
    <td width="55" height="32" align="right">46976</td>
    <td width="61" height="32" align="right">57062</td>
    <td width="70" height="32" align="right">48486</td>
    <td width="78" height="32" align="right">48208</td>
    <td width="67" height="32" align="right">47451</td>
    <td width="53" height="32" align="right">52497</td>
    <td width="75" height="32" align="right">52407</td>
  </tr>
  <tr>
    <th width="130" height="33">golfer(256)</th>
    <td width="61" height="33" align="right">1144286</td>
    <td width="55" height="33" align="right">15458</td>
    <td width="55" height="33" align="right">15294</td>
    <td width="61" height="33" align="right">23932</td>
    <td width="70" height="33" align="right">12369</td>
    <td width="78" height="33" align="right">21401</td>
    <td width="67" height="33" align="right">21294</td>
    <td width="53" height="33" align="right">22643</td>
    <td width="75" height="33" align="right">22643</td>
  </tr>
  <tr>
    <th width="130" height="32">tiger(256)</th>
    <td width="61" height="32" align="right">485350</td>
    <td width="55" height="32" align="right">25447</td>
    <td width="55" height="32" align="right">25249</td>
    <td width="61" height="32" align="right">46858</td>
    <td width="70" height="32" align="right">25807</td>
    <td width="78" height="32" align="right">29415</td>
    <td width="67" height="32" align="right">29160</td>
    <td width="53" height="32" align="right">31884</td>
    <td width="75" height="32" align="right">31884</td>
  </tr>
  <tr>
    <th width="130" height="32">golfer(full)</th>
    <td width="61" height="32" align="right">3429678</td>
    <td width="55" height="32" align="right">23054</td>
    <td width="55" height="32" align="right">22028</td>
    <td width="61" height="32" align="right">40337</td>
    <td width="70" height="32" align="right">16038</td>
    <td width="78" height="32" align="right">28167</td>
    <td width="67" height="32" align="right">27432</td>
    <td width="53" height="32" align="center">---</td>
    <td width="75" height="32" align="center">---</td>
  </tr>
  <tr>
    <th width="130" height="31">tiger(full)</th>
    <td width="61" height="31" align="right">1447206</td>
    <td width="55" height="31" align="right">30958</td>
    <td width="55" height="31" align="right">31766</td>
    <td width="61" height="31" align="right">95170</td>
    <td width="70" height="31" align="right">31639</td>
    <td width="78" height="31" align="right">44921</td>
    <td width="67" height="31" align="right">44628</td>
    <td width="53" height="31" align="center">---</td>
    <td width="75" height="31" align="center">---</td>
  </tr>
</table>
</div>

<p align="center"> </p>
<div align="left">

<table border="1" width="754" height="2">
  <caption><strong>圧縮比(%)</strong></caption>
  <tr>
    <td width="121" height="31"></td>
    <th width="69" height="31" align="center">BMP</th>
    <th width="56" height="31" align="center">BMP+LZH </th>
    <th width="57" height="31" align="center">BMP+GZIP</th>
    <th width="61" height="31" align="center">BMC</th>
    <th width="72" height="31" align="center">BMC+LZH </th>
    <th width="76" height="31" align="center">PNG</th>
    <th width="67" height="31" align="center">PNG+LZH </th>
    <th width="53" height="31" align="center">GIF</th>
    <th width="75" height="31" align="center">GIF+LZH</th>
  </tr>
  <tr>
    <th width="121" height="32">epsfdoc(2)</th>
    <td width="69" height="32" align="right">100.000</td>
    <td width="56" height="32" align="right">4.378</td>
    <td width="57" height="32" align="right">4.325</td>
    <td width="61" height="32" align="right">4.679</td>
    <td width="72" height="32" align="right">3.388</td>
    <td width="76" height="32" align="right">4.674</td>
    <td width="78" height="32" align="right">4.504</td>
    <td width="53" height="32" align="right">6.657</td>
    <td width="75" height="32" align="right">6.657</td>
  </tr>
  <tr>
    <th width="121" height="32">epsfdoc(16)</th>
    <td width="69" height="32" align="right">100.000</td>
    <td width="56" height="32" align="right">9.582</td>
    <td width="57" height="32" align="right">9.649</td>
    <td width="61" height="32" align="right">11.720</td>
    <td width="72" height="32" align="right">9.960</td>
    <td width="76" height="32" align="right">9.902</td>
    <td width="78" height="32" align="right">9.747</td>
    <td width="53" height="32" align="right">10.783</td>
    <td width="75" height="32" align="right">10.765</td>
  </tr>
  <tr>
    <th width="121" height="33">golfer(256)</th>
    <td width="69" height="33" align="right">100.000</td>
    <td width="56" height="33" align="right">1.351</td>
    <td width="57" height="33" align="right">1.337</td>
    <td width="61" height="33" align="right">2.091</td>
    <td width="72" height="33" align="right">1.081</td>
    <td width="76" height="33" align="right">1.870</td>
    <td width="78" height="33" align="right">1.861</td>
    <td width="53" height="33" align="right">1.979</td>
    <td width="75" height="33" align="right">1.979</td>
  </tr>
  <tr>
    <th width="121" height="32">tiger(256)</th>
    <td width="69" height="32" align="right">100.000</td>
    <td width="56" height="32" align="right">5.243</td>
    <td width="57" height="32" align="right">5.202</td>
    <td width="61" height="32" align="right">9.654</td>
    <td width="72" height="32" align="right">5.317</td>
    <td width="68" height="32" align="right">6.061</td>
    <td width="78" height="32" align="right">6.008</td>
    <td width="53" height="32" align="right">6.569</td>
    <td width="75" height="32" align="right">6.569</td>
  </tr>
  <tr>
    <th width="121" height="32">golfer(full)</th>
    <td width="69" height="32" align="right">100.000</td>
    <td width="56" height="32" align="right">0.672</td>
    <td width="57" height="32" align="right">0.642</td>
    <td width="61" height="32" align="right">1.176</td>
    <td width="72" height="32" align="right">0.468</td>
    <td width="68" height="32" align="right">0.858</td>
    <td width="78" height="32" align="right">0.771</td>
    <td width="53" height="32" align="center">---</td>
    <td width="75" height="32" align="center">---</td>
  </tr>
  <tr>
    <th width="121" height="31">tiger(full)</th>
    <td width="69" height="31" align="right">100.000</td>
    <td width="56" height="31" align="right">2.139</td>
    <td width="57" height="31" align="right">2.196</td>
    <td width="61" height="31" align="right">6.576</td>
    <td width="72" height="31" align="right">2.186</td>
    <td width="68" height="31" align="right">3.104</td>
    <td width="78" height="31" align="right">3.084</td>
    <td width="53" height="31" align="center">---</td>
    <td width="75" height="31" align="center">---</td>
  </tr>
</table>
</div>

<p>BMC画像形式は、圧縮率を目指したものでなくBMP形式との相互変換の容易さと高速性とを目指したものです。対象とする画像ファイルは、PostScript画像や文書紙面、グラフや線画など文書で使われるものです。フルカラーなどの写真画像には適さないと思われます。上記の圧縮率を見ると、BMC(+LZH)はそう悪くない成績となっています。</p>

<hr>

<p><a href="#contents">目次へ</a><br>
<a HREF="http://akagi.ms.u-tokyo.ac.jp/ftp-j.html#TeX">TeXのページへ</a><br>
<br>
誤りや補足すべき点があればお知らせ下さい --&gt; <a
href="mailto:ftp-admin@akagi.ms.u-tokyo.ac.jp">ftp-admin@akagi.ms.u-tokyo.ac.jp</a><br>
</p>
</body>
</html>