aozorahack / aozora2html

Creative Commons Zero v1.0 Universal
14 stars 2 forks source link

LaTeX出力 #46

Open gemmaro opened 3 years ago

gemmaro commented 3 years ago

現在XHTML出力が可能ですが、こちらに加えてLaTeXへの出力ができると、印刷して読む用途に便利だと思います。 (このプログラムの名前が aozora2html のため、やや範囲を外れているきらいはあるかもしれません。)

出力されるLaTeX文書ファイルやコマンドラインオプションなどについての、大まかな仕様案は次の通りです:

なお、初期値で --output-format xhtml が使用されるため、従来のコマンドの動作は変化しません。

予想される作業工程は次の通りです:

  1. sample/chukiichiran_kinyurei.{txt,html} を参考に sample/chukiichiran_kinyurei.tex を編集して作成
  2. sample/chukiichiran_kinyurei.txt--output-format latex 指定で変換した結果が sample/chukiichiran_kinyurei.tex と等しくなるようなテストを追加 ...a
  3. 各種ユニットテストを追加 ...b
  4. a, b のテストが通るように実装を行う
takahashim commented 2 years ago

LaTeX出力はいぜん雑なもの(真面目に構文解析しないもの)を作ったことがあるのですが、ちゃんとやるのであれば構文解析器からいったんAST(抽象構文木)を構築するようにして、それを元にHTMLやLaTeXを生成するしくみにするべきかと思っています。 その場合、現在のaozora2htmlはASTを作らずに直接出力する方法なので、そこから改造するか、別実装にするかになります。

課題としてはASTの作り方を考える必要があります。とりわけ青空文庫記法はルビのを省略した場合のルビ記法の扱いがちょっと難しそうでした。

gemmaro commented 2 years ago

おっしゃる通り、もし複数のフォーマットへの変換を用意するのであれば、一度ASTに変換されているとよいと思います。

その場合、現在のaozora2htmlはASTを作らずに直接出力する方法なので、そこから改造するか、別実装にするかになります。

まだaozora2htmlの実装を読み込めていないこともあって、どちらの方法を採るべきかについては考え中です。前者としてaozora2htmlを変更すると実装の見通しが良くなりそうですが、一方で全体のDOMを構築しない方式(現状?)にもメリットはありそうです。

なお、後者としては以下の条件を満たすRustで別実装を作ろうとしていました。(最近は着手できていませんが……。)

takahashim commented 2 years ago

おおおー、それは素晴らしいですね!!>Rustで別実装 であればきっとASTを作ったほうがいいかと思います。

Shift_JISの読み込みが行えるのは要件としてほぼ必須かと思いますが、Rustなら普通にencoding_rsとかの変換器を使って内部ではUTF-8で扱うのでいいかと思います(aozora2htmlでもそうしたいですね…)。

なお、構文解析器としてはPEG.jsによる試験的なサンプルが https://github.com/aozorahack/aozora-parser.js/blob/master/aozora-parser.pegjs にあります(もうご存知かもしれませんが)。いろいろ足りてなさそうですが、参考にはなるかと思います。