✒️

newunicodecharパッケージで句読点を置換すると改行時にインデントが狂う

2024/10/20に公開

はじめに

スクラップに書くにはちょっと沼が深そうだったので、分けて記事にしました。
本記事の内容をざっくり説明すると

  1. newunicodecharパッケージで句読点を置換すると、コンパイル後の文書でちょっと無視できないレベルの不具合が起きた
  2. 句読点の置換はlatexmkrcで設定すれば万事よし
  3. 今回の不具合の原因は何だろう

という感じです。LaTeXマスターからのご連絡お待ちしております。

環境

  • Overleaf(2024年10月20日時点)
  • LuaLaTeX

背景と目的

句読点の置換

LaTeXでアカデミックな文書を作成するとき、句読点の処理をどうするかという問題があると思います。PC側で「,」「.」と設定してしまえば手っ取り早いですが、すると今度は普段の文章が何だか硬くなってしまうので、texファイルのコンパイル時に「、」「。」を「,」「.」に置換できると嬉しいですね。

newunicodechar

LuaLaTeXに限ってはnewunicodecharというパッケージが用意されていて、

\usepackage{newunicodechar}
\newunicodechar{}{}
\newunicodechar{}{}

とすると望みどおりに置換してくれます。
参考↓

https://qiita.com/migawariw/items/928227fb5f7611ec3baa

問題

ところが、実際にこのパッケージを使ってみると困ったことになりました。

ltjsシリーズ

例として以下のtexファイルをコンパイルしてみます。

main.tex
\documentclass{ltjsarticle}

\usepackage{newunicodechar}
\newunicodechar{}{}
\newunicodechar{}{}

\begin{document}

こんにちは、こんばんは。

こんにちは、
こんばんは。

\end{document}

ltjsarticle
コンパイル結果

上段と下段で、本来はぴったり揃うはずなのにずれてしまいました。これはテキスト的には同一の内容なのに、下段だけ字詰めがされているという状況です。

jlreq

上のtexファイルでドキュメントクラスをjlreqにしてみると、また違った結果になります。

main.tex
\documentclass{jlreq}
% 以下同文

jlreq
コンパイル結果

さっきとは上段と下段が入れ替わったかのようです。これは、下段の方にだけ「こんばんは」の前に半角スペースが挿入されているという状況です。言わば、改行が欧文のように扱われています。

解決

原因は一先ず置いておくとして、今のところ上手くいっている方法を紹介します。
texファイルの方では何もしません。

main.tex
\documentclass{ltjsarticle} % jlreqでもOK

\begin{document}

こんにちは、こんばんは。

こんにちは、
こんばんは。

\end{document}

Overleaf上のルートディレクトリにlatexmkrcなるファイルを新規作成します。拡張子は要りません。

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などにも応用できます。

https://qiita.com/yudai-nkt/items/900a5f1c87689e033ff3

これでコンパイルすると…

verified

きちんと揃いました。もう画像は貼りませんが、jlreqでもきちんと揃います。

やったー!と思いつつも、結局LuaLaTeX本来の「latexmkrcが要らない」という長所がそっくり潰れてしまい、本末転倒な気分です。

原因

調査中です。まとまったら追記します。
なお永遠に「調査中」となる可能性が高いです。
今のところ怪しいのは下記ドキュメント(めちゃくちゃ新しい!?)の15章。

https://mirrors.ibiblio.org/CTAN/macros/luatex/generic/luatexja/doc/luatexja-ja.pdf

おわりに

LuaLaTeXユーザーがどのくらいいるのか分かりませんが、誰かしらの一助となれば幸いです。LaTeXマスターからのご連絡お待ちしております。

GitHubで編集を提案

Discussion