Giter Club home page Giter Club logo

dviout-util's People

Contributors

aminophen avatar

Watchers

 avatar  avatar

dviout-util's Issues

chkdvifont: 今後改良したいメモ

  • pTeX p3.8.0 以降でサポートした新しい JFM フォーマットも判定するか?
    • 「GLUE/KERN のサイズが 256 を超える」 → これは nl だけ見れば判別可能なので簡単。
    • 「GLUEKERN の SKIP プロパティ」 → これは GLUE/KERN テーブルを読む必要あり。
    • 「BMP 外の文字コード」 → これは CHARTYPE テーブルを読む必要あり。
  • AmS フォントが新しくなっているのかどうか?
    • 調べてみたところ,chkdvifont.c には V2.1 までの情報が登録されているらしい。最新は V2.2 だが,両者を比較してみるとコメントのバージョン番号を除いて同一で,チェックサムは同一だった。

dvispc: Flatten nested annotation

dvipdfmx は,pdf:bann 〜 pdf:eann がネストされると

dpxlink.dvi -> dpxlink.pdf
[1
dvipdfmx:warning: Can't begin an annotation when one is pending.
dvipdfmx:warning: Interpreting special command bann (pdf:) failed.
dvipdfmx:warning: >> at page="1" position="(196.512, 119.253)" (in PDF)
dvipdfmx:warning: >> xxx "pdf:bann<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1..."
dvipdfmx:warning: >> Reading special command stopped around >><</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/...<<
][2
dvipdfmx:warning: Tried to end an annotation without starting one!
dvipdfmx:warning: Interpreting special command eann (pdf:) failed.
dvipdfmx:warning: >> at page="2" position="(207.866, 657.235)" (in PDF)
dvipdfmx:warning: >> xxx "pdf:eann"
]

のように警告が出る。dvispc の開発版はアノテーションのスタックを扱えるので,

  • bann 〜 eann の内部で bann が出たら一旦 eann で前のアノテーションを閉じて,eann が出たら再度 bann で元どおり再開する。

としたい。

なお,pdf:nolink による中断 (suspend),pdf:link による再開 (resume) がある場合(例示ソース)は,これだけでは支障があるかもしれないため要確認。

ドキュメント充実(類似プログラムとの関連性)

類似プログラムとの関連性など。

  • dvispc
    • EXE2INDEP, EXE2CHECK 相当の他のプログラムは無さそう。
    • EXE2SPECIAL → TeX-Guy プロジェクトの dvispecials,dvii の -s オプションが同等。(表示形式が微妙に違うだけで機能性は全く同じと考えて良さそう)
    • EXE2TEXT,EXE2DVI → それぞれ dtl の dv2dt,dt2dv 相当(こちらは pTeX 縦組未対応)。他に dviasm も同等。いずれも CTAN・TeX Live に収録済。
  • chkdvifont
    • DVI mode → TeX-Guy プロジェクトの dvifontlist,tex-assort の dviinfox が同等。このうち dviinfox は CTAN・TeX Live に収録済。
    • TFM/JFM/OFM mode,FONT mode 相当の他のプログラムは無さそう。

TeX-Guy については https://www.tug.org/TUGboat/tb21-3/tb68kaku.pdf も参照。「DVIlib」という独自だが包括的な DVI ライブラリ(これも独自の「VFlib」に依存)を使ってビルドする。但し,DVIlib の機能の多くはビューア部分 (xgdvi) のためと考えられ,単に dvispecials,dvifontlist,dvipages が欲しいだけならば,かなりのオーバースペックである。

dvispc,chkdvifont の大規模改良点メモ

大島先生の dvispc と比較して改善した点をメモしておきます。(追記:この内容は全てデフォルトのモード=ページ独立にするモードのみに関係します。)

(1) 追加した -z オプションは,

  • 例えば 6 ページしかない DVI を dvibook で 8→1→… とするとき,追加される空白ページに色がついたり付かなかったりするという問題がある。
  • そこで,dvispc で page independent にするよりに 4 の倍数に調整する新オプションを付け,そのとき追加する空白ページの色は固定したい。

という目的で追加した。

(2) 上記 (1) にも関連するが,

  • DVI を前から後ろへ読んでいくときのぺージ独立性

は従来の dvispc がうまく対処していたが,

  • dvidvi -r のような逆順
  • dvibook のような本の面付け順

は未対処であった。そこで,最初に全ページをスキャンして,「どこかでぺージの色 (background) が一度でも変更されていれば,それ以前のページは白と明示する」という処理を加えた。

(3) 長さが 255 を超える長い special をサポートした (b9a22fe)。従来の color だけをサポートしていた頃は不要だったのだろうが,pdf:bann では非常に長い URL がありうる。

現時点でのコンパイル手順メモ

警告が出るし,動作はまったく未確認であるが

  • Visual Studio 2013 の cl
  • MinGW の gcc
  • Mac (OS X 10.11.6 El Capitan) の clang

でコンパイルできることを確認した手順のメモ。なお,リポジトリには現時点では Shift-JIS encoding でファイルを置いている。

MSVC 系 (Visual Studio) の場合

propw は CP932 encoding の状態でコンパイルするとよさそう。現時点では GitHub に置いているファイルが全て CP932 (LF) なので,このままコンパイルしてよい。

$ cl -O1 /MD -DMSVC -DWIN32 chkfont.c
$ cl -O1 /MD dvispc.c
$ cl -O1 /MD -DWIN32 propw.c /link gdi32.lib

GNU C 系 (gcc, clang) の場合

propw は UTF-8 encoding の状態でコンパイルするとよさそう。(動作は未確認;特に,propw はコードを見る限り EUC mode として動作しそうなので不安…)

$ gcc -o chkfont.exe -DUNIX -DGCC chkfont.c
$ gcc -o dvispc.exe -DUNIX dvispc.c
$ gcc -o propw.exe -DUNIX propw.c

後日,実際の動作確認を行う予定。

dvispc: Append .dvi suffix for outfile

$ dvispc test testout

のように拡張子 .dvi を省略すると,test.dvi を入力できるが,出力が testout となり .dvi が付かない。「拡張子がない場合は .dvi を補う」でよい?

chkdvifont: add verbose mode for TFM info

chkdvifont の TFM/JFM/OFM モードで,bc/ec に限らず,パラメータ表 (lf, nt, nl, ...) の各サイズをより詳細に見せる機能を追加したい。

  • 非常に古いが,pTeX 2.1.10 までは nt>255(非ゼロの CHARSINTYPE に登録されている文字数の合計+1が256以上)の JFM を扱えなかったらしく,pTeX 2.1.9 も JFM の取扱上のバグがあったらしい。
  • 先日追加した OFM の FONTDIR を表示する機能もこれに含める。

dvispc: 再発行する pdf:bann の位置

tests/longspec.dvi を dvipdfmx にそのまま通すと annotation rectangle が各行の「A」をバラバラに囲むが,dvispc で「修正」してから dvipdfmx に通すと annotation rectangle が合体する。

20181012-dvispc-bann-120181012-dvispc-bann-2

dvispc で「修正」した後の 2 ページ目冒頭を見ると以下のようになっている。

 [2]
bop 2 0 0 0 0 0 0 0 0 0 42
xxx4 282 'pdf:bann<</Type/Annot/Subtype/Link/Border[0 0 1]/H/I/C[0 1 1]/A<</S/URI/URI(https://www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/datavisualization/tikzlibrarydatavisualization.formats.functions.code.tex?revision=20236&view=markup)>>>>'
push
down3 982795
push
right3 3997451
xxx1 51 'pdf:dest (page.2) [@thispage /XYZ @xpos @ypos null]'
pop
pop
down4 41484288
push
push
down4 -39649280
down4 37683200
push
down4 -35389440          (<- 1)
push                     (<- 2)
right3 4063232           (<- 3)
fntnum7
setchar65
 "A"
pop

となる(ここで (<-1), (<-2), (<-3) は説明のためにつけた)。この「bop 直後の xxx4」が dvispc によって直前の 1 ページ目から持ち越されたものだが,この場所に pdf:bann があると dvipdfmx はアノテーションを合体させてしまうらしい。さらに調べてみると

  • (<-1) の直後に動かしてもダメ
  • (<-2) あるいは (<-3) の直後ならば OK

らしい。

dvispc: 今後調査したい・実装したいメモ

  • 「テキストから DVI への変換では実際に使っていないフォントを消す最適化はまだ」との発言がある。
  • tpic の sh というスペシャルは,オリジナルの C source 冒頭にだけ挙がっていた。
    • https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/15039.html

      対応したものは、dvips/dviout などで使われている specials で以下のものです。
      color specials: color push/pop, background
      tpic specials: pn, sh
      tpic specials の pn は、ペンの太さを決める、また、sh はシェーディングの濃さを決めるもので、その定義以降に影響を及ぼします。

    • しかしサポートされていなかったらしいので削除した。 もし必要なら実装する必要あり。 → dvips と dvipdfmx の挙動を調べてみると,sh はその直後一つのパスだけに有効らしく,ページをまたぐ必要性は考えにくい。従って不要と判断。
  • papersize special や pdf:pagesize special はどうするか?
    • dvipdfmx や新しい dvips は各ページで「最後の special が有効」なはず。
    • 古い dvips は「最初の special が有効」なはず。
    • そのため,有効な special だけ残して他はクリーンアップする機能を付ける?
    • 最初のページは special がなく,途中で出現した場合,以前のページはどうするか?(警告を出して何も追加しないのが無難?)
    • landscape オプションがある場合は?
    • /MediaBox がある場合は?

他にもあるかも。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.