LaTeXで年賀状の宛名を作った話(2023年1月現在)#texで遊ぼう #ocr_sty

お久しぶりです。題名の通り、\LaTeXを使って年賀状の宛名を作った話です。個人的な備忘録のようなものですし、私は\LaTeX素人ですので、参考になるかは分かりませんが、誰かの助けになれば幸いです。

概要

  • jsarticle.clsなどで一から作るのは骨が折れますので、jletteraddress.clsを使用しました。
  • その上でちょっとアレンジしてみました。

jletteraddress.clsについて

\LaTeXでハガキの宛名が作れるクラスファイルです。日本人が作った日本人の為のクラスファイルなので、調べるといくつか日本人が日本語で書いたブログ記事が出てきます。jletteraddress.clsについての詳細を知りたい方は、そちらを参考にした方が為になると思います(というか書いてあることの半分以上は理解できていないから解説ができない)。ひとまずリンクを貼っておきます。
qiita.com
okini-houkoku.hatenablog.jp

なお、このクラスファイルはTeX Live 2022には収録されていませんので、GitHubからダウンロードする必要があります。
github.com
ダウンロードしたclsファイルは宛名のtexファイルと同じディレクトリ(フォルダ)に移動しておきましょう。そうしないとタイプセット(コンパイル)できません。

対応しているエンジン

このjletteraddress.clsですが、Lua\LaTeXには対応していません。デフォルトではp\LaTeXのみの対応です。up\LaTeX
\documentclass[uplatex]{jletteraddress}
とオプションを記述することで使用できます。
また、ptex2pdfではエラーが出ます。原因はよく分かりませんでした。いかがでしたか?面倒ですが、(u)p\LaTeX+dvipdfmxの二段階で出力しましょう。

図1:jletteraddressのデフォルトでの宛名

図1はjletteraddressのデフォルトでup\LaTeXでタイプセットした宛名です。こんな感じになります。

書体を変更する

さて、ここからアレンジです。料理もできないのにレシピ通りに作らず自己流アレンジを入れるメシマズ野郎のような行為ではありますが、やはり気になって設定を変えたくなる部分があります。そう、書体(フォント)です。
気になる点は二つあります。一つはjletteraddress.clsのデフォルトが明朝体であることです。明朝体ですので、細くぱっと見で読みづらいです。宛名はゴシック体の方がいいと個人的に思います。
そしてもう一つ気になるのが郵便番号の書体です。長くなりそうなので見出しを分けて説明します。

明朝体からゴシック体に変更する

こちらは非常に簡単です。プリアンブル部に
\renewcommand\kanjifamilydefault{\gtdefault}
と記述するだけですべての漢字とかな文字がゴシック体に変更できます。これで見やすい宛名欄になりました。ちなみにこの書体は原ノ味フォントのゴシック体です。

図2:フォントをゴシック体に変更した宛名

郵便番号をOCR-Bに変更する。

見出しの通り郵便番号の書体はOCR-Bに変更します。OCR-BとはOCR光学文字認識、要するに機械的な読み取り)のために開発されたOCRフォントの一種です。免許証やマイナンバーカードに採用されているので、多くの人に馴染みのある書体かと思います。
imagers.co.jp
そして、OCR-Bは日本郵便の郵便番号・バーコードマニュアルにおいて標準の書体の一つでもあります。
郵便番号・バーコードマニュアル バーコードに必要な文字情報の抜き出し法 | 日本郵便株式会社
すなわち、郵便番号がOCR-Bであると、郵便物を宛先ごとに振り分ける郵便区分機に負担をかけづらいということになります。

そもそもの話(蛇足)

郵便区分機は手書きの住所でもOCRが可能というクッソ有能な機械なため、わざわざ人間様が仕様に沿って書体を整える必要はありません。しかし、有能な機械でも出来ないことはあります。もしOCRが出来なかった場合は人の手によって区分され、人的資源を使うことになります。出来るだけそれは避けるべきことです。「人間は機械の奴隷である」という学生時代にお世話になった先生の言葉を思い出します。頭を使えるなら機械に余分な負担はかけるべきではありません。つまり何が言いたいのかというと、こんなことやらなくても年賀状は届きますOCR-Bに変えることはただの自己満足です。

\LaTeXでの実装

OCR-Bを\LaTeXで使うにはocr.styを使用します。しかしこのocr.sty、中々の曲者で、マニュアルは英語のみ(よくある)、マニュアルがわずか9ページ(!?)、日本語話者のブログ無し(!!?)、それどころか英語話者のブログも無し(!?”!?”)という有様でした。マニュアル以外での唯一のヒントが以下のページにありました。
tug.org
こちらのページにある「[LaTeX source of PDF sample]」をクリックしてダウンロードしたtexファイルが大きなヒントでした。試行錯誤の結果、
\begin{document}
の直下に
\normalfont\ocrfamily
を挿入することで、半角数字がすべてOCR-Bに変わりました。
いやー\LaTeXでフォントを変えるってふぉんとう(本当)に大変。

注意

すべての半角英数字がOCR-Bに置換されるので、宛先や差出人の住所に半角英数字を使用していると、こちらもOCR-Bに変わり、少々不格好になってしまいます。そもそもで半角英数字は90°回転しているので、半角英数字のまま住所を入力している人はいないと思いますが、印刷した後に気づくと悲惨です。ここは普段は嫌われ者の全角英数字を使用することで丸く収まります。なお、マンション・アパートなどで英数字の桁数が多い住所の場合はどうにもなりません。諦めましょう。

完成品

図3:郵便番号のフォントをOCR-Bに変更した宛名

図3が完成した宛名です。まだ少々不格好ではありますが、フリーソフトで作ったものなら上出来ではないでしょうか。

課題

LuaLaTeXでタイプセットできるようにしたい

十分理解できていないのですが、(u)p\LaTeXを使い続けるのは長期的に見るとよろしくないようです。
zrbabbler.hatenablog.com
また、Lua\LaTeXは一回のタイプセットでtexからpdfを出力してくれますし、書体の変更も比較的容易です。Lua\LaTeXに対応できるならそれに越したことはありません。
なので、ゆくゆくはLua\LaTeXでタイプセットできるようにjletteraddress.clsを改造してみたいなあ、とぼんやり思っています。(多分やらなそう)

郵便番号が右に偏る

気付いた方がいたら怖いのですが、郵便番号の書体をOCR-Bに変更すると、若干右に寄ってしまいます。差出人の方は許容範囲内ですが、宛先の方は赤枠に被る数字があるため、少々不格好です。これはocr.styもしくは\ocrfamily特有のものです。この書体を使用する際は郵便番号の位置を若干左にずらす方が、より綺麗になるでしょう。でも調整するの面倒だなあ

宛先・差出人ともに名前が中心ではない

マンションやアパート名が住所に入ることを考慮してなのか、宛先・差出人ともに中心から若干ずれて印刷されています。特に差出人が顕著です。差出人の住所がクソ長いならまだしも、例として載せている「沖縄県八重山郡与那国町与那国129」程度ではやはり不格好です。\senderaddressbが空欄の時は若干右にずらす、のような面倒くさい一工夫が必要です。

年賀状を投函したのが1月3日

どうして計画性を持たないのですか?

この記事を投稿したのが1月18日

どうして計画性を持たないのですか?

おわりに

私の頭の中にあるものを鼻糞ほじりながら適当に投影した記事ですから、非常に分かりづらかったかと思います。こんなものがocr.styについて解説した唯一の日本語記事となってしまって申し訳ない限りです。来年こそはLua\LaTeXで宛名を作り、12月25日までに投函したいものです。おしり。