doratex / tex2img Goto Github PK
View Code? Open in Web Editor NEWTeX2img for macOS
Home Page: https://tex2img.tech
License: Other
TeX2img for macOS
Home Page: https://tex2img.tech
License: Other
おもしろくかつ有用そうな機能拡張を思いついたので、提案します。
「外部ソースファイル入力」は現状で .tex しか受け付けない仕様ですが、ここに .pdf も受け付けるのはどうかという思いつきです。最も有用そうな実用例としては「既存の PDF ファイルをアウトライン化する」という用途です。現在、TeX2img は
の2つの処理が可能です(一つ目のほうには「インポート機能」すなわち TeX ソースインポート・画像ファイルからのソース復元も含むつもり)。この二つ目の機能を拡張すれば、TeX2img の用途が大幅に広がる気がします。TeXtoPDF と PDFtoIMG は独立なはずですので、実装としては「.tex なら TeXtoPDF してから画像変換スキームへ、.pdf なら直接画像変換スキームへ」でいけそうですが、いかがでしょうか。
# 今回の #18 で「pdfcrop してから…」の事前チェック中に、「今クロップした .pdf をそのまま GUI でも epswrite に通せたらなあ」と思ったのがきっかけです。
TeXShop の Command + { や Command + } と同じコメントアウト・アンコメント機能を同じショートカットキーで付与したい。
TeXShop 同様に,補完キーとして Tab を使うことも選択できるようにしよう。
環境設定パネルに選択項目を追加しよう。
※補完キーに Tab を選択している場合,補完できる場面では補完が,補完できない場面では Tab 文字が入力されるようにする(TeXShop 同様)。
結城浩さんの --no-embed-source がデフォルトであってほしいという要望に応えるためには,CUI版のパラメータのデフォルト値を変更できる機能があるとよいのでは。
→ 設定ファイルを用意するほど多量の設定があるわけではないし,設定ファイルにするとそのパースに手間がかかるので,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 のように排反なオプションが同時指定されたときには,後から指定された方を優先するという仕様にするか,エラーを出すのがよいか。
現状では次のような場合のエラー処理が不十分。
gs のパス設定において設定されているパスの値が,存在するパスではあるが実行不可能ファイルであったり,gs でない実行ファイルであったりした場合に,クラッシュしたり応答しなくなったりするなどの挙動を示す。
pdfLaTeX, XeLaTeX, LuaLaTeX など,PDFを直接出力するTeXエンジンへの対応
$FILENAME
とするなどして)。この方法であれば,latex + dvips + ps2pdf など,他のワークフローにも対応できるが,ユーザが設定をいじって -interaction=nonstopmode
を外してしまったりするとフリーズなど思わぬ悪影響をもたらす可能性もある。現在の配布サイトが縦に長くなってきたので,そろそろページを切り分けて見やすくしたい。
「外部エディタで開く」ボタンを押すと外部エディタで開き,そこで編集できる機能。(発端)
ソースウィンドウ・プリアンブルウィンドウの画面右端において,表示を折り返すか否かを選べるチェックボックスを環境設定パネルに設置したい。
「編集」メニューに Unicode 正規化機能を設ける。
Ver. 1.8.7 Release Candidate が出来上がりました。お試しください。
Issue #3 の議論の結果を受けて,Mac用GUI版にもWindows版と同様の外部ファイル入力機能を設けました。
Issue #1 の議論の結果を受けて,ファイルメニューに「インポート(⌘O)」「エクスポート(⌘S)」を設けました。
GUI版では TeX2img.app に内包された mudraw を使うのでバージョンが固定されているが,CUI版では 「まず $PATH 内の mudraw を探し,そこに見つからなければGUI版の TeX2img.app をサーチし,それに内包された mudraw を使う」という挙動をする。
そのため,ユーザが独自に mudraw をインストールしている場合,そのバージョンに左右される。
mudraw は最近コマンドラインオプションに大きな変化があった模様。
ユーザが MacPorts などで最新版の mudraw に更新している場合を考えて,この新しいオプション様式に対応させねばならない。
普段 Safari ではなく Chrome や Firefox を常用している人からすると,普段使わない Safari が起動されるのが不快かもしれない。
SVGやアニメGIFのプレビューを,デフォルトブラウザで開かせるようにしてはどうか。
今時のブラウザなら,(アニメGIFはもちろん)SVGの表示にも対応しているはず。
※この記事では Safari 5.0 までは SVG 未対応に分類されているが,Wikipedia によると Safari 3 の時点でSVGには対応している。(Snow Leopard は発売時には Safari 4 を同梱。)
新機能案:「PDF出力時にPDFのアノテーション情報にもTeXソース情報を含める」
現象:外部TeXファイル入力時に,入力ファイルのパス(存在するディレクトリ)にスペースが含まれていると jsarticle.cls が見つからないなどと言ってコンパイルに失敗する
原因:export TEXINPUTS=... の右辺が " " で囲まれていないため,スペースが含まれるとそこで TEXINPUTS が切れて,本来の TEXINPUTS の内容が破壊されてしまう
いま配布サイトで「Lion 以上」と書いてはありますが、記憶が正しければ Sparkle Framework 依存だった気がします。OS 判定を入れて「10.6 以下なら自動更新を無効化(または警告)」のようなことはできないでしょうか。(機能は制限されるかもしれないけど、動く部分だけでも使えたらという希望があってもおかしくないかなと思っています)
このスライドを見ると,SVG出力をサポートした方がいいのかなと思いました。
(単にベクター形式ということであればPDFやEPS出力でもいいと思いますが,SVGはソースがテキストなXMLである点が魅力?)
現状は,初回起動時に platex へのパスが自動探索され,jsarticle を用いた典型的な和文文書作成の pLaTeX 用プリアンブルが設定されるようになっている。
しかし,将来的な国際展開まで視野に入れると,pLaTeX + dvipdfmx + jsarticle がデフォルトというわけにはいかないだろう。
一方,現状の TeX2img が日本語ユーザーにとって便利な初期設定になっており,そのため初期設定の障壁が下がっているというメリットは重大であり,軽視できない。
そこで,初回起動時に典型的な設定プロファイルから選ばせるという仕様はどうだろう。
例えば,初回起動時に
使用するプロファイルを選択してください。
- pdfLaTeX(英文)
- XeLaTeX(英文)
- LuaTeX(英文)
- pLaTeX(和文)
- upLaTeX(和文)
- XeLaTeX(和文)
- LuaLaTeX(和文)
のようなダイアログを出す。日本語環境で起動された場合には「pLaTeX(和文)」がデフォルトで選択されているようにしておく。
そして,それぞれに対応するプリアンブルテンプレートがデフォルトでロードされるだけでなく,LaTeX コンパイラのパスも,それぞれに対応するものを探索して設定する。
初回起動時に誤ったプロファイルを選択した場合のために,後からでもやり直せるようにしておく。
環境設定の「自動判定」ボタンを利用し,次のような挙動をさせる。
一方,CUI版の --compiler のデフォルト値は現状 platex になっているが,これをどうするかという課題は残る。
Windows版にならってMac版にもコンパイル後にクリップボードにコピーする機能を加える。
--copy
でよいか?SVG出力かつ,出力ファイル名にスペースが含まれる場合,SVG生成に失敗する。
[履歴機能の話とも関係]
Command+Qでアプリを終了したときに,現在入力中の内容を保持し,次回起動時にはその内容を復元するようにするか?
LaTeXiTにはGUIによる生成画像全体の文字色変更機能があるとのこと。
全体の文字色を変えたいユーザは,プリアンブルに
\usepackage{color}
\color{red}
などと入れておけば済む話ではあるが,GUIからそれを可能とする機能は必要だろうか。
上記のようなことを考えると,ユーザが自由にプリアンブルを設定できる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}
→ OS X の Quartz API によって,5つのナントカBoxは全て取得できるので,これを用いれば pdfinfo 依存性を排除できる。
gs -sDEVICE=pdfwrite -dNoOutputFonts
を使ってPDFのアウトライン化を行うのが楽だが,-dNoOutputFonts
が使えない過去の gs をサポートしようと思うと,従来の変換経路の中に「EPSのBBox情報を元のPDFのCropBoxに書き戻す」という方法をとるのがよいだろう。従来の変換経路は
であった。この「pdfcrop類似処理でクロップ」においては,gs -sDEVICE=bbox
の結果が pdfTeX に渡されていた。ここを,元のPDFのCropBoxのサイズを渡すことにすればよい。
従来の変換経路は
であった。これらの経路においては,「gs(eps(2)write)でアウトライン化+クロップ」を行った直後に,生成したEPSのBBox情報を,元のPDFのCropBoxで上書きすればよい。(2. においては,後半の「pdfcrop類似処理で余白付与」の部分はクロップせぬよう (A) と同じ処理を利用する。)
LaTeXiTが勝る点の残り1点,「GUIによるシンタックスハイライトの色変更」ができるようにしたい。
#36 の
Acrobat と異なり TeX2img では全ページバラバラにされてしまいますが。
というのを書いた後に,単一PDFとして出力する機能があると便利だろうと思いました。
「出力画像の設定」のところに
のような設定項目(CUI: --merge-files)を追加する。
PDF結合処理は OS X のAPI で可能。
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コメントにソースを埋め込んでも,
というメリットしかなく,ありがたみが薄いかもしれません。
入力内容の履歴機能を設けるか検討。(発端)
~/Library/Application Support/TeX2img/
あたりか。LaTeXiT の機能やUIを要研究。
#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種類の補完機能
について,その内容を編集する機能を用意したい。
これらの補完内容はTeXShopと共有しているので,TeXShopの側で編集すればよいのだが,いちいちTeXShopを起動しなくてもTeX2img内で編集を完結できるようにするとより便利だろう。
Windows版がマルチページTIFF形式での出力に対応したようなので,Mac版でも対応しよう。
というわけで,
という方法で実装しよう。
[#28 での議論を受けて,新規に Issue として独立させました。]
dvipdfmx
という部分は DVI to PDF
と改称しよう。--dvipdfmx
は --dvitopdf
などと改称しよう。-vv
オプションを付与するか否かを判定するという「毒入り」挙動でよいのか。代案としては,
/path/to/dvipdfmx -vv
を入力するという案 ➡ ユーザーが不審に思うかも。➡ この場合……
エンジンと DVIware をフラットに列挙。dvipdf を使うテンプレートには PSTricks 用であることを明記。
この案のメリットとしては,
デメリットとしては,
こう並べてみると,案1 が案外複雑で,それよりは案2の方がフラットで規則的でシンプルな設計である気がしてきました。
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}
Windows版と同様に,GUI版にも外部ファイル入力機能を設ける。
ラジオボタンが均等に配置されると困るので,排他的な挙動をするラジオボタンは自分で実装する必要がある。
出力に白紙ページが含まれる場合,モードによって色々とおかしな挙動を示す。
特に,「速度優先モード かつ ビットマップ出力」の場合に,出力に白紙ページが含まれると,コンパイル後は二度と Command+T によるコンパイルが効かなくなってしまう。
理由:エラーを無視しても意図する結果はまず得られないであろうから。
標準で日本語設定がなされているという理由で,Ver. 1.9.9 から採用された「マスクメロン版 Ghostscript のサポート」(パスの自動判定のサーチ対象に含め,かつ優先順位を最高に)ですが,これは X11 依存性があることが判明。
X11が標準でインストールされていない 10.8 Mountain Lion 以降で実行すると,次のようなダイアログが出てエラーとなってしまいます。
10.8 以降では,X11依存性のあるアプリは XQuartz を別途インストールせねばなりません。ですが XQuartz は一度インストールすると完全なアンインストールが難しい(OS再インストール or OSアップデートするしかない)ので,インストールを勧めるのは気が進みません。個人的にも,一度インストールしてしまうとX11依存・非依存の判定が難しくなることもあり,極力インストールしたくないところです。
「10.8 以降で標準で動かない」という理由で,マスクメロン版 Ghostscript.app はサポート対象から外すのがよいのではないかと思います。
結城先生からいただいたバグ報告です。参考: 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版同様に,コンパイル中断機能を設ける。
環境設定パネルの「色」の設定で,制御綴の色分けにおいて,\makeatletter を有効扱い・無効扱いのどちらにするかを選べるようにする。
つまり,\hoge@fuga
のような並びに対し,\hoge
までを制御綴と見なすか,\hoge@fuga
全体を制御綴と見なすかを選べるようにする。
この設定は,hoge の部分をダブルクリックしたときに,自動的に広がる選択範囲をどこまで伸ばすかにも影響させるようにする。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.