doraTeX / TeX2img

TeX2img for macOS
https://tex2img.tech
Other
26 stars 2 forks source link

PDF出力時にPDFのアノテーション情報にもTeXソース情報を含める #48

Closed doraTeX closed 8 years ago

doraTeX commented 8 years ago

新機能案:「PDF出力時にPDFのアノテーション情報にもTeXソース情報を含める」

メリット

doraTeX commented 8 years ago

上記仕様に従って一通り実装完了。 Word 2011 / Excel 2011 / PowerPoint 2011 に貼り込んだ図版から TeX2img へのドラッグ&ドロップで画像を復元できることを確認。

doraTeX commented 8 years ago

追加仕様

doraTeX commented 8 years ago

現状の実装を Ver. 2.0.4 beta 1 としてまとめておきました。

aminophen commented 8 years ago

Ver. 2.0.4 beta1 を起動しようとするとクラッシュしました。例によって Lion です。

15/09/30 15:19:31.746 [0x0-0x71071].com.loveinequality.TeX2img: objc[622]: cannot form weak reference to instance (0x7f8aa986cd00) of class NSWindow
15/09/30 15:19:32.437 com.apple.launchd.peruser.502: ([0x0-0x71071].com.loveinequality.TeX2img[622]) Job appears to have crashed: Illegal instruction: 4
15/09/30 15:19:32.576 ReportCrash: Saved crash report for TeX2img[622] version ??? (2.0.4b1) to /Users/npjilab/Library/Logs/DiagnosticReports/TeX2img_2015-09-30-151932_iwai-no-iMac.crash
15/09/30 15:19:32.577 ReportCrash: Removing excessive log: file://localhost/Users/npjilab/Library/Logs/DiagnosticReports/TeX2img_2015-08-24-183214_iwai-no-iMac.crash
doraTeX commented 8 years ago

これは本件とは無関係で, 0d010c9a3743ae6a7fbb3c3fa5714cc0ec889c0e に関連するこの問題でした。 0d010c9a3743ae6a7fbb3c3fa5714cc0ec889c0e を Revert してビルドし直し, Ver. 2.0.4 beta 1 を差し替えておきました。

aminophen commented 8 years ago

これは本件とは無関係で, 0d010c9 に関連するこの問題でした。

そういえば、仕様が変わったのでしたね… 属性を消して元に戻しても、新しい OS で正常に動作するのでしょうか?

PDF のアノテーションへの埋め込みと復元が正常に機能することを確認しました。仕様については上記のもので良いと思います。

doraTeX commented 8 years ago

属性を消して元に戻しても、新しい OS で正常に動作するのでしょうか?

とりあえず大丈夫そうです。

PDF のアノテーションへの埋め込みと復元が正常に機能することを確認しました。

確認ありがとうございます。 これで MS Office は大丈夫ですね。

Keynote からのソース復元が何とかできないか試してみましたが,最新版 Keynote では,貼り込むときにPDF内の余計な情報(PDF内のアノテーションや余計なコメント)を削除して整理してから貼り込むようで,付加情報を保持させたまま貼り込むのは困難そうです。(これは LaTeXiT も同様です。)

doraTeX commented 8 years ago

Keynote はSVGをサポートしておらず,EPSもPDFに変換されて貼り込まれるので,ベクター画像を付加情報込みで Keynote に貼り込む手は全て封じられてしまいました。

aminophen commented 8 years ago

Keynote からのソース復元が何とかできないか試してみましたが,

それについては元々 TeX2img の EA を使う仕組みのほうが優れていると思っていたので気にしていませんでした。画像形式によってそれぞれ対応するのは面倒ですし、たとえ頑張っても途中でソースが切れるかもしれないと思うと、PDF アノテーションだけにとどめた今の方法が最善だと思います。

Keynote 仕様変更で復元できなくなって残念がる人多いでしょうね。

doraTeX commented 8 years ago

では現行の仕様で満足するとしましょう。 続いて,これを Snow Leopard 版にも実装してみます。

aminophen commented 8 years ago

では現行の仕様で満足するとしましょう。 続いて,これを Snow Leopard 版にも実装してみます。

よろしくお願いいたします。 PDF を挿入できるところが Office for Mac のうらやましいところでもあります。Windows で PDF をドラッグ・ドロップで PowerPoint に貼り付けられると良いのですが、どうもうまくいかない場合(そもそも画像が表示されない or 表示されてもディスプレイ上では汚い)が多いので EMF サポートを再開していただいたわけですが、やはり PDF のほうが使い勝手は良いですからね…

doraTeX commented 8 years ago

Snow Leopard 版にも導入しました。 仮想マシンに構築した Snow Leopard 上でのテストが成功すれば,そろそろ 2.0.4 / 1.10.4 のリリースと行きましょうか。

今回の改良点

doraTeX commented 8 years ago

実装の詳細

※ 当初はアノテーションを書き込んだ著者名として TeX2img などと設定し,それによってラベルとしようと考えていたが,なぜかその方法でアノテーションの著者名を書き込んだPDFを作成したものを Preview.app で開くと Preview がクラッシュするというバグがあったので,その方法は中止。1行目にラベル行を設けるという実装法に変更した。

abenori commented 8 years ago

同じようにしてみています.テストのために,そっちで作ったPDFファイルをもらってもよいですか?

doraTeX commented 8 years ago

こちら になります。

abenori commented 8 years ago

早っ!ありがとうございます.

abenori commented 8 years ago

時間がかかってしまいましたが,やっと同じようなことができました.生成したtest.pdfをおいてみましたが,きちんとできてますでしょうか?一応そちらのPDFは読めました.

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!16825&authkey=!ANYoMX5Yq7PLXU4&ithint=folder%2cexe

aminophen commented 8 years ago

!!!

Mac から Windows にソースを運べました。Windows から Mac は(いま Mac 環境にいないので)試せていません。一つだけ、出力すべきファイルと一緒に一時ファイルもろとも附いてきたことにびっくりしましたが…

doraTeX commented 8 years ago

お疲れ様です! OS の API で注釈の読み書きができる Mac とは異なり,Windows でそれを実現するのはさぞ大変だっただろうと想像します。 試してみたところ,Windwos 側で付けた注釈は改行コードが CR+LF であったためにヘッダ行がヘッダ行と認識されず,ソース復元に失敗してしまいました。 確かに, OS をまたぐときは改行コードが問題になりますね(ヘッダに限らず)。

という処理を入れてはいかがでしょう。

abenori commented 8 years ago

MuPDFがその機能を持っていたのでそれ自身はよかったのですが,ドキュメントが貧しすぎて苦労したのと,プロセスを起動してやりとりする部分を書くのが面倒でした.(dllでのダイナミックリンクにすればよいのですが,それは封じられているので…….)

こちらは

CR に続かない LF は CR+LF に置換してから読み始める。

を既にしてあるので,改行コードに関係なく読めるはずです.確かに内部は全部CRLFにした気がするので,注釈もCRLFでしょうね.

MacでPDF内のテキスト形式の注釈を読むときは,CR+LF は LF に置換してから読み始める。

をしてもらえるとよいかなと思います.

Mac から Windows にソースを運べました。

._hoge.jpg(でしたっけ?)みたいなファイルを読めば他の形式でも行けるでしょうか.このファイルどういう形式になっているのでしょう?

一つだけ、出力すべきファイルと一緒に一時ファイルもろとも附いてきたことにびっくりしましたが…

ありゃ,なんか変ですね.

aminophen commented 8 years ago

一つだけ、出力すべきファイルと一緒に一時ファイルもろとも附いてきたことにびっくりしましたが…

ありゃ,なんか変ですね.

よくみると、TeX2img のコンソールに出てくる一時ファイル名とは異なるファイル名の PDF ファイルが、出力先ディレクトリに生成していました。こちらにはソースが埋め込まれていないことを除き、内容は本来出力すべきものと同じになっています。

abenori commented 8 years ago

はい,注釈をつける際に作った一時ファイルでしょう.多分mudrawのプロセス終了以前にこのファイルを消そうとしてしまっているのではないかと思います.(プロセスがつかんでいるので消せない.)何度か試してみると手元ではランダムで残ったりそうでなかったりしているので. 最大1秒までプロセス終了を待つことに手元でしてみました.多分これで大丈夫かと思います.

aminophen commented 8 years ago

はい,注釈をつける際に作った一時ファイルでしょう.多分mudrawのプロセス終了以前にこのファイルを消そうとしてしまっているのではないかと思います.

作業ディレクトリの中で注釈をつけてから,ということはできないでしょうか?

abenori commented 8 years ago

できなくはないのですが,ソース埋め込みの処理を一カ所にまとめておきたいのと,埋め込み処理は出力フォルダでした方がよいと思うのとで,今みたいになっています.1秒待って終了処理が終わらないことはまずないと思うので大丈夫かと.

aminophen commented 8 years ago

ソース埋め込みの処理を一カ所にまとめておきたい

確かに一箇所のほうが分岐が少ない、と思ったのですが

埋め込み処理は出力フォルダでした方がよいと

これは NTFS かどうかに関わるからだと思ったのですが、FAT でもアノテーションへの埋め込みはやったほうがよいので、あまり分岐が減った気がしないかなという感じがしました。実装がどうなっているのか分かっていないのであてずっぽうで申し訳ありませんが…

doraTeX commented 8 years ago

MacでPDF内のテキスト形式の注釈を読むときは,CR+LF は LF に置換してから読み始める。

をしてもらえるとよいかなと思います.

この処理を入れたところ,めでたく Windows の注釈を復元できました! ソース情報の互換性実現,感動的です。

._hoge.jpg(でしたっけ?)みたいなファイルを読めば他の形式でも行けるでしょうか.このファイルどういう形式になっているのでしょう?

これは情報が少ないですね……。普通,このファイルは他のOSでは目障りで削除される対象なので,その内容を解析しようとした試みがほとんど見当たりません。 一応,Wikipedia のリンクに,フォーマット仕様書,および Perl を用いた読み込みモジュールの実装が見つかりましたが。

doraTeX commented 8 years ago

Windows との互換性を実現した Ver. 2.0.5 beta 1 を置いておきました。

abenori commented 8 years ago

それでは極力一時フォルダで作業するようにしてみました.(ちなみにこのファイルは設定によらず消えるようにしています.)

これは情報が少ないですね……。普通,このファイルは他のOSでは目障りで削除される対象なので,その内容を解析しようとした試みがほとんど見当たりません。 一応,Wikipedia のリンクに,フォーマット仕様書,および Perl を用いた読み込みモジュールの実装が見つかりましたが。

ありがとうございます.さくっとできそうならばと思ったのですが,ちょっと面倒そうですね…….まぁ気が向いたら試してみます. もしこのファイルの実物があるようでしたらもらえますか?

doraTeX commented 8 years ago

このzip を展開すると,__MACOSX の中に ._test.pdf があるはずです。 Macでこのzipを展開すると,__MACOSX フォルダは掘られず,代わりに中身が拡張属性にインプットされます。

一方,zip圧縮ではなく,FAT32のUSBメモリやネットワークボリュームに test.pdf を書き込むと,__MACOSX フォルダは掘られず,直に ._test.pdf が作られます。その場合に作成されるファイルはこちらです。

両者のファイルは少し異なるようです。

これらのファイルをバイナリエディタでダンプしてみたところ,意外と読み取りが簡単そうな構造ですね(^^;

2015-10-04 2 13 00 2015-10-04 2 23 54
abenori commented 8 years ago

ありがとうございます.ちょっとやるか悩みますが,読めるには読めそうですね.まぁ少しさきほどのリンク先もこめて眺めてみます.

今普段使っている解凍ソフトでやったら__MACOSXが現れませんでした.設定に「MACリソースフォークを読み飛ばす」というのがあって,それがデフォルトでONになっていたようです.確かにあまり残らず実装しても無駄な可能性が高いかもしれません……

abenori commented 8 years ago

Wikipedia最初のリンクの仕様と照らし合わせてもらったファイルを見てみました.9byte目から16byteは0で埋められていると書いてあるのに全然埋まっていないのが気になりますが……. どうもどちらもFinder Infoというのに入っているようなので,次はこれのフォーマットをしる必要がありそうなのですが,ご存じですか?

しかし最初のリンクの仕様のやつ,Appleのサイトじゃないですね.Appleは情報を公開していないのかな.そうするとあまりやる気がなくなってきたり…….

doraTeX commented 8 years ago

リンク先の仕様書,日付が1990年とか1994年とか書いてあって相当に古いですので,今は変わっている可能性が高いですね。Appleのサイトに仕様書が見つかりませんし,Finder Info の仕様も含め,最新の仕様は公開されていないのかもしれません。

abenori commented 8 years ago

Finder Infoのヘッダとかを表す構造体が手元の環境のどっかのヘッダファイルにあったりしないでしょうか?

doraTeX commented 8 years ago

探しまくった結果,どうやらこれが該当しそうです。

abenori commented 8 years ago

おお,すげーありがとうございます.やる気が出てきました.

doraTeX commented 8 years ago

上記リンクのファイル名は vfs_xattr.c ですが,名前的にHFS+方は hfs_xattr.c が該当するのでしょうね。

abenori commented 8 years ago

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!16825&authkey=!ANYoMX5Yq7PLXU4&ithint=folder%2cexe

おかげさまで読み込むことができるようになりました.処理部分をきちんと呼んだわけではないので,正確かそこまで自信がないですが……おそらく

https://github.com/abenori/TeX2img/blob/master/AppleDouble.cs

の上の方に書いた仕様かと思って処理しています.とりあえずいただいたサンプルは処理できているっぽいです.

doraTeX commented 8 years ago

おおっ,これはすごい!! 通常ゴミファイル扱いされる ._hoge.pdf の内容をまともに読もうとしたプログラムは世界的にも極めて異例と思われます。TeX2img がその道を開拓したとは感動的です!

このソースは自分にとっても貴重な資料です!ありがとうございます。

abenori commented 8 years ago

ゴミファイル扱いされるが故に実装した意味があるかは激しく謎ですが(笑)

そういえば教えてもらったソースはリソースフォークも見ているように見えるのですが,TeX2imgの場合はFinder情報の拡張属性に必ず入ると仮定しても大丈夫でしょうか?

doraTeX commented 8 years ago

setxattr を使って書き込むと,Finder Info の方に入るということでよさそうですね。

aminophen commented 8 years ago

実際に Win と Mac でファイルを行ったり来たりさせる実験を行ってみました。

というわけで、テストの範囲内ではすべて期待通りに動作していました。以上でテストとしては十分でしょうか?

Windows で NTFS の拡張属性を積極的に活用したのみならず、Apple Double の拡張属性のほうを読むというこれまた画期的な実装が行われたことは感動的です。

aminophen commented 8 years ago

なお、本件とは別ですが Windows 版は最近 --margins オプションが実装されています。

  /margins=<VAL>           余白(一括/左右 上下/左 上 右 下)

これは pdfcrop.pl と同じようにスマートに余白を指定できる機能です。Mac 版にも付くと嬉しいです。

abenori commented 8 years ago

ありがとうございます.大丈夫そうですね.