-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
テキスト形式のEPSを出力する機能 #52
Comments
そういえばそんな調査していました… まだ pdftops が本当にテキスト形式の EPS しか出さないのかどうか自信がありませんので、もう少し検証させてください。 |
気になる点を挙げておくと:
たとえば元の eps2write が出した EPS が
の場合、そこから epstopdf と pdftops を経た EPS では
という値になりました。どうやら epstopdf + pdftops 全体としては「元の EPS の HiRes の値を演算して左下が 0 0 になるように描画しなおし、新しい HiRes を小数点以下2桁まで求め、それを包含するように非 HiRes の値も書き込む」ように見えます。この影響がどの程度生じるのか、まだわかっていません。 |
それはUIの表現次第で何とかなるのではないでしょうか。
という問題が生じます。
確かにBBの原点の変化はちょっと怖いですね。 |
「プレーンテキストで出力する (EPS)」なら伝わりそうです。いずれにせよその意義を FAQ に書いておかないと、Forum の質問のような場合に気づいてもらえない可能性が高いですね。(「○○というソフトで EPS を作ったら貼りつくのに TeX2img で作ったら貼りつかない」というときに、「EPS は PostScript 言語で書かれたテキストだったはずだ」という知識がないと「EPS の中身に違いがあるのでは」のような発想にそもそも至らないので) BB の変化についてはもう少し慎重に調べる必要がありますね。従来の EPS に epstopdf + pdftops を通すと余白の付き方が微妙に変わってしまうことは確認できました。 EPS の左下が epstopdf + pdftops では常に 0 0 なので、ここに余白を付けると必ず BB がマイナスになる…けれど従来の場合も余白が大きければマイナスになりえたので同じですかね? |
これは,epstopdf でPDFに直したときに,PDFのMediaBoxの左下が(0,0)になるようにボックスが再調整されるためにおこるもので,pdftops はそれを引き継いでいるに過ぎないようです。 |
ということは、BB の値が変わることは問題なさそうですね。 |
余白付与と pdftops の順序を逆にしました。 それに何より,epstopdf はゼロサイズのEPSに弱いという問題に対する対処という点が挙げられます。 整理すると,経路は以下の7通りとなります。 gsを通さない経路
gsを通す経路
[*1] このgsによるアウトライン化は,画質優先モードの場合は -r20016 固定,速度優先モードの場合は解像度レベル設定に従う |
Ver. 2.0.6 beta 1 が完成しました。 Ver. 2.0.6 beta 1 での改良点
|
Ver. 2.0.6 beta 1 の TeX2img.app が正しく梱包されていない…? |
確かにアーカイブが壊れていましたので差し替えました。 |
「gs9.15 以上の eps2write 経由時に、Xpdf の pdftops を使ってテキスト形式の EPS を出力する」は成功しているようです。 「あいうえお」を EPS 化していて気づいたのですが、eps2write は epswrite に比べて書き込む量が膨大に増えていて、それを隠すためにバイナリ化圧縮しているようですね。pdftops でそれをプレーンテキストにするとかなり量が減るので、バイナリより軽くなっています。サイズとしては「gs9.14 以前の epswrite < Xpdf の pdftops < gs9.15 以降の eps2write」になる傾向があります。 |
つくづく,なぜ epswrite を廃止する必要があったのかと残念に思います……。 |
Ghostscriptで何とかならないかと,なんとなくググってみたら,気になるものを見つけました. |
/LZWDecode をデコードできないと書いてあるようで、ちょっと厳しそうです… gs9.05 の epswrite が吐いたプレーンテキストな EPS を食わせると「コメント行以外をそっくりそのまま stdout に吐く」ことはわかったのですが
ようです… まあ 2007 年のスクリプトだから無理はないですが、もっと調べるとスクリプトで Decode する方法があるのかもしれません。 |
そもそもだめなのはLZWそのものなんですね…… WordはPostScript 3.0(とそれ以前)をサポートしているようですが,LZWが入れられるようになったのはその後,という理解でいいんでしょうか?それとpdftopsがLZWを入れないかどうかはよくわからない(一応なっているみたいだが)ということでOK? |
pdftops が LZW を入れないかどうかはソースを見れば分かるかもしれません😏 Windows の場合は pdftops が TeX Live (win32) でも W32TeX でも入っていると仮定してよいはずですので、直接これを呼べば良いでしょうね。 |
正直なんかやる気が出ないです.なんか繰り返しもありますが.
|
まさにおっしゃるとおりです。フォーラムに「LZW バイナリがあるから」と回答したのは“無難な正解”で、LZW が原因なのかバイナリが原因なのか当時よくわかっていなかったのです。今も私は手元で「LZW もバイナリも存在しない EPS」と「LZW もバイナリもともに存在する EPS」しか試していないため、はっきりしたことはわかっていません(数か月前の検証段階で pdftops を結論とするのは短絡的だと思ったのもこれが理由だった気がする)。ただ、pdftops がテキスト形式の読める EPS を出すのは確かなので、Mac 版にとりあえずその機能を付けたのは悪くないと思っています。 まだ分かっていない多い状態ですので、もう少し慎重に調べてみます。 |
何かわかったらよろしくお願いします……が,いずれにせよインストール作業が必要なものを使うのは気が引けます.
そういう例しか観測されていない,が正しい?(「説明書」にあるのかという質問です.) |
はい。説明書にその手のコメントがないので例で観測するほかなく、そういうことになっています。 …といったところで、doraTeX さんの実験で登場した sushi.pdf を試したところ、gs9.16 の場合のみバイナリが入っています。~~これは手元では Word 2010 に貼りつけることに成功していません…~~訂正:かなり動作が重いだけで、貼り付けはできていました。Windows 版 TeX2img で「アウトライン化 PDF」を出力した後、pdftops で変換するという実験を行うと
とりあえずここに置きます。 gs9.16 のあとに pdftops が吐いた EPS は「LZW はないが、バイナリはある」っぽいです。ということは、LZW があることが Office 貼り付け不能の原因なのかもしれません。 追記:「gs9.16 の eps2write + pdfwrite のあと pdftops を通した EPS」は、Word への貼り付けと表示は成功しましたが、保存時に PDF 形式を指定すると PDF には図が出てきませんでした。 |
equation-916.eps は,モノとしてはテキストファイルに見えますが。 ちなみに,Mac版Wordでは,epsが貼り付けられると内部的にPDFへ変換してから貼り付けているように見えます。そのため,gs 9.16 の eps2write で出力したEPSも貼り付け可能です。 |
この部分は,PostScript Language Reference の3.2.2節に規定された ASCII base-85 filterに従ってバイナリをテキストへエンコードした部分で,3.13.3節に規定された ASCII85Decode filter でこれをバイナリにデコードする処理が equation-916.eps の457行目に |
ああ、本当ですね。だいぶ上の方に |
…ということは、gs9.16 の eps2write で「LZW バイナリ」と呼んでいたものは |
その部分はテキストですが,その後に, ↑sushi.pdf を eps2write で処理した結果のeps |
ああ、そこはまさに |
Macずるい……. テキストにしたいだけならば-dASCII85EncodePages=trueでエンコードしてしまえばよいのですが,Windowsの方はWordに張り込めるのをやはり目的とした方がよいですよね……. 現れた/LZWDecodeをすべてデコードしたものに置き換える,というのはさすがに面倒だろうか. |
そんなオプションがありましたか……! まあ,-dASCII85EncodePages=true で出力したテキストEPSは,「実質全体が ASCII base-85 でエンコードされた意味不明な文字列からなるテキスト」になるのに対し,pdftops で出力したテキストEPSは「読めるテキスト」になるという違いがありますので,Mac版に pdftops を内蔵した意義は一応あったということにしておきましょう。 |
上で出ている-dCompressionPage=falseと組み合わせるとかなりの部分がEncodeされていないファイルにはなるのですが,なんだか長ったらしくてよくわかりません……上でも話になっていましたが,pdftopsで出した方が素直には見えますね.(といってもEPSを読もうとする変態がどのくらいいるかは謎ですが…….) eps2writeがはき出したファイルはPDFみたいです. |
ふとGhostscriptを9.18にあげてみたら,次のtest_gs.epsができました.どうも見たところLZW圧縮はないように見えますが,やはりWordへははりこめません. |
それも昔試した記憶が… でもバイナリをエンコードしたにすぎないので読めないと判断し、やめたと思います。フィルタに関係ありそうなオプションは私なりにいったんは試したような状態です。
私も gs9.19 git prerelease をたまたま数日前に Windows で git clone していたので試したところ、 評判が悪くてデフォルトを
|
ともかく小手先ではWordには対応させられなさそうなので,この件は忘れることにします.ご迷惑をおかけしました. |
そろそろ「TeX2img でどの画像まで対応するか」をはっきりさせたほうがよいということですね。依存ツールを抱え込むのも、mudraw くらいなら軽いですし Win 版の pdfiumdraw は他で難しい EMF のための需要があるのであって欲しいですが、これ以上増やすのはあまり乗り気がしないです。万能神話はあくまで神話ですし、私もそれは求めていません。 pdftops も結局どんな場合でもプレーンテキストを出せる保証がないので、どうなんでしょうかね。「テキスト形式の EPS が必要なら、pdftops をインストールすればできるかもしれません」程度の情報を FAQ に書いておくほうが無理がないのかもしれません。依存ツールが増えないならまだしも、「増やしても完全なテキストになるとは保証できない」だとモチベーションが起きないのもわかります。 |
テキスト形式のEPSでなければ問題が起こるケースに対処するために,eps2write デバイスによってEPS出力する場合に,pdftops を用いてテキスト形式のEPSに変換する機能を付けるとよいのでは。
仕様案
テキスト形式で出力する (EPS)
」というオプションを追加。--[no-]plain-text
あるいは--[no-]text-format
といった名前のオプションを追加する。変換経路
EPS出力かつ gs>=9.15 かつこのオプションがONの場合には,次の変換経路で変換する。
TeX (→ DVI ) → PDF →[gs(eps2write)でアウトライン化+クロップ] → EPS →[epstopdf(gs)]→ PDF →[pdftops] → EPS (→[BB情報を編集して余白付与] → EPS)
pdftops のオプション
The text was updated successfully, but these errors were encountered: