Code Monkey home page Code Monkey logo

tex2img's People

Contributors

doratex avatar kuroky49 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tex2img's Issues

外部ファイル入力で PDF も受け入れられないか?

おもしろくかつ有用そうな機能拡張を思いついたので、提案します。

「外部ソースファイル入力」は現状で .tex しか受け付けない仕様ですが、ここに .pdf も受け付けるのはどうかという思いつきです。最も有用そうな実用例としては「既存の PDF ファイルをアウトライン化する」という用途です。現在、TeX2img は

  • TeX ソースをエディタに入力(GUI 版)
  • 外部ソースファイルを入力(GUI/CUI 版)

の2つの処理が可能です(一つ目のほうには「インポート機能」すなわち TeX ソースインポート・画像ファイルからのソース復元も含むつもり)。この二つ目の機能を拡張すれば、TeX2img の用途が大幅に広がる気がします。TeXtoPDF と PDFtoIMG は独立なはずですので、実装としては「.tex なら TeXtoPDF してから画像変換スキームへ、.pdf なら直接画像変換スキームへ」でいけそうですが、いかがでしょうか。

# 今回の #18 で「pdfcrop してから…」の事前チェック中に、「今クロップした .pdf をそのまま GUI でも epswrite に通せたらなあ」と思ったのがきっかけです。

補完キーとして Esc キーだけでなく Tab キーも使えるように

TeXShop 同様に,補完キーとして Tab を使うことも選択できるようにしよう。
環境設定パネルに選択項目を追加しよう。

※補完キーに Tab を選択している場合,補完できる場面では補完が,補完できない場面では Tab 文字が入力されるようにする(TeXShop 同様)。

CUI版のパラメータのデフォルト値を変更できる機能

結城浩さんの --no-embed-source がデフォルトであってほしいという要望に応えるためには,CUI版のパラメータのデフォルト値を変更できる機能があるとよいのでは。

方法の案

  1. 環境変数で export TEX2IMG_FLAGS="--no-embed-source --top-margin 10 --bottom-margin 10" のように。
  2. .tex2imgrc のような設定ファイルで。

→ 設定ファイルを用意するほど多量の設定があるわけではないし,設定ファイルにするとそのパースに手間がかかるので,1. の環境変数で用意する方が簡便でよいかと思う。

いずれにせよ,ユーザがコマンドラインからパラメータ値を直接指定した場合は,それで上書きされるようにしないと。

→ すると,--no-embed-source の効果を消すための --embed-source が必要になる。同様に,ON / OFF を切り替えるタイプのオプションに対しては,全て no ありと no なしを用意しないといけない。

Mac版のCUI版でリストアップすると以下の通りとなる。

  • --[no-]guess-compile
  • --[no-]with-text
  • --[no-]transparent
  • --[no-]delete-display-size
  • --[no-]copy-to-clipboard
  • --[no-]embed-source
  • --[no-]quick
  • --[no-]ignore-errors
  • --[no-]utf-export
  • --[no-]quiet
  • --[no-]delete
  • --[no-]preview

--no-embed-source と --embed-source のように排反なオプションが同時指定されたときには,後から指定された方を優先するという仕様にするか,エラーを出すのがよいか。

エラー処理の強化

現状では次のような場合のエラー処理が不十分。

  • 外部PDF入力時に,入力ファイルが実際にはPDFではなかった場合
  • 外部ファイル入力時に,入力パスとしてディレクトリ名が指定された場合
  • 出力ファイルパスが実際にはディレクトリ名であった場合

ニセの gs が置かれているとクラッシュする

問題点

gs のパス設定において設定されているパスの値が,存在するパスではあるが実行不可能ファイルであったり,gs でない実行ファイルであったりした場合に,クラッシュしたり応答しなくなったりするなどの挙動を示す。

PDFを直接出力するエンジンへの対応

pdfLaTeX, XeLaTeX, LuaLaTeX など,PDFを直接出力するTeXエンジンへの対応

意義

  • ゆきだるま絵文字☃⛄など特殊な文字をXeLaTeXで出力するときに便利
  • 非日本語ユーザへの普及を見据えて
  • 来たるべきLuaTeX-ja時代への対応

課題

  • UIをどう整理するか?
  • TeXエンジンが (u)pLaTeX に限られなくなるので,「変換ツール」タブの platex という項目のラベルは LaTeX などへ変更すべき。

UIの例

  • 「変換ツール」タブに「PDFを直接出力するエンジンを利用」というチェックボックスを設ける。そのチェックボックスがONのときには dvipdfmx のパス設定が無視され,TeXコンパイラから出力されたPDFがそのまま用いられる。
  • ↑においてチェックボックスではなくプルダウンメニュー
    Windows版の例
  • dvipdfmx のパス設定が空白のときにはPDF直接出力エンジンを使用すると見なす。
  • PDF生成用のスクリプトを自由に編集できる複数行のテキストエリアを設ける(コンパイルターゲット名を $FILENAME とするなどして)。この方法であれば,latex + dvips + ps2pdf など,他のワークフローにも対応できるが,ユーザが設定をいじって -interaction=nonstopmode を外してしまったりするとフリーズなど思わぬ悪影響をもたらす可能性もある。

gs9.15 以上の eps2write デバイスでもクロップに失敗する例がある

#18 「gs9.14 以下の epswrite デバイスでクロップに失敗する例がある」と同様の問題が,gs9.15 以上の eps2write デバイスでも起こることがある模様。

このPDFは,gs -sDEVICE=eps2write で生成されるEPSのbboxと,gs -sDEVICE=bbox で得られるbboxが一致しません。

対策としては,#18 と同様に,

gs の eps(2)write デバイスで得られたEPSのBB情報は信用せず,生成したEPSのBB情報を,「元PDFに対する gs -sDEVICE=bbox の出力内容」で上書きする

とすることが考えられます。

配布サイトの再デザイン

現在の配布サイトが縦に長くなってきたので,そろそろページを切り分けて見やすくしたい。

ページ構成の案

  • トップページ(特徴・スクリーンショット・連絡先を含む)
  • 解説記事へのリンク集
  • ダウンロード・動作条件
  • インストール法・アンインストール法・トラブルシューティング
  • Tips集
  • ソースコード・ライセンス
  • 更新履歴

Tips集に載せるTipsの案

  • 2種類の入力補完について
  • 文字色や背景色を変える方法
  • 幅を一定に保つ方法
  • 画像からソースの復元
  • Adobe Illustrator との連携
  • 複数ページドキュメントの活用
  • EPSから他形式への変換ツールとしての使用法
  • \begin{document}~\end{document} 全体を自動的にディスプレイ数式にする方法
  • 各スクリーンショットも一新する

外部エディタによる編集機能

「外部エディタで開く」ボタンを押すと外部エディタで開き,そこで編集できる機能。(発端

利点

  • 使い慣れたエディタで編集できる。

実装

  • 「外部エディタで開く」ボタンを押すと,現在のプリアンブル+本文をまとめたファイルを一時ファイルに書き出す。
  • それを外部エディタで開かせる。
  • その変更を監視しておく。ファイルに変更があり次第TeX2imgのウィンドウ上にもリアルタイムに反映させる。
    • ファイル変更監視機能はTeXShopにも搭載されているので,実装は比較的容易か。

検討課題

  • 外部エディタを選択する設定はどうするか。デフォルトの関連づけでよいか。エディタ選択画面を用意するか。
  • 外部エディタで編集中はTeX2imgのウィンドウはどうするか。
    • 外部編集中はTeX2imgの編集領域はグレーアウトさせる?そうすると「外部エディタによる編集の終了」を検出する必要があり,難しいかも。
    • 外部編集中もTeX2imgはそのままにする?その場合,外部エディタ編集中にTeX2imgの編集領域が変更されたらどうする?

Ver. 1.8.7 Release Candidate

Ver. 1.8.7 Release Candidate が出来上がりました。お試しください。

改良点

GUI版に外部ファイル入力機能を追加

Issue #3 の議論の結果を受けて,Mac用GUI版にもWindows版と同様の外部ファイル入力機能を設けました。

  • 現時点では,「ソース直接入力か外部ファイル入力かの設定」および「外部入力ファイルのパス」は,「直接入力のTeXソース本文」同様に,アプリ終了時における保存設定項目から除外してあります。
  • それゆえ,アプリ起動時には常に「ソース直接入力」および「外部入力ファイルのパスは空」の状態(上記画像の状態)で起動します。
  • この仕様は暫定的なものです。設定保存項目についてのご意見がありましたらぜひ。

インポート・エクスポート機能を搭載

Issue #1 の議論の結果を受けて,ファイルメニューに「インポート(⌘O)」「エクスポート(⌘S)」を設けました。

  • インポートを実行すると,プリアンブル部と本文に分割されて,それぞれプリアンブルウィンドウと本文入力エリアに入力されます。
  • 既存の入力内容は警告を出した上で破棄されます。
  • インポートするファイルの文字コードは自動判定します。
  • 「入力された ¥ を \ に置換」がONのときには,インポートするファイル内の ¥ を \ に置き換えてインポートします。
  • インポートされるファイルは一切変更しません。
  • エクスポート時には,プリアンブルと本文を合体したソース全体を保存します。
  • エクスポートする文字コードは,変換設定の「ソースの文字コード」の設定に従います。

その他の改善・仕様変更

  • 「プリアンブルをデフォルトに戻す」機能において,コンパイルエンジンが uplatex の場合には jsarticle のドキュメントクラスオプションに自動的に uplatex を付与するように改善。
  • 従来ソースの文字コードの設定が UTF8 / UTF8(uptex) と分かれていたところを UTF8 に統一。これに伴いCUI版のusageメッセージも変更。

既存Issueの現状と今後

SVG生成のための mudraw のオプションの変化に対応

GUI版では TeX2img.app に内包された mudraw を使うのでバージョンが固定されているが,CUI版では 「まず $PATH 内の mudraw を探し,そこに見つからなければGUI版の TeX2img.app をサーチし,それに内包された mudraw を使う」という挙動をする。
そのため,ユーザが独自に mudraw をインストールしている場合,そのバージョンに左右される。

mudraw は最近コマンドラインオプションに大きな変化があった模様。
ユーザが MacPorts などで最新版の mudraw に更新している場合を考えて,この新しいオプション様式に対応させねばならない。

SVGやアニメGIFのプレビューをSafari固定ではなく,デフォルトブラウザで開くように

普段 Safari ではなく Chrome や Firefox を常用している人からすると,普段使わない Safari が起動されるのが不快かもしれない。
SVGやアニメGIFのプレビューを,デフォルトブラウザで開かせるようにしてはどうか。

今時のブラウザなら,(アニメGIFはもちろん)SVGの表示にも対応しているはず。

参考:1年前時点のSVG対応状況の調査

※この記事では Safari 5.0 までは SVG 未対応に分類されているが,Wikipedia によると Safari 3 の時点でSVGには対応している。(Snow Leopard は発売時には Safari 4 を同梱。)

ghostscript に -dNOCACHE を付ける

項目

gs 実行時のオプションに -dNOCACHE を付与しておいた方がよさそうです。

理由

現状では,gs 9.15 未満で実行したときに,一部の小さな文字がアウトライン化されず,ビットマップとして保存される現象が起こります。

再現例

gs 9.07 を用いて,

あ,、。.$2-1$

をアウトライン化したEPSやPDFに変換すると,句読点やマイナスの部分がビットマップ化されて埋め込まれていることが分かります。

2015-03-09 22 48 42

-dNOCACHE を付けると正しくアウトライン化されます。

2015-03-09 22 50 44

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

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

メリット

  • LaTeXiT のように,PowerPoint からのドラッグ&ドロップでTeXソースを復元できる。

仕様案

  • 「ソースを復元できるようにする」(--embed-source) がON,かつ出力形式がPDFの場合には,PDFのアノテーション情報にもTeXソース情報を含める。
  • そのアノテーション情報には「TeX2imgが埋め込んだソース」というラベルを付けておく。
  • PowerPoint などからPDF画像がTeX2imgのソース入力欄にドラッグされた場合,「TeX2imgが埋め込んだソース」というラベルが付いたアノテーション情報を探し,それがあればドラッグを受け付ける。
  • それがドロップされた場合,従来の TeX ソース復元機能と同じルーチンを発動させてソースを復元する。
  • 一方,Finderからのファイルのドラッグ&ドロップによるソース復元時は,引き続き拡張属性を利用して復元する。
  • 保険的補助機能として,「拡張属性がなくてもPDFのアノテーション情報に『TeX2imgによって埋め込まれたTeXソース』を発見した場合には,それを利用して復元する」機能を付ける。これにより,Windowsとのやりとりなどによって拡張属性が失われてしまったPDFについても,保険的にそちらからソースを復元できる。

検討事項

  • 「拡張属性へのソース保存」と「PDFのアノテーション情報へのソース保存」を独立にON/OFFを切り替えられるオプションは必要か。➡ 分かりにくいので,今のところ,これらは「ソースを復元できるようにする」(--embed-source) によって一体でON/OFFが切り替わる仕様で問題ないのではと考えている。

制限

  • 最新版の Keynote は図版を Keynote 外にドラッグすることができなくなっているので,Keynote からのソース復元はできない。この制限は LaTeXiT も同様。

外部TeXファイル入力時に,入力ファイルのパスにスペースが含まれているとコンパイルに失敗する

現象:外部TeXファイル入力時に,入力ファイルのパス(存在するディレクトリ)にスペースが含まれていると jsarticle.cls が見つからないなどと言ってコンパイルに失敗する

原因:export TEXINPUTS=... の右辺が " " で囲まれていないため,スペースが含まれるとそこで TEXINPUTS が切れて,本来の TEXINPUTS の内容が破壊されてしまう

OS X 10.6 以下で自動更新を無効にできるか?

いま配布サイトで「Lion 以上」と書いてはありますが、記憶が正しければ Sparkle Framework 依存だった気がします。OS 判定を入れて「10.6 以下なら自動更新を無効化(または警告)」のようなことはできないでしょうか。(機能は制限されるかもしれないけど、動く部分だけでも使えたらという希望があってもおかしくないかなと思っています)

SVG出力のサポート

このスライドを見ると,SVG出力をサポートした方がいいのかなと思いました。
(単にベクター形式ということであればPDFやEPS出力でもいいと思いますが,SVGはソースがテキストなXMLである点が魅力?)

初回起動時に設定プロファイルを選択する機能 → 自動判定対象エンジン選択機能に変更

現状は,初回起動時に platex へのパスが自動探索され,jsarticle を用いた典型的な和文文書作成の pLaTeX 用プリアンブルが設定されるようになっている。
しかし,将来的な国際展開まで視野に入れると,pLaTeX + dvipdfmx + jsarticle がデフォルトというわけにはいかないだろう。
一方,現状の TeX2img が日本語ユーザーにとって便利な初期設定になっており,そのため初期設定の障壁が下がっているというメリットは重大であり,軽視できない。

そこで,初回起動時に典型的な設定プロファイルから選ばせるという仕様はどうだろう。
例えば,初回起動時に

使用するプロファイルを選択してください。

  • pdfLaTeX(英文)
  • XeLaTeX(英文)
  • LuaTeX(英文)
  • pLaTeX(和文)
  • upLaTeX(和文)
  • XeLaTeX(和文)
  • LuaLaTeX(和文)

のようなダイアログを出す。日本語環境で起動された場合には「pLaTeX(和文)」がデフォルトで選択されているようにしておく。

そして,それぞれに対応するプリアンブルテンプレートがデフォルトでロードされるだけでなく,LaTeX コンパイラのパスも,それぞれに対応するものを探索して設定する。

初回起動時に誤ったプロファイルを選択した場合のために,後からでもやり直せるようにしておく。
環境設定の「自動判定」ボタンを利用し,次のような挙動をさせる。

  1. 自動判定ボタンを押す。
  2. 「どのコンパイラをサーチしますか?」というダイアログを出し,初回起動時と同じ選択肢を提示する。
  3. ユーザが選択したコンパイラパスをサーチした後に,次に「対応するプリアンブルのテンプレートもロードしますか?」というダイアログを出し,ユーザが「はい」と答えればプリアンブルもそれに書き換える。(デフォルトのプリアンブルテンプレートをユーザが削除していてもよいように,TeX2img.app に内包されているデフォルトのプリアンブルテンプレートの原本からロードする。)

一方,CUI版の --compiler のデフォルト値は現状 platex になっているが,これをどうするかという課題は残る。

コンパイル後にクリップボードにコピーする

Windows版にならってMac版にもコンパイル後にクリップボードにコピーする機能を加える。

  • 複数ファイル生成時は全ファイル一括コピーで。(PowerPoint や KeyNote は複数ファイルペーストに対応している。)
  • CUI版にも加えよう。オプションは --copy でよいか?

「文字情報」機能を設ける

  • TeXShop に導入したのと同じ「文字情報」を機能を TeX2img にも設ける。
  • Inspect, Information ということで,ショートカットキーは Command+Option+I でどうだろう。(TeXShop ではショートカットキーを設けていない。)

再開機能

履歴機能の話とも関係]

Command+Qでアプリを終了したときに,現在入力中の内容を保持し,次回起動時にはその内容を復元するようにするか?

検討事項

  • 再開機能は独自に実装するか,それともOS標準の再開機能を使うか。
  • 再開機能は強制か,設定画面で選択式にするか?

GUIによる生成画像全体の文字色変更

LaTeXiTにはGUIによる生成画像全体の文字色変更機能があるとのこと。

LaTeXiT

この機能は必要?

全体の文字色を変えたいユーザは,プリアンブルに

\usepackage{color}
\color{red}

などと入れておけば済む話ではあるが,GUIからそれを可能とする機能は必要だろうか。

仮に入れるとした場合の仕様と課題

  • 仕様としては,プリアンブルに自動的に上記のような文字列を挿入した上で一時ファイルを生成してコンパイルすることになるだろう。
  • ユーザが既にプリアンブルに color や xcolor パッケージを \usepackage していた場合,重複して color パッケージなどをロードしてはいけないといった判断が必要になる。
  • 多数のTeXエンジンをサポート対象としているTeX2imgの場合,color / xcolor パッケージのドライバ依存性の問題が生じる。LaTeXのパス設定が他の挙動に影響を及ぼさないとするTeX2imgの現在の設計**からすると,パス設定に指定されたエンジンに応じて,自動挿入する color / xcolor パッケージのドライバ指定を変えるという挙動は再び「有毒」となってしまう。

上記のようなことを考えると,ユーザが自由にプリアンブルを設定できるTeX2imgでは,この機能は特に必要なさそうな気がします。
公式サイトのTips集に「文字色を変えるには」という項目を設けておけば済む話のような。

元のページサイズを維持する機能

「図版サイズでクロップせずに元のPDFのページサイズを維持する機能」というのはどうだろう。

メリット

例えば次のようなソースを pdfLaTeX でコンパイルすることで,「横幅を一定に保った数式画像の生成」が容易にできるようになる。

\documentclass[border=1pt]{standalone}
\pagestyle{empty}
\begin{document}
\begin{minipage}{10cm}
\abovedisplayskip=0pt
\[f(x)=\int_0^x e^t dt\]
\end{minipage}
\end{document}

仕様案

  • PDFのページサイズとしては,通常のリーダーでの描画範囲として採用されている CropBox を採用するのがよいだろう。(→ 何Boxを採用するかを選ばせるUIを付ける手も。)
  • CropBox の取得方法としては,TeX2img.app の中に pdfinfo を内包しておいてそれを利用する。
  • CUI版のオプション(例:--keep-pagesize)を増補し,この機能の動作には pdfinfo 必須とする。(従来の mudraw と同様の扱い。TeX2img.app がインストールされていればその中もサーチ。)

→ OS X の Quartz API によって,5つのナントカBoxは全て取得できるので,これを用いれば pdfinfo 依存性を排除できる。

実装案

  • gs >= 9.15 を前提とできるのならば,gs -sDEVICE=pdfwrite -dNoOutputFonts を使ってPDFのアウトライン化を行うのが楽だが,-dNoOutputFonts が使えない過去の gs をサポートしようと思うと,従来の変換経路の中に「EPSのBBox情報を元のPDFのCropBoxに書き戻す」という方法をとるのがよいだろう。

(A) gsを通さない経路の場合

従来の変換経路は

  1. 速度優先モードでのビットマップ生成 (PDF →[pdfcrop類似処理でクロップ]→ PDF →[Quartz API でビットマップ化+余白付与]→ JPEG/PNG/GIF/TIFF/BMP)
  2. テキスト情報を残したPDF生成 (PDF →[pdfcrop類似処理でクロップ+余白付与]→ PDF)
  3. テキスト情報を残したSVG生成 (PDF →[pdfcrop類似処理でクロップ+余白付与]→ PDF →[mudraw]→ SVG)

であった。この「pdfcrop類似処理でクロップ」においては,gs -sDEVICE=bbox の結果が pdfTeX に渡されていた。ここを,元のPDFのCropBoxのサイズを渡すことにすればよい。

(B) gsを通す経路の場合

従来の変換経路は

  1. 画質優先モードでのビットマップ生成 (PDF →[gs(eps(2)write)でアウトライン化+クロップ]→ EPS →[epstopdf(gs)]→ PDF →[Quartz API でビットマップ化+余白付与]→ JEPG/PNG/GIF/TIFF/BMP)
  2. アウトライン化PDF生成 (PDF →[gs(eps(2)write)でアウトライン化+クロップ] → EPS →[epstopdf(gs)]→ PDF →[pdfcrop類似処理で余白付与]→ PDF)
  3. アウトライン化EPS生成 (PDF →[gs(eps(2)write)でアウトライン化+クロップ] → EPS →[BB情報を編集して余白付与] → EPS)

であった。これらの経路においては,「gs(eps(2)write)でアウトライン化+クロップ」を行った直後に,生成したEPSのBBox情報を,元のPDFのCropBoxで上書きすればよい。(2. においては,後半の「pdfcrop類似処理で余白付与」の部分はクロップせぬよう (A) と同じ処理を利用する。)

GUIによるカラーリングの変更

LaTeXiTが勝る点の残り1点,「GUIによるシンタックスハイライトの色変更」ができるようにしたい。

  • Windows版のUIが参考になる。

Windows版のUI

  • 環境設定パネルに新しいタブを追加し,そこに設定をまとめる。
  • そうなると,現在「表示」メニューにある「対応する括弧の強調表示」「不可視文字の表示」も,あわせて環境設定パネルに移すのがよいだろう。
  • 「表示」メニューの「ソースのカラー表示」は,OFFにする必要性がないであろうから,廃止でいい気がする。
  • 現在ソースウィンドウ,プリアンブルウィンドウのそれぞれに設置されている「表示フォント設定」も,環境設定パネルに一元化するのがよいか。

PDF出力のときに単一PDFとして出力する機能

#36

Acrobat と異なり TeX2img では全ページバラバラにされてしまいますが。

というのを書いた後に,単一PDFとして出力する機能があると便利だろうと思いました。

方法

「出力画像の設定」のところに

  • 単一ファイルにまとめる (PDF)

のような設定項目(CUI: --merge-files)を追加する。
PDF結合処理は OS X のAPI で可能。

Ver. 1.10.x を Ver. 2.0.2 に追従させる

  • Ver. 2.0.2 で導入された新機能のうち,可能なものについては Snow Leopard で動く Ver. 1.10.x にも取り込む
  • Ver. 1.10.0 において Ver. 2 系列から削減された機能のうち,別実装で復元可能なものは復元させる

SVGのコメントにもソース情報を保存する?

PDFについては,注釈情報を経由することで Mac ⇄ Windows のソースの互換性が確保できました。
他にソース情報をデータフォーク側に容易に埋め込めるフォーマットとしては,SVGが挙げられます。

例えば,<svg> の前に,次のようなコメントを追加するというような方法です。
XMLの禁止文字 (& < > " ') を回避するために,ソースをBASE64エンコーディングしています。

<!--
%%TeX2img Document
JSBMYVRlWCBjb21waWxlcjogcGxhdGV4CiUgRFZJIGRyaXZlcjogZHZpcGRmbXgKXGRvY3Vt
ZW50Y2xhc3NbZmxlcW4scGFwZXJzaXplXXtqc2FydGljbGV9Clx1c2VwYWNrYWdle2Ftc21h
dGgsYW1zc3ltYn0KXHVzZXBhY2thZ2VbZHZpcGRmbXhde2dyYXBoaWN4LGNvbG9yfQpccGFn
ZXN0eWxle2VtcHR5fQoKXGJlZ2lue2RvY3VtZW50fQrjgYrjga/jgojjgYbjgZTjgZbjgYTj
gb7jgZnjgIIKXFtcemV0YSgyKT1cc3VtX3tuPTF9XntcaW5mdHl9XGZyYWN7MX17bl4yfT1c
ZnJhY3tccGleMn17Nn1cXQoKXGVuZHtkb2N1bWVudH0K
-->

ただ,SVGソースが若干大きくなってしまうという欠点はあります。
SVGの利用法としてはウェブやepubへの埋め込みが主と考えられるため,余計なコメントによるファイルサイズの増加は好まれないかもしれません。

また,PDFの注釈情報へのソース埋め込みは,PowerPointからのソース復元という大きなメリットがありましたが,SVGについてはPowerPointやKeynoteに埋め込めないため,SVGコメントにソースを埋め込んでも,

  • Mac ⇄ Windows のソースの互換性向上
  • 拡張属性が失われたときの保険

というメリットしかなく,ありがたみが薄いかもしれません。

入力内容の履歴機能

入力内容の履歴機能を設けるか検討。(発端

  • コンパイルするたびに,処理したソース(プリアンブル+本文の揃った完全なソース)をどこかに保存
  • メニューから過去に処理した履歴を復元できるように

検討点

  • どこに保存する? ~/Library/Application Support/TeX2img/ あたりか。
  • ファイル名は連番?日時?
  • いくつまで保存する?「20個以上昔のものは自動削除」とか?それとも永久保存?
  • コンパイルに失敗したソースは保存しない?
  • 履歴からの復元のUIは?
  • 「履歴の消去」のUIも準備
  • 履歴から特定の一つだけ削除したりするUIも用意する?

参考

LaTeXiT の機能やUIを要研究。

複数ファイルを生成したとき1つのウィンドウで開かせる

#21 での議論に関連して。

Preview.app では,別々のファイルを1つのウィンドウで開く機能がある。(Finderで複数ファイルを選択してダブルクリックした場合など。)
この機能に他のアプリケーションからアクセスできれば,複数ファイルを1つのウィンドウにまとめて開かせることができ,ウィンドウが散らばらなくて便利。
(SVG出力の場合はSafariで開くので,元々タブに分かれて開くはず。)

CUI版に --margins オプションを加える

#48のコメントを受けて。

pdfcrop と同じ仕様の --margins オプションを加える。

pdfcrop のヘルプメッセージ:

  --margins "<left> <top> <right> <bottom>"                  (0 0 0 0)
                      add extra margins, unit is bp. If only one number is
                      given, then it is used for all margins, in the case
                      of two numbers they are also used for right and bottom.

コマンド補完,オートコンプリートの項目の編集機能

TeX2img に用意された2種類の補完機能

  • ESCキーによって発動するコマンド補完
  • キー入力した瞬間に発動するオートコンプリート

について,その内容を編集する機能を用意したい。

これらの補完内容はTeXShopと共有しているので,TeXShopの側で編集すればよいのだが,いちいちTeXShopを起動しなくてもTeX2img内で編集を完結できるようにするとより便利だろう。

マルチページTIFF形式での出力に対応する

Windows版がマルチページTIFF形式での出力に対応したようなので,Mac版でも対応しよう。

実装法の案

  • OS X のAPI ➡ マルチページTIFF出力に非対応の模様
  • Ghostscript ➡ マルチページTIFFは作れるが,背景透過のTIFF出力ができない模様
  • libtiff 付属の tiffcp コマンド ➡ 便利!

というわけで,

  • SVG出力における mudraw 同様に,TeX2img.app の中に tiffcp コマンドを内包しておきそれを使う。
  • tiffcp コマンドは 10.6 以降で動くようにビルドしておく。
  • CUI版でマルチページTIFF出力を行いたい場合は,ユーザが各自 tiffcp コマンドをインストールしておくか,または /Applications 内に TeX2img.app を入れておくことを要求する。
  • 単一PDF出力機能と同様に,既存の「バラバラTIFF出力」を行った後に,最後に tiffcp コマンドで単一ファイルにまとめるステップを挟み込む。

という方法で実装しよう。

dvips + gs 経由の変換への対応(PSTricks などの用途を想定)

#28 での議論を受けて,新規に Issue として独立させました。]

ここまでのまとめ

  1. PSTricks をサポートしたい。
  2. そのためには DVIware として dvipdfmx だけでなく dvipdf にも対応するようにしよう。
  3. dvipdf は Ghostscript が入っている環境ならば存在を仮定してよいだろう。
  4. GUI のパス設定画面の dvipdfmx という部分は DVI to PDF と改称しよう。
  5. CUI 版の --dvipdfmx--dvitopdf などと改称しよう。
  6. PSTricks を \usepackage した PSTricks 用のテンプレートを増設しよう。

課題

  1. テンプレートの内容はどうするか。PSTricks を使用するための標準的なプリアンブルはどんな内容か。
  2. DVIware として dvipdfmx と dvipdf の2つだけを想定するという前提でよいのか。そして,パス設定文字列に指定された DVIware の指定が dvipdfmx であるか否かによって,-vv オプションを付与するか否かを判定するという「毒入り」挙動でよいのか。代案としては,
    • 自動判定のサーチ対象 DVIware が dvipdfmx である場合には,見つかった dvipdfmx のパスに対して -vv を付けて,設定画面のパス欄に
      /path/to/dvipdfmx -vv を入力するという案 ➡ ユーザーが不審に思うかも。
    • dviware をまず --help 付きで実行してみて,そのヘルプメッセージに -vv という文字列が含まれていれば -vv 付きで実行するという案 ➡ やや大げさか。
    • 「-vv の ON / OFF を切り替えるためのチェックボックス」を設定画面に追加する ➡ 高々 -vv に対して大げさすぎる。
  3. 「自動判定の対象の選択肢に表示されるエンジン名称」「ロードされるプリアンブルテンプレートのファイル名」「パスをサーチする実行ファイルの名称」の対応関係をどのように付けるか。自動的に対応が決まるような規則的な命名は可能か。それとも手動で対応をハードコーディングするしかないか。
  4. pdfLaTeX, LuaLaTeX のような PSTricks をフルサポートできないエンジンに対する PSTricks 対応はしなくてよいか。UI上それをどう表現するか。

案1

  • プロファイル一覧
    • LaTeX
    • pLaTeX
    • upLaTeX
    • XeLaTeX (Japanese)
    • LuaLaTeX (Japanese)
  • チェックボックス「use PSTricks」
  • 用意するテンプレート
    1. compiler: pdflatex
    2. compiler: latex (with PSTricks)
    3. compiler: platex
    4. compiler: platex (with PSTricks)
    5. compiler: uplatex
    6. compiler: uplatex (with PSTricks)
    7. compiler: xelatex
    8. compiler: lualatex

➡ この場合……

  • 「UI上の選択状態 → ロードされるテンプレートのファイル名」はハードコーディングになる。
  • 「use PSTricks」のチェックがONで LuaLaTeX などが選択されたときの挙動の規定が難しい。それをサポートしないのならば,それをUI上どう表現するかが課題。

案2

エンジンと DVIware をフラットに列挙。dvipdf を使うテンプレートには PSTricks 用であることを明記。

  • LaTeX + dvipdf (for PSTricks)
  • pdfLaTeX
  • pLaTeX + dvipdfmx
  • pLaTeX + dvipdf (for PSTricks)
  • upLaTeX + dvipdfmx
  • upLaTeX + dvipdf (for PSTricks)
  • XeLaTeX (Japanese)
  • LuaLaTeX (Japanese)

この案のメリットとしては,

  • PSTricks をサポートしない組み合わせははじめから選べない。
  • 選択肢の表示名とテンプレートのファイル名とを完全に一致させられる。
  • テンプレートの名称から,サーチすべきエンジン名と DVIware 名が機械的に算出できる。

デメリットとしては,

  • 選択肢が多くて分かりにくく,特に初心者がぱっと見たときにどれが標準的な選択肢なのか困惑する

こう並べてみると,案1 が案外複雑で,それよりは案2の方がフラットで規則的でシンプルな設計である気がしてきました。

bxjsarticle v1.x への対応

BXjscls が v.1.0 以降,ドキュメントクラスオプションなどの仕様が若干変更になっています。
TeX2img がデフォルトで内蔵している XeLaTeX 用プリアンブルテンプレートもそれに応じて変更すべきでしょうか?
それとも,最新版を使っていないユーザの利便性を考えて,現行ソースが v.1.x でも通るならそのまま使い続けることにしましょうか。(和文文書で XeLaTeX を使っているような新しい物好きのユーザーなら最新版を使っていることを仮定してもよさそうな気もしますが,不安もあります。)

% compiler: xelatex
\documentclass[fleqn]{bxjsarticle}
\usepackage{zxjatype}
\setCJKmainfont[BoldFont=ヒラギノ明朝 ProN W6]{ヒラギノ明朝 ProN W3}
\setCJKsansfont[BoldFont=ヒラギノ角ゴ ProN W6]{ヒラギノ角ゴ ProN W3}
\usepackage{amsmath,amssymb}
\usepackage{graphicx,color}
\pagestyle{empty}

GUI版の外部ファイル入力機能

Windows版と同様に,GUI版にも外部ファイル入力機能を設ける。

ラジオボタンが均等に配置されると困るので,排他的な挙動をするラジオボタンは自分で実装する必要がある。

出力に白紙ページが含まれる場合に挙動がおかしい

出力に白紙ページが含まれる場合,モードによって色々とおかしな挙動を示す。

特に,「速度優先モード かつ ビットマップ出力」の場合に,出力に白紙ページが含まれると,コンパイル後は二度と Command+T によるコンパイルが効かなくなってしまう。

マスクメロン版 Ghostscript のサポート解除

標準で日本語設定がなされているという理由で,Ver. 1.9.9 から採用された「マスクメロン版 Ghostscript のサポート」(パスの自動判定のサーチ対象に含め,かつ優先順位を最高に)ですが,これは X11 依存性があることが判明。
X11が標準でインストールされていない 10.8 Mountain Lion 以降で実行すると,次のようなダイアログが出てエラーとなってしまいます。

2015-09-10 3 21 38

10.8 以降では,X11依存性のあるアプリは XQuartz を別途インストールせねばなりません。ですが XQuartz は一度インストールすると完全なアンインストールが難しい(OS再インストール or OSアップデートするしかない)ので,インストールを勧めるのは気が進みません。個人的にも,一度インストールしてしまうとX11依存・非依存の判定が難しくなることもあり,極力インストールしたくないところです。

「10.8 以降で標準で動かない」という理由で,マスクメロン版 Ghostscript.app はサポート対象から外すのがよいのではないかと思います。

gs9.14 以下の epswrite デバイスでクロップに失敗する例がある

結城先生からいただいたバグ報告です。参考: https://twitter.com/hyuki/status/622234080587878401

\documentclass[dvipdfmx]{jsarticle}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}

\draw[blue] (0,0) -- (1,1); % (1. blue)
% \draw[black] (0,0) -- (1,1); % (2. black)

\end{tikzpicture}
\end{document}

を gs9.14 で PNG 化すると、クロップに失敗します。しかし、blue が失敗する一方で black, red, gray は成功するという報告があります。

コンパイル中断機能

Windows版同様に,コンパイル中断機能を設ける。

仕様案

  • コンパイル中には「画像生成」ボタンが「コンパイル中断」ボタンに変わる。
  • ショートカットキーはコンパイルと同じ Command+T でよいか?でもそうすると二度押ししてしまったらコンパイル中断になってしまう。Macらしい「中断」のショートカットキーは Command + . だろうか。(例:スクリプトエディタでのAppleScript実行中断,Excelマクロの実行中断,Mathematicaの計算中断)

出力画像ファイルにソースコードを埋め込む

LaTeXiT に対抗して,出力画像ファイルにソース情報を埋め込み,画像ファイルからソースを復元できるようにしたい。

実現方法

  • 出力画像ファイルの EA(拡張属性) にソース情報を書き込む。
  • インポートメニューまたはドラッグ&ドロップによるTeXソースインプット機能において,許容ファイルの種類に .pdf / .eps / .jpg / .png を追加し,それらがインポートされた場合はEAからソースをロードする。
  • EAにソース情報が含まれない画像ファイルをインプットしようとした場合にはエラーを出す。

制御綴の色分けにおいて,\makeatletter を有効扱いにするか否かを選べるようにする

環境設定パネルの「色」の設定で,制御綴の色分けにおいて,\makeatletter を有効扱い・無効扱いのどちらにするかを選べるようにする。
つまり,\hoge@fuga のような並びに対し,\hoge までを制御綴と見なすか,\hoge@fuga 全体を制御綴と見なすかを選べるようにする。
この設定は,hoge の部分をダブルクリックしたときに,自動的に広がる選択範囲をどこまで伸ばすかにも影響させるようにする。

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.