newunicodecharパッケージで句読点を置換すると改行時にインデントが狂う
はじめに
スクラップに書くにはちょっと沼が深そうだったので、分けて記事にしました。
本記事の内容をざっくり説明すると
-
newunicodechar
パッケージで句読点を置換すると、コンパイル後の文書でちょっと無視できないレベルの不具合が起きた - 句読点の置換は
latexmkrc
で設定すれば万事よし - 今回の不具合の原因は何だろう
という感じです。LaTeXマスターからのご連絡お待ちしております。
環境
- Overleaf(2024年10月20日時点)
- LuaLaTeX
背景と目的
句読点の置換
LaTeXでアカデミックな文書を作成するとき、句読点の処理をどうするかという問題があると思います。PC側で「,」「.」と設定してしまえば手っ取り早いですが、すると今度は普段の文章が何だか硬くなってしまうので、texファイルのコンパイル時に「、」「。」を「,」「.」に置換できると嬉しいですね。
newunicodechar
LuaLaTeXに限ってはnewunicodechar
というパッケージが用意されていて、
\usepackage{newunicodechar}
\newunicodechar{、}{,}
\newunicodechar{。}{.}
とすると望みどおりに置換してくれます。
参考↓
問題
ところが、実際にこのパッケージを使ってみると困ったことになりました。
ltjsシリーズ
例として以下のtexファイルをコンパイルしてみます。
\documentclass{ltjsarticle}
\usepackage{newunicodechar}
\newunicodechar{、}{,}
\newunicodechar{。}{.}
\begin{document}
こんにちは、こんばんは。
こんにちは、
こんばんは。
\end{document}
コンパイル結果
上段と下段で、本来はぴったり揃うはずなのにずれてしまいました。これはテキスト的には同一の内容なのに、下段だけ字詰めがされているという状況です。
jlreq
上のtexファイルでドキュメントクラスをjlreq
にしてみると、また違った結果になります。
\documentclass{jlreq}
% 以下同文
コンパイル結果
さっきとは上段と下段が入れ替わったかのようです。これは、下段の方にだけ「こんばんは」の前に半角スペースが挿入されているという状況です。言わば、改行が欧文のように扱われています。
解決
原因は一先ず置いておくとして、今のところ上手くいっている方法を紹介します。
texファイルの方では何もしません。
\documentclass{ltjsarticle} % jlreqでもOK
\begin{document}
こんにちは、こんばんは。
こんにちは、
こんばんは。
\end{document}
Overleaf上のルートディレクトリにlatexmkrc
なるファイルを新規作成します。拡張子は要りません。
#!/usr/bin/env perl
$lualatex = "find . -type f -name '*.tex' -print0 | xargs -0 sed -i '' -e 's/、/,/g' -e 's/。/./g'; lualatex -synctex=1 -halt-on-error -interaction=nonstopmode -file-line-error %O %S";
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
$makeindex = 'mendex -U %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 4;
$ENV{TZ} = 'Asia/Tokyo';
最低限でも$lualatex
と$pdf_mode
の項目がきちんと書かれていれば大丈夫です。
この方法は以下の記事の『方法その2』に則っていて、upLaTeXなどにも応用できます。
これでコンパイルすると…
きちんと揃いました。もう画像は貼りませんが、jlreq
でもきちんと揃います。
やったー!と思いつつも、結局LuaLaTeX本来の「latexmkrcが要らない」という長所がそっくり潰れてしまい、本末転倒な気分です。
原因
調査中です。まとまったら追記します。
なお永遠に「調査中」となる可能性が高いです。
今のところ怪しいのは下記ドキュメント(めちゃくちゃ新しい!?)の15章。
おわりに
LuaLaTeXユーザーがどのくらいいるのか分かりませんが、誰かしらの一助となれば幸いです。LaTeXマスターからのご連絡お待ちしております。
Discussion