2003/05/11 LaTeX Equation Editor v.1.3 on MacOS X Release 10.2

前にも書いたが、Keynote のプレゼンテーションの中で数式を書くために便利なツールとして LaTeX Equation Editor なるものの存在を阪大の山中さんに教わった。その Equation Editor だが、日本語環境下ではそのままでは使えない。幸いソースコード(v.1.3)が公開になったのでなかを覗いてみた。以下は備忘録。

日本語環境において

NSString *command = [NSString stringWithFormat: @"cd \"%@/\" && %@ \\\\scrollmode\\\\input{equation.tex} &&%@ -E -Ppdf -x %@ equation.dvi -o equation.eps", workingDirectory, latex_bin, dvips_bin, [self magnificationAsString]];


のように作られた文字列オブジェクト *command から

[command cString]


のように文字列を取り出すと "\" -> "\200" の変換が起きてしまい(ASCII 範囲外の文字として扱われてしまう)、

system( [command cString] )

のようなシステムコールでエラーを出して止まってしまう。

この問題を回避するには

system( [command UTF8String] )


のようにすれば、"\" が化ける問題はない。

一方、

NSString *pdfContents = [NSString stringWithContentsOfFile: outputPDFFilePath];


では、ファイルの中身を読み込んだ直後のこの段階で、ファイルの中身が破壊されてしまう。

ファイルの中身を壊さないように読むには、
NSData *data = [NSData dataWithContentsOfFile: [NSString stringWithFormat: @"%@equation.pdf", [self workingDirectory]]];
NSString *pdfContents = [[NSString alloc] initWithData: data encoding: NSASCIIStringEncoding];


のようにする 必要がある。

また、

NSRange r1 = [pdfContents rangeOfString: @"\nxref" options: NSBackwardsSearch];


までのバイトカウントを知るには

int byte_count = [[data subdataWithRange: NSMakeRange(0, r1.location)] length];


のようにする。

また、データを書く際も NSString を使った

[[pdfContents substringWithRange: NSMakeRange(0, r1.location)]
writeToFile: [NSString stringWithFormat: @"%@_foo", [self workingDirectory]] atomically: YES];


では、データが破壊されてしまうので、

[[data subdataWithRange: NSMakeRange(0, r1.location)]
writeToFile: [NSString stringWithFormat: @"%@_foo", [self workingDirectory]] atomically: YES];


のように NSData を使わねばならなかった。

というわけでこれらを考慮した私家版パッチをあてソースから再コンパイルした。ProjectBuilder を使う際には、gcc3 を使うようにターゲット、ビルドスタイル(Development)で、USE_GCC3 = YES と設定する必要があった。gcc2 ではコンパイルできない。このパッチで私の日本語環境では問題なく使えている。パッチは少し前に LaTeX Equation Editor の作者に送っておいたが返事がないので採用されるかどうかは分からない。

カラーパレットは数式全体に適用されるので、もし数式の一部の色を変えたい場合などでは Preferences で

Insert \color{...} command automatically after preamble

のチェックをはずし、preamble に

\usepackage[dvips]{color}
\definecolor{orange}{rgb}{1,0.6,0}
\definecolor{navy}{rgb}{0,0,0.5}
\definecolor{gold}{rgb}{0.85,0.64,0.13}
\definecolor{tomato}{rgb}{1,0.4,0.28}

のような記述を加えれば、後は、LaTeX の入力窓で

\color{orange} a
\color{red} =
\color{navy} b

のように書くことで式の中で色が変えられる。red、blue、yellow、black、white、などの原色はデフォールトで定義済みである。

 

今までにコンパイルしたMacOS X Release 10.2.X 用の rpm については、 spec ファイル、パッチ、ソース RPM、バイナリー RPM それぞれについて SPECSSOURCESSRPMSRPMS に対応するものが置いてある。RPMS 以下の ppc はマシン依存な RPM 、noarch はマシン非依存な RPM の置き場所である。バイナリーのみの RPM および Tar Ball のみのパッケージの場合には、ソースおよびパッチは src に、また、Tar Ball は tgz にそれぞれ置いてある。新しいものは ~fujiik/macosx/10.2.X/ 以下にある点に注意(~fujiik/macosx 直下のものは Public Beta 用、~fujiik/macosx/10.0.X/、~fujiik/macosx/10.1.X/ 以下は 10.0.X、10.1.X 用の古いもの、今後更新の予定なし)。   いつものように使う場合は自己責任で。


Back to Keisuke Fujii's MkLinux/LinuxPPC Life