Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LaTeX出力 #46

Open
gemmaro opened this issue Oct 17, 2021 · 3 comments
Open

LaTeX出力 #46

gemmaro opened this issue Oct 17, 2021 · 3 comments

Comments

@gemmaro
Copy link
Contributor

gemmaro commented Oct 17, 2021

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

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

  • 出力されるLaTeX文書ファイル
    • 文字コード:UTF-8
    • LaTeX処理系:LuaLaTeX(ないしupLaTeX)
    • 文書クラス: jlreq
      • 文書クラスのオプション
        • tate
        • book
  • コマンドラインオプション
    • --output-format FORMAT を追加
      • FORMAT には xhtml (初期値)、 latex を指定することができる
    • --use-jisx0213, --use-unicode--output-format 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
Copy link
Contributor

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

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

@gemmaro
Copy link
Contributor Author

gemmaro commented Dec 12, 2021

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

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

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

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

  • Shift_JISが扱える
  • 代数的データ型によりASTを型付けできる
  • (もしかするとaozora2html (Ruby) にもFFIで流用できる)

@takahashim
Copy link
Contributor

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants