doraTeX / TeX2img

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

EMF出力のサポート #57

Closed doraTeX closed 8 years ago

doraTeX commented 8 years ago

Mac版 Office 2016 は,Windows版との互換性を向上させた結果,PDFサポートが苦手という特徴まで受け継がれてしまい,PDFサポートが後退してしまったとの話が出ています。 詳細は未確認ですが,Office 2016 for Mac でまともに扱えるベクター形式は EMF だけだという話も聞こえてきます。

現在は100MB超の Inkscape を内包した外部ツールを提供してEMF出力に対応していますが,それ以外の方法でTeX2imgからのEMF直接出力ができればいいですね。

方法を検討してみます。

doraTeX commented 8 years ago

pstoedit のEMF出力はベジエ曲線が使えず,文字のアウトラインが折れ線のみで構成されるため,仕上がりがひどいガタガタの文字になってしまうのですが,pstoedit のソースを改修することで仕上がり品質を上げることに成功しました。 しかもライブラリ込みで100MB超の Inkscape と異なり,pstoedit はライブラリ込みでもわずか800KB程度で済みました。 これで高品質なEMF出力の目処が立ちました。あとは TeX2img に組み込んで変換ルーチンを実装するだけです。

doraTeX commented 8 years ago

実装も完了しました。白紙ページを含む場合など,例外的ケースへの対応をこれからテストします。

aminophen commented 8 years ago

これは朗報です! Office 2016 の改悪は当面私も確認できないのですが、EMF なら扱えそうですね。CUI 版の場合はどうしましょう? 独自改変版は TeX2img.app にしか存在しないことになりますので、プログラム名が同じだと混同しそうです。

doraTeX commented 8 years ago

それも想定済みです😏 独自改変版は、eps2emf という独自の名前にしてあります。CUI版は、GUI版に内包された eps2emf をサーチして利用します。したがってEMF出力にはGUI版を /Applications または /Applications/TeXLive 内に置いておく必要があります。  

aminophen commented 8 years ago

さすがです😄 eps2emf という名前もわかりやすいですね。

doraTeX commented 8 years ago

EMF出力をサポートした Ver. 2.0.8 beta 1 が完成しました。

制約

  1. pstoedit がベジエ曲線を使えないので,アンカーポイントをたくさん取って対応していますが,あくまで折れ線の集合体です。大きく拡大するとギザギザが気になります(が,多くの場合概ね許容範囲ではあるでしょう)。
  2. Mac 標準で EMF を閲覧するソフトがないので,EMF出力の場合は「コンパイル後プレビュー」機能は無効化してあります。
  3. 余白が 0 でも,Office に貼ると一定の余白が勝手に付くようです。左余白・下余白を正の値に指定した場合,Office デフォルトの余白に加えてさらに余白が付きます。逆に,右余白・上余白は切られるので,Office デフォルトの余白以上の余白は付けられません。

このような制約はありますが,それでもEMF出力をサポートする価値はあるでしょう。1. の制約が気に入らず,真になめらかな EMF が欲しい場合は,現状の Inkscape を使う外部ツールで処理すればよいでしょう。

aminophen commented 8 years ago

今日はありがとうございました。まだ Mac 版 beta は試していないのですが、脱線中の #56 にコメントしていて思い出したので:pdfiumdraw の場合のような、破線が描画されないようなことは起きていませんかね? たとえば

\begin{tikzpicture}
\draw[dashed](0,0)--(1,0);
\end{tikzpicture}

の場合などに pdfiumdraw で破線が飛んでしまうのですが、eps2emf も内部的に座標拡大しているというお話を伺ったので pdfiumdraw と似た状況ではないかと気になりました。

doraTeX commented 8 years ago

今日は楽しかったですね。色々直接お話しできて大変有意義でした。

pdfiumdraw の場合のような、破線が描画されないようなことは起きていませんかね? たとえば

「描画されない」わけではありませんが,確かに何かヘンです。

2015-11-07 23 30 02

上が変換前のEPS,下が eps2emf で(100倍拡大→100倍縮小を経由しつつ pstoedit にかけた)EMFを Illustrator で開き上下に並べてみたものです。 パスとして認識されている部分の長さは同じですが,破線としての描画のされかたが異なります。

一方,同じEPSとEMFを Office 2011 に貼ってみたところ,EMFの描画のされ方は Illustrator とも異なりました。

2015-11-07 23 35 40

このように,EMFの破線というのは,描画のされ方がビューアに依存して大きく変わってしまうようです。EPSの段階で「パスのアウトライン化」をかけることができればよいのですが……。

aminophen commented 8 years ago

破線としての描画のされかたが異なります。

おっと、それは pdfiumdraw と同じ現象です。パターンが変わってしまうのですね。以前の調査だと破線のパスを分解するために相当頑張るInkscape の機能を使うかが有効でしたが、自動化はどちらも一筋縄ではいかないと思っていました。

doraTeX commented 8 years ago

過去の調査を再読し,一通り状況を把握しました。 これは確かに現状ではどうしようもないとして諦めるしかなさそうな状況ですね……。

aminophen commented 8 years ago

Ver. 2.0.8 beta 1 のアーカイブが壊れているっぽいです。

doraTeX commented 8 years ago

すみません,差し替えました。

aminophen commented 8 years ago

EMF 出力を確認しました。上記3点および破線パターンが変わるという制約はありますが、実用上問題ないレベルだと思います。FAQ に「ベジエの EMF を作るための方法」「破線パターンが変わって困る場合の方法」として、それぞれ「いったん EPS を作って Inkacape ベースの補助ツールで EMF に変換」「いったん EPS に変換して Inkscape で開き、パスの変形を行った EPS を補助ツールで EMF に変換」を解説しておけばよいと思います。

doraTeX commented 8 years ago

よし,ではそろそろ Ver. 2.0.8 正式リリースですかね。 なお,状況整理のために,Mac版の変換経路の図 を作りました。

aminophen commented 8 years ago

リリースよろしくお願いします! 変換経路の図も分かりやすいです。

doraTeX commented 8 years ago

リリースしておきました。

doraTeX commented 8 years ago

変換経路の図をアップデートし,補足情報を詳しくしました。Ghostscript が苦手とするタイプの図の話,元のページサイズを維持する場合の処理について加筆。 おそらく正しいと思いますが,なにぶんかなり複雑なので,どこかに認識の誤りがあるかもしれません。

aminophen commented 8 years ago

変換経路の図を確認しました。とくに誤りはないと思います。

aminophen commented 8 years ago

PDF を Office 2016 で従来どおりとりこめるという話は(私が Office 2016 を持っていないので)確認できていませんが、「EMF の分数とルートの横線が太くなる」という現象は再現しました(下は Illustrator で表示したもの。Word 2011 でも同じ見え方)。

emf-boldline

奥村先生のご指摘のほうも備忘録としてここに残しておきます。原因がわからないので対策は保留です。

doraTeX commented 8 years ago

原因は概ね想像が付きます。うまく出ている部分は,「フォントをアウトライン化することによって得られたパスに囲まれた塗り」の部分です。それに対して太くなっているのは「フォント由来ではないパスの線」です。「破線の見た目がビューアによって変わる」のを含め,おそらく「EMFの『パスの線』の表示はビューア依存」ということなのでしょう。 これを防ぐにはやはり事前に「パスのアウトライン化」をかけておくのが確実でしょうね。 GhostscriptでEPSを出すときに「パスを使わず塗りだけで表現する」ことができればいいのですが……。

doraTeX commented 8 years ago

Windows版TeX2imgのEMF出力をWindows版Officeに取り込んだときはどうなのでしょう?

aminophen commented 8 years ago

では、以下のソースを Win / Mac 両方で処理してみます。少々お待ちください。

\documentclass[fleqn,dvipdfmx]{jsarticle}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
EMF 出力のテストです。
\[
\left( \int _0 ^\infty \frac{\sin x}{\sqrt{x}} dx \right) ^2
= \sum _{k=0} ^\infty \frac{(2k)!}{2^{2k} (k!)^2} \frac{1}{2k+1}
= \prod _{k=1} ^\infty \frac{4 k^2}{4 k^2 - 1}
= \frac{\pi}{2}
\]
破線のテストです。
\begin{tikzpicture}
\draw[dashed](0,0)--(1,0);
\end{tikzpicture}
\end{document}
doraTeX commented 8 years ago

こちらでもテストしてみましたら,意外な結果が得られました。

Illustrator に貼った結果

2015-11-10 18 02 28

上が改良版 pstoedit による出力,下が Inkscape による出力です。 上はフォント由来でない線の部分が太くにじんでしまっているのに対し,下はEPSやPDFと遜色ない美しさです。

Word 2011 に貼った場合

2015-11-10 18 08 42

やはり上が改良版 pstoedit による出力,下が Inkscape による出力です。 上はフォント由来でない線の部分が太くにじんでしまっているのは相変わらずです。破線の見た目が少し変わっています。

それに対し,Illustrator 上では美しかった下のEMFが,Word 2011 上ではとんでもなくぼけています。 印刷してもこれは同じでした。 Word 2011 / Excel 2011 / PowerPoint 2011 で全て同じでした。 Office 2011 は EMF の扱いが逆に苦手ということでしょうか……?

Inkscape の出力を Office 2016 for Mac に食わせればどうなるかが気になるところですが,未調査です。

出力ファイルを置いておきますので,ぜひWindowsにも食わせてみてください。

aminophen commented 8 years ago

私も Mac で Illustrator と Office 2011 に貼り付けて、同じ現象に驚きました…

Mac で作った EMF を Mac 版 PowerPoint 2011 に貼り付け:

macoffice-emftest-mac

Windows で作った EMF を Windows 版 PowerPoint 2010 に貼り付け:

winoffice-emftest-win

Windows 版 pdfiumdraw はこのパターンの破線は偶然(?)うまく処理できるようになっています(abenori さんがオプションを調節しているので)。一般にすべての破線が正しく描画される保証はありません。

作成したファイルも置いておきます

doraTeX commented 8 years ago

Macで Win-EMF.emf を使ってみました。

aminophen commented 8 years ago

背景が透明ではなく白塗りになっている

すみません、--transparent を付けるのを忘れていました… その差は無視してください。

Office 上での元のサイズが大きく表示される。

--scale=10 の影響です。画像のサイズ自体を拡大してあります(そのほうがペイントで開いたときに見やすく、端が切れにくいので)。

doraTeX commented 8 years ago

EMF画像の扱いは難しいですね…… ここに書いてある「emf形式で取り込めばベクター形式で尚且つWindows版とも互換性がある」って大嘘な気がします……。

aminophen commented 8 years ago

今度は Win と Mac で行き来させてみました。

Windows で作った EMF を Mac 版 PowerPoint 2011 に貼り付け:

macoffice-emftest-win

これは綺麗ですが、Mac 版 Illustrator が表示できないとのことですね。

Mac で作った EMF を Windows 版 PowerPoint 2010 に貼り付け:

winoffice-emftest-mac

あれれ、さっき汚かった Mac-EPS.emf(つまり Inkscape ベースの補助ツール eps2emf.app 使用)が綺麗になっている…

doraTeX commented 8 years ago

ということは,Windows 版との互換性が高まったという Office 2016 for Mac なら,Inkscape で出力した EPS が綺麗に表示できるのかもしれませんね。 試したみたいものの,クレジットカード必須のサブスクリプション契約の体験版しかなくて体験しにくいです……。

aminophen commented 8 years ago

Windows 版との互換性が高まったという Office 2016 for Mac なら,Inkscape で出力した EPS が綺麗に表示できるのかもしれませんね。

かもしれません… PDF がとりこめる・とりこめないとか錯綜していて何が正しいのやら、検証したいとは思いますが私の周囲にも Office 2016 はありません…

aminophen commented 8 years ago

先ほど作った PowerPoint ファイルを Win と Mac で行き来させてみると、同一ファイルを見ているにもかかわらず Inkscape で作った EMF の表示が綺麗だったり (on Windows) 汚かったり (on Mac) して厄介です。これまたトラブルの原因ですね。

「emf形式で取り込めばベクター形式で尚且つWindows版とも互換性がある」って大嘘な気がします……。

まったく同意です。

abenori commented 8 years ago

Illustrator では Win-EMF.emf をうまく開けない。

ちなみに下のequation.emfだとどうなります?

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

doraTeX commented 8 years ago

前のは,

のですが,今度の equation.emf は,Office でも Illustrator でも開くことすらできませんでした。

2015-11-10 19 42 22

abenori commented 8 years ago

拡張子をwmfに変えてみるとどうでしょう?

doraTeX commented 8 years ago

拡張子をwmfに変えてみるとどうでしょう?

状況は同じでした。

abenori commented 8 years ago

ありがとうございます.「pstoeditはベジェ曲線が使えない」とかいう話から「もしかして:WMF」と想像したのですが,そういうわけではなかったようです.(先ほどのequation.emfは生成したEMFをWMFに変換して,拡張子だけemfにしたものでした.)

doraTeX commented 8 years ago

Office 2016 for Mac を持っている人のMacをちょっとだけ借りることができたので,試してみました。

2015-11-10 19 30 08 2015-11-10 19 30 15 2015-11-10 19 30 23 2015-11-10 19 30 30 2015-11-10 19 30 36 2015-11-10 19 30 44

調査結果

というわけで,2011と2016はほとんど変わりませんでした。 違いは,EPSの表示が汚くなったという改悪点だけでしょうか……。

aminophen commented 8 years ago

ありがとうございます。Office 2016 でも PDF を綺麗に貼れるらしいことがわかったのが幸いでした。EMF を敢えて選択する必要性がなさそうで良かったです。pstoedit 改変版 eps2emf のほうが(なんか汚いとはいえ)OS 非依存な EMF を作れるので、Inkscape 版 eps2emf.app より気に入っています。

doraTeX commented 8 years ago

もう一つ改悪点を見つけました。最新版のKeynoteと同様に,貼り付けたPDF画像のアノテーション情報が削除されるようです。 よって,パワポから画像をコピー&ペーストすることでTeX2imgにソース復元することができなくなり,貼り付け前のファイルをとっておく必要が生じます。

doraTeX commented 8 years ago

結局,幸いにも,Mac版にEMF出力を設けた意義は特になかったということが分かりましたが,まああっても困らないので削除する必要もないでしょう。(例の「斜め書き」みたいなもの?^^;)

aminophen commented 8 years ago

68 の議論で出てきた期待以上の結果というのは、ここでおっしゃっていた

GhostscriptでEPSを出すときに「パスを使わず塗りだけで表現する」ことができればいいのですが……。

だったのですね。なるほどやっと結びつきました。

doraTeX commented 8 years ago

その通りです。Ghostscriptで「パスのアウトライン化」をかける方法が見つかった意義は大きいです。 これで見た目がビューアに依存する可能性を極力減らすことができました。

aminophen commented 8 years ago

ちなみに、gs9.14 以下でアウトライン化するときも EPS 経由でなく、PostScript の charpath あたりでゴニョゴニョすれば PDF to PDF にできるんだと思います。gs9.15 で付いた -dNoOutputFonts は実はユーザからの要望を受けてかなりギリギリのタイミングで追加されたものです。これがなくてもゴニョゴニョすればアウトライン化できる機能を gs は(PostScript インタプリタなので)持っていますし、あれはユーザが使いやすいインタフェースを用意してくれたにすぎないようです。

aminophen commented 8 years ago

アッ、EMF 出力で epstopdf で PDF にいったん戻していた理由が、このスレッドで分かりました… PDF にしたときに bbox がリセットされることを使って左下の余白を確保しているのでした… 右上は余白がなくなるけどしょうがないという話でしたね… うわあ😓

EMF の経路だけ独立させたのが仇になりました…

doraTeX commented 8 years ago

いえ,現状で大丈夫ですよ。 gs 9.15 以上・未満どちらの過程でも,EMF出力においては,最初の一手で pdfTeX によるクロップ処理が入ります。このとき,余白を含めた左下が MediaBox の原点になり,それがその後のEPSへも受け継がれます。EMFの Office への貼り付けにおいては,変換前EPSの %%BoundingBox の値に関わらず,EPSの座標系の原点を左下,右上は「図版のギリギリの右上」として描画されます。そのため,左下余白は現状のルーチンで確保できます。(右上余白を確保する方法はなさそうです。)

aminophen commented 8 years ago

安心しました… 難しいですね。