0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ArXivのHTML形式論文をKindleに送る

Posted at

この記事はTSG Advent Calendar 2025 7日目の記事です

論文をPaperwhiteで読みたい

PC以外で論文を読むときにデバイスの選択肢としてスマホとPaperwhiteがあるのですが、スマホは画面が小さすぎるのでPaperwhiteで読めないかなと思っていました。

しかしPaperwhiteはピンチ(拡大縮小)操作の反応が遅く、PDFを直に取り込むとかなり読みづらいです。double columnであれば1カラム分を拡大することでなんとか読めるのですが、single columnだと拡大しながらあちこち動かすことになりとても面倒です。

しばらくPDFをリフロー表示(画面幅に合わせて文字を折り返す)させる方法を調べていたのですが、あるときArXivのHTML形式をそのまま読み込めばいいのではないかと思いつきました

Paperwhiteに送るまでの流れ

次の流れでArXivからPaperwhiteに送ってみます

  1. ArXivにアクセスしHTML版の論文を取得
  2. HTMLを整形してEPUB形式にする
  3. Send to KindleでEPUBをPaperwhiteに送信

このうち1と2を自動化し、こんな感じのウェブサイトを作りました
image.png
実装:https://github.com/Yosshi999/arxiv_html_to_epub/

単一のHTMLとJSからなるシンプルなもので、次のような処理を行っています

  1. 入力されたURLからarXiv IDをパース
  2. HTML版の論文ページ https://arxiv.org/html/${id}/ をfetch
  3. 目次のサイドバーは取り除きたいので、論文本体の.ltx_page_contentクラスを取得する
  4. 論文内の画像をローカルからの読み込みに書き換えるために、論文内のimgタグを解析し画像をダウンロード
  5. もろもろの不必要なタグ(reportボタンなど)を削除
  6. 数式のMathMLを画像に書き換えローカル保存
  7. EPUBに整形し、JSZipで固める

これを実装するにあたってはまったポイントを紹介します。

MathML数式が表示されない

MathMLは数式をXML形式で表すための形式で、arXivが元のtexからMathMLに置き換えてHTML版に埋めなおしています。EPUBはMathMLに対応しており、どうもkindleもMathMLに対応しているはずなのですが、なぜかPaperwhiteに送ると数式が表示されませんでした。
そのためMathMLは諦めて、MathJaxを使ってSVGに変換し、さらにそれをcanvas経由でpngに変換しました。

表示が崩れる

これはいまだに解決していません。arXivがHTML化した時点で崩れているのはしょうがないとして、こちらで処理したときに微妙に見栄えが悪くなってしまっています。

スクリーンショット 2025-10-19 182001.png
↑なんか数式が上にずれることがある (元論文

当初はarXivが読んでいるCSSを一緒につけていたのですが、なぜか読み込みがおかしくなってしまい、Kindle Previewerも不明なエラーを返してしまうため、アレコレ試した結果あきらめています。

さらに、しばしば数式の一部が消えてしまっています。どうもMathJaxがSVGを吐く時点で消えているようなのですが、直し方が良く分かっていません。

image.png

まとめ

今回はarXivのHTML版を読み込んでPaperwhiteに送る方法を紹介しました。ただ現在の実装では表示が崩れておりデバッグに苦戦しています。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?