📑

Claude CodeでLuaLaTeX用の学会クラスファイルを作る

に公開

論文を書くツールとしてLaTeXはよく使われており、学会などでは投稿用としてクラスファイルが提供されている。しかしながら、platex用のクラスファイルがまだ多いという現状がある。LaTeXのクラスファイルの作成はハードルが高く、私も提供されるものを使うだけである。

しかし、今なら生成AIに任せれば作ってくれるのではないか?そんな訳でClaude Codeに情報処理学会のクラスファイル(ipsj.cls)をLuaLaTeX用へ変換してもらった。

仕様の理解

まずは仕様書を作成してもらおうと思い、クラスファイル(ipsj.cls)と日本語論文のサンプルと出力結果(jsample.tex, jsample.pdf)を渡して仕様書の作成を依頼すると以下のエラーがでた。クラスファイルが大きすぎるらしい。

Read(ipsj.cls)
Error: File content (63964 tokens) exceeds maximum allowed tokens (25000). Please use offset and limit parameters to read specific portions of the file, or use the GrepTool to search for specific content.

その後、grepを駆使して読み取ってたくれたみたいで、仕様書の形にはしてくれた。ただ、jsample.texを見るとわかるAPIまわりの仕様が整理されているだけで、レイアウトに必要な文字数やマージン、スペースの仕様が少ないのでちょっと心配になったが次に進むことにした。

実装の方針

ipsj.clsはスクラッチから作成されているが、jlreqなどの既存のクラスファイルをベースにする方法もある。単純に変換するとするとスクラッチからの方が楽そうにも思えるが、Claude Codeに相談してみた。jlreqベースの方が良いとの回答だったのでそのように進める。

luatexのクラスファイルを作成したいと思うのですが、新規に作成するのと、jlreqなど既存のクラスファイルをベースにするのとどちらが良いでしょうか?

LuaTeX用のIPSJ論文クラスファイル作成について、既存のjlreqクラスをベースにする方が良いと考えます。理由は以下の通りです:

(中略)
新規作成との比較

項目 jlreqベース 新規作成
開発期間 短期(数週間) 長期(数ヶ月〜)
安定性 高い 初期は不安定
LuaTeX対応 完全対応済み 要実装
日本語組版 最適化済み 要実装
保守性 良い 要継続開発

実装させる

実装部分は基本的にほったらかしでやってみた。Notoフォントを指定してきたので用意してあげる必要があったぐらいでコンパイルが通るクラスファイルを作ってくれた。

後出しになってしまうが、最後にexpl3に変更してもらった。

expl3を使うように変更できますか?

はい、expl3を使用してクラスファイルを書き直します。expl3はLaTeX3の低レベルプログラミング言語で、より安全で効率的なコードを書けます。


出力結果 (いじった後なので、Claude Codeが出力したそのままではありません)

こんな感じの出力結果になった。タイトルに必要なものは用意されている、日本語タイトルの下に英語タイトルがあったり、順番などはおかしい。章タイトルの下のスペースとかも大きい気がする。これをベースにして修正していくのがいいのかな?という気はする。

ちなみに、このサンプルファイルもClaude Codeが出力してきた。lsでファイルサイズを計測したり、コンパイル時間を計測していたりしていたので、何をしているのかな?と思っていたら、このレポートを作成するためであった。注力するポイントが少し違うような気はするのだが...

おわりに

Claude Codeが出力したコードを少し手直ししてGitHubに置いておいた。
正直使い物にはならないと思うので、時間を見つけて修正を行なっていきたいとは思う。

https://github.com/attgm/ipsj-luatex


おまけ:他の生成AIにも仕様書を書いてもらった

ipsj.clsから仕様書を書き起こすところが重要であったように感じるので、他の生成AIにも仕様書をつくってもらった。レイアウトとフォントについてを比較してみると以下のような感じ。

Gemini

細かくはないが、レイアウトに関する指定がある。ただ「jsample.pdfのレイアウトを再現するように」という記述が目立つので、Claude Codeが理解できるかは微妙。

マージン・寸法: jsample.pdfのレイアウトを再現するように、jlreqの機能を用いて各寸法を設定する。pLaTeX特有の単位(Q, H, zw)は用いず、mm, ptなどの標準的な単位で指定する。
 本文領域: textwidth=177mm, textheight=250mm 程度
 段間: columnsep=8mm

フォントについては柔軟に対応するようになっている。最近のTexLiveの標準フォントである「原ノ味フォント」がでてきているのは良いのではないか。

フォント: 特定のフォントに依存しない設計とするが、デフォルトでは「原ノ味フォント」や「IPAexフォント」などのオープンソースフォントが埋め込まれることを想定する。

Chat GPT

レイアウトに関してはぼんやりしている。「適正値」では仕様にはならないような...ちなみにフォントサイズは 10pt ではない(ipsj.clsの設定がかなり特殊なのですが...)

用紙:A4、2 段組(jlreq の two-column 機能)
文字サイズ:本文 10pt(段落先頭字下げ、和文は jlreq 既定)
段間:column_gap は jlreq 既定値を採用、クラス内部で \jlreqsetup{column_gap=<適正値>} にて調整
ベースライングリッド:見出し・数式で乱れを最小化(grid 同期を有効化)

フォントについては Claude Code と同じく Noto Serif 指定。たまたまなのか、何か Noto に信頼を寄せる理由があるのか...

4.1 既定フォント
CJK:Noto Serif CJK JP(存在しない場合は HaranoAjiMincho などに自動フォールバック)
Latin:TeX Gyre Termes(または Libertinus Serif)
submit 時:Latin/CJK とも固定指定で再現性を担保。

ipsj.clsでは\受付 \再受付 といった日本語のコマンドがあるのだが、\receivedといった英語でのコマンドも用意するように仕様がなっているのは興味深かった。

Discussion