LaTeX で日本語を均等割り付けする方法


LaTeX で日本語を均等割り付けするマクロを作製しました。

\kintou{x}{文字列} で文字列をx字に均等割り付けします。
\kintouwidth{dim}{文字列} が実際に長さdimに文字列を均等割付し、
\kintou は内部で \kintouwidth{x\zw}{文字列} を呼ぶだけです。

LuaLaTeX 用に作ったので、それ以外のエンジンを用いる場合は \zw の代わりにzwを用いてください。
英文字も文字ごとに均等割り付けしたい場合は
\kintou{5}{A B C D}のように1文字ごとに半角スペースを入れてください。

\documentclass[b5paper,10pt]{ltjsarticle}

\usepackage{calc}
\usepackage{ifthen}
\usepackage{graphicx}

\makeatletter
\newlength{\wtarget}
\newlength{\wactual}
\newcommand*{\kintou}[2]{\kintouwidth{#1\zw}{#2}}
\newcommand*{\kintouwidth}[2]{%
    \setlength{\wtarget}{#1}%
    \settowidth{\wactual}{#2}%
    \ifthenelse{\lengthtest{\wtarget < \wactual}}{%
        \setlength{\wtarget}{1pt * \real{\strip@pt\wtarget} / \real{\strip@pt\wactual}}%
        \scalebox{\strip@pt\wtarget}[1]{#2}%
    }{%
        \makebox[\wtarget][s]{#2}%
    }%
}
\makeatother

\begin{document}

\begin{tabular}{ll}
\makebox[5\zw][s]{\textleftarrow\ 5字 \textrightarrow}
& \makebox[2cm][s]{\textleftarrow\ 2cm \textrightarrow}\\
\kintou{5}{寿限無寿限無五劫の擦り切れ} & \kintouwidth{2cm}{寿限無寿限無五劫の擦り切れ}\\
\kintou{5}{寿限無寿限無五劫} & \kintouwidth{2cm}{寿限無寿限無五劫}\\
\kintou{5}{寿限無寿限} & \kintouwidth{2cm}{寿限無寿限}\\
\kintou{5}{寿限無} & \kintouwidth{2cm}{寿限無}\\
\kintou{5}{寿限} & \kintouwidth{2cm}{寿限}\\
\end{tabular}

\end{document}

パッケージにしたもの。

kinto.sty
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{kintou}[2020/07/27 Kintou waritsuke Package]

\RequirePackage{calc}
\RequirePackage{ifthen}
\RequirePackage{graphicx}

\makeatletter
\newlength{\wtarget}
\newlength{\wactual}
\newcommand*{\kintou}[2]{%
    \ifthenelse{\isundefined{\zw}}{\kintouwidth{#1zw}{#2}}{\kintouwidth{#1\zw}{#2}}%
}
\newcommand*{\kintouwidth}[2]{%
    \setlength{\wtarget}{#1}%
    \settowidth{\wactual}{#2}%
    \ifthenelse{\lengthtest{\wtarget < \wactual}}{%
        \setlength{\wtarget}{1pt * \real{\strip@pt\wtarget} / \real{\strip@pt\wactual}}%
        \scalebox{\strip@pt\wtarget}[1]{#2}%
    }{%
        \makebox[\wtarget][s]{#2}%
    }%
}
\makeatother

\endinput