はじめに
キミと一緒に歩いてきた♪ アイ NEED YOUよすぎる😭 nikkieです
目次
SphinxでビルドしたPDFに「⋯」が表示されない
なんの気なしに「⋯」をSphinxで使いました。
吾輩は猫である。 名前はまだ無い⋯⋯
いつものように sphinxdoc/sphinx-latexpdf イメージでPDFをビルドします
% docker run --rm -v $PWD:/docs sphinxdoc/sphinx-latexpdf:8.1.3 sphinx-build -M latexpdf source build
ところが、ビルドされたPDFに「⋯」がないんです!
ビルド中にwarningが表示されていました。
dvipdfmx:warning: No character mapping available. CMap name: UniJIS-UTF16-H input str: <22ef>
22efは「⋯」の文字コードの16進表現ですね。
(Python 3.12.8で確認)
>>> import unicodedata >>> unicodedata.name("⋯") 'MIDLINE HORIZONTAL ELLIPSIS' >>> ord("⋯") 8943 >>> hex(ord("⋯")) '0x22ef'
再現するリポジトリを用意しました
latex_engine
の指定で回避
https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-latex_engine
language
が"ja"
のとき、"uplatex"
です2-l ja
を指定してsphinx-quickstart
しました
- これを
"platex"
に指定することで、22efは紙面に出るようになりました uplatex
もplatex
も sphinxdoc/sphinx-latexpdf イメージで使えます
latex_engine = "platex"
原因切り分け過程
以前platex
でTeXファイルをビルドしたことがあったので、そこに立ち戻りました
\documentclass[dvipdfmx]{jsarticle} \begin{document} 吾輩は猫である。 名前はまだ無い⋯⋯ \end{document}
% docker run --rm -it -v $PWD:/docs sphinxdoc/sphinx-latexpdf:8.1.3 bash root@34853085f945:/docs# platex ex1 root@34853085f945:/docs# dvipdfmx ex1
できあがるex1.pdf
には「⋯」が表示されます!
platex
で知っていた別のドキュメントクラスjsbook
でも「⋯」が表示されました。
これをuplatex
向けにドキュメントクラスujbook
に変更します
-\documentclass[dvipdfmx]{jsarticle} +\documentclass[dvipdfmx]{ujbook} \begin{document} 吾輩は猫である。 名前はまだ無い⋯⋯ \end{document}
root@34853085f945:/docs# uplatex ex1 root@34853085f945:/docs# dvipdfmx ex1 ex1.dvi -> ex1.pdf [1 dvipdfmx:warning: No character mapping available. CMap name: UniJIS-UTF16-H input str: <22ef> dvipdfmx:warning: No character mapping available. CMap name: UniJIS-UTF16-H input str: <22ef> ] 1981 bytes written
再現しました!
uplatex
でドキュメントクラスujbook
のときに、ビルドされるPDFに「⋯」が表示されないという事象です。
SphinxがビルドするTeXファイルを見ると(build/latex
以下)
%% Generated by Sphinx. \def\sphinxdocclass{ujbook} \documentclass[letterpaper,10pt,dvipdfmx]{sphinxmanual}
ドキュメントクラスujbook
の事象が当てはまっているのかなあと考えています。
latex_engine = "platex"
と指定すると、ujbook
がjsbook
に変わっていました。
%% Generated by Sphinx. \def\sphinxdocclass{jsbook} \documentclass[letterpaper,10pt,dvipdfmx]{sphinxmanual}
終わりに
SphinxでビルドしたPDFに「⋯」が表示されない事象に直面し、回避手段を見つけました。
ただTeXが私にとって未知すぎるので、分かっていないことが多いです
- ドキュメントクラスとは?
- 同じ「⋯」なのにplatexで問題にならなくてuplatexで問題になるってどういうこと?
- uplatexだけで解決する手段はある?
Sphinxはlanguage
が"ja"
のとき、デフォルトでuplatex
を使っているというのは今回の学びです。
-
DAY2 ス17-bでお待ちしています
↩#アイマスエキスポ 同人誌ということでブログよりも振り切って、特大の怪文書を制作しているぜ、Yay!
— nikkie / にっきー (@ftnext) 2024年12月8日
DAY2 ス17-b Everlasting Diaryです。
ミリシタコミュ『野辺見れば』の怪文書を鋭意制作中です https://t.co/9izNjbARQz -
ドキュメントのここ(
language
が"ja"
のとき、platex/dvipdfmxのパイプライン)とは矛盾してるかも https://www.sphinx-doc.org/ja/master/man/sphinx-build.html#cmdoption-sphinx-build-M↩