summaryrefslogtreecommitdiff
path: root/Master/tlpkg/dviout/dvispc.txt
blob: a1396cd41656b6fb9079a9ee026f69df26130f7b (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
[2]       Modify a DVI file to be page-independent in specials
[1]       Translation between  DVI file  <->  Text file
                   Ver.0.2  written by SHIMA, Jan. 2003

Usage: dvispc [-c] [-bv] input_dvi_file [output_dvi_file]
       dvispc -d input_dvi_file
       dvispc -s [-p..] input_dvi_file [output_text_file]
       dvispc -a [-jltv][-p..][-r..] input_dvi_file [output_text_file]
       dvispc -x[..] [-dltv][-r..] [input_text_file] output_dvi_file
   -c: make page-indepent DVI in specials for color push/pop, background, pn
   -d: check page-independence
   -b: backup original even if output_dvi_file is not given
   -s: show specials
   -a: translate DVI to Text
   -x: translate Text to DVI (-x0:str0 1:chkfnt 2:variety)
   -v: verbose       -j: Japanese characters       -l: location
   -r: replace  (-rorg_1=new_1/org_2=new_2...  eg. -rxxx=special/fnt=font)
   -p: T:preamble  L:postamble  pages with - (eg: -pT-L  -pT2/4-8L  -p-4 etc.)
   -t: comaptible to DLT (the followings are suboptions if necessary eg. -t02)
       0:str 1:ch 2:ch2 3:cmd 4:c-sum 5:dir/name 6:err 7:page 8:oct 9:str0
   output_text_file : stdout if it is not specified.
   input_text_file  : stdin  if it is not specified.


         *****************************************************
[1]      **  DVI ファイルとテキストファイルとの間の相互変換 **
         *****************************************************

-a: DVIファイルを可読なテキスト形式に変換します。

-x: -a オプションの逆変換で可読なテキスト形式からDVIファイルへ変換します。
    stack の深さとunderflow, page数, アドレスなどは自動修正される。
    -x0 は -x -t9 と等価
    最初の文字が小文字のアルファベット以外で [ ] \ のいずれでもない行は無視
    される。
    有効な行は以下の形で、各ブロックは空白で区切られる

<key>  <number><comment>  ...  <number><comment>  '<string>'  <any comment>

    <key>: code を表すキーワード
    <number>: 10進数または、0x で始まる16進数、または 0 で始まる8進数
    <comment>: 空であるか、先頭が数字(含16進数)や空白を含まない文字列。
               <number> に続けて空白を入れずに表記。コード生成では無視される。
    <any comment>: 空であっても、間に空白があってもよい。コード生成では無視。

    <number><comment> のブロックの数、および '<string>' が必要かどうかは、
  <key> によって以下のように定まっている。

<key> のリスト(X: 1 - 4   XX: 0 - 127   YY: 0 - 63)
    <key>                        <number><comment>  '<string>'
    pre                          :      5              1
    bop                          :     11              0
    nop, eop, push, pop          :      0              0
    setcharXX                    :      0              0
    fntnumYY                     :      0              0
    setX, putX, rightX, downX    :      1              0
    setrule, writerule           :      2              0
    w0, x0, y0, z0               :      0              0
    wX, xX, yX, zX               :      1              0
    fntX                         :      1              0
    fntdefX                      :      6              1
    xxxX                         :      1              1
    dir                          :      1              0
    post_post                    :      6 - 9          0

    DTL において不正なコードを表す以下も有効(Text -> DVI)
    opcode                       :      1              0

    DTL における以下の表記も可能です。

      push    ->  [    pop    ->  ]
      fntnum  -> fn    set    ->  s   put -> p   right  ->  r   down -> d
      setrule -> sr    putrule -> pr  fnt -> f   fntdef -> fd

dvispc を使って、DVIファイル -> テキスト形式 -> 編集 -> DVIファイル が可能です
以下によって、foo1.dvi の 4,5,6,8 ページのみを抽出して、foo2.dvi が作成される。

dvispc -atpT4-6/8L foo1.dvi | dvispc -x foo2.dvi

次のようにしても同じです。

dvispc -atpT4-6/8L foo1.dvi | dvispc -x > foo2.dvi

-p オプション:DVI -> Text における出力指定(指定した順に出力される)
    T: preambre
    L: postambre
    <n>: <n>ページ
    <n1>-<n2>: <n1>ページから<n2>ページまで
               <n1> の指定がないと、<n1>は 1 と解釈される
               <n2> の指定がないと、<n2>は最後のページと解釈される
    これらは、必要なら適当な区切りで区切って並べて指定できる

    -pT-L       デフォルト(全てを解釈)
    -pTL        preambre と postambre のみ
    -p3-15/20L  3ページから15ページまでと20ページとpostambre

-x : 0: toggle  文字列の長さは、実際に指定した文字列に従う
     1: toggle  不要なフォント定義を削る
     2: toggle  先頭の  "variety ..."  の行を無視
               (無視しない場合は、存在すると -t オプションが設定される)

-r  -rorg_1=new_1/org_2=new_2/... は、キーワード org_i を new_i で置き換える
   (i = 1,2...)
    ここで org_i は、最後の数字を除いたもので、例えば以下のように指定する

    -rxxx=special/setchar=set_char_

    -x オプションでは、new_i の最初の文字は、小文字のアルファベットとなる必要が
    ある。

-t  オプション:Geoffrey Tobin氏 による DVIware DTL (dt2dv/dv2dt) の形式での書き
    込み読み込みとなる。以下の 0 から 9 までのサブオプション(トグルスイッチ)が
    指定できる。

    -t をサブオプション無しで指定すると、上記のスイッチが全て On になるほか、-j
    がOff になり、-x0 -x1 -x2  に対応するスイッチが On で、 On DVI -> Text では、
    先頭に以下の行が出力される。

variety sequences-6

    逆にこの行が先頭にあれば、Text -> DVI では、自動的に -t が指定される。

  0: str
     文字列は、' ' で囲って表記されるが、' -> \' および  \ -> \\ と表す。
     0 から 31 および、127以上のコードの文字は、以下と同様に16進表示で表す。
  1: ch
     0 から 127 までのコードの文字は、(  ) で囲って表記する。
     ただし、(  -> \(,  ) -> \),  \ -> \\ と表す。また、0 から 31 および 127 の
     コードの文字は、独立させて \03 のように \ を先頭に 2 桁の16進数で表す。
  2: ch2
     128 以上のコードの文字は、コードを10進数で表す。
  3: cmd
     コマンドをDTL形式の短いキーワードで表す。
  4: c-sum
     フォント定義におけるチェックサムを8進数で表す。
 5: dir/name
     フォント名の文字列をディレクトリと名前の2つの文字列に分解して表記。
  6: err
     未定義のコードを opcode x として表記。
  7: page
     ページ番号を表記しない。
  8: oct
     フォント定義のチェックサムを8進数で表したとき、先頭に 0 をつけない。
  9: str0
     Text -> DVI のとき、文字列の長さを、実際に指定した文字列で決める。


-l  DVIファイルにおけるアドレスを10進数で先頭につける。
    アドレスをつけると、最初に

0: pre  2 ...

    という行が出現する。Text -> DVI では、この行があれば自動的に -l が設定される。


-j オプション(トグルスイッチ):文字が JISコードならば、対応する文字を表記。


          *************************************************
[2]       **  ページ独立性が破れているDVI ファイルの修正 **
          *************************************************

DVIファイルは、本来ページ独立性が保たれるよう設計されていますが、一部の specials
の処理に関しては、これが破られるDVIファイルが作成されることがあります。

たとえば、dvips オプションでの color specials はこの典型的な例で、100ページのDVI
ファイルで、2ページに文字を赤にする設定が書いてあって、99ページ目にそれを終える
設定が書いてあったとすると、50ページ目にはこの色の情報は何も書かれていません。

\usepackages[dvips]{graphicx, color}
...
{\color{red}%			 2ページ目
...
...
...%					99ページ目
}
...

dvips など、最初のページから順に解釈するものは、問題ありませんが、dviout で 50ペ
ージ目のみを表示する、などの場合に不具合が生じます。dvidvi などで、ページを切り
出して新たにDVIを作成するときも、同様な不具合が生じます。

dvispc は、このようなDVIファイルを、ページ独立なDVIファイルに修正します。

対応している specials は、dvips/dviout など用のもので

color specials: color push/pop,  background
tpic specials : pn

                            --- 仕様 ---
-c:  上記の修正を行う。
-d:  修正の必要性をチェック。
-s:  specials を全て抜き出して表示します(-p... でページ指定可)。

以上のパラメータ、あるいは -a -x を指定しない場合は、デフォルト動作となり、上記
の修正を行います。

color specials: push/pop に対し、次のページにスタックを繰り越すことがないよう
  に、各ページの最後に必要な数の color pop を置く。このとき次のページの先頭で、
  スタックを回復するために必要な color push を置く。

  スタックのアンダーフローとオーバーフロー(500程度を越える)のチェックをしてい
  る。オーバーフローは通常は TeX のソースの書き方のエラーと考えられる。アンダー
  フローがあった場合は、そのページの先頭に color push  Black を必要な個数置くこ
  とによって修正する。

background    : 背景色が定義されており、その後のページで再定義がないページには、
  ページの先頭に背景色の定義を(高々1つ)おく。

tpic specials : pn が定義されたら、その後のページに pn の定義を置く(スタックで
  はないので、高々1つ)

ページの先頭に置かれる順序は、

color push -> background -> pn (tpic special)

となっている。