今からものすごくわけのわからないことを書きます。
うまく説明できないかもしれない現象。
というよりも、普通に画像を見せればいいか。




英文字は、文字ごとに幅が違います。
日本語も、フォントによるけど、文字ごとに幅が違います。
この、幅の違いをうまく吸収して、同じ幅に収まるようにしたいのですが、
やり方がわかりません。
そして、この「特定の幅に文字を納める技術」の名前も、わかりません。
英語では「Text wrapping」とか、「Word wrapping」とか、名前があるようですが。
WordやLibreOfficeで、けっこう当たり前のようにやっている、幅に文字を納める技術、
実に難しいことだし、多くの場合企業秘密(?)なのか、情報も少ないです。
ただ単に、出来合いの技術として提供しているところが多いというだけ。
・・・ぐぐったら「均等割り付け」という名前みたいです。

校正記号:均等割り付け(文字間隔の調整)(Tokyo校正視点)
https://kousei.club/校正記号:均等割り付けの使い方/

さてと、何も方法が見つからないので、等幅フォントを使って、
全角文字と半角文字を見分けるスクリプトを見つけたので、
それで、全角の評価を2点、半角の評価を1点にして、
合計で80点になったら40文字として、改行を付け加える。
そんなことを考えたりもしました。

本筋じゃないところで、web版もpython版もひっかかっていたので、
ここは日本の伝統芸能である、
あ・・と・・ま・・わ・・し。
これで行くしかないみたいです。
program text wrapping algorithms でぐぐると、いろいろ出てくるようですが、
早めに決着をつけるため、あとまわし。
というよりも、日本語の等幅フォントを使って、
外国語の名前を使うのなら問題はあるけど、
日本語の名前なら、意外としっくりした見た目にはなるので。
ただ、さっき、このページを眺めていたら、

Word wrap(Rosetta Code)
https://rosettacode.org/wiki/Word_wrap

いろんな言語に対応したアルゴリズムが載っていたので、
きっといけます。
アセンブラでも、Goでも、DelphiでもC++でもRustでもPythonでもJavaScriptでも、
きっといけます。ほとんどの言語に対応しているので。

さっきまで中止にしていたWeb版の、インボイス対応領収書・請求書・納品書作り機、
引っかかっていたところは後回しにすることにより、とりあえずの解決ということにして、
開発を再開します。けっこういいところまで作ったので、もったいないので。

2024/1/25 追記
もっとすごいの見つけました。JavaScriptとRustになるけど。

【JS】文字幅を取得する (note yuuyu)
https://note.com/yuuyu_ap/n/n4e7f3692c1a4

Unicode 文字列の幅を計測する(zenn)
https://zenn.dev/rithmety/articles/20220302-unicode-width-ce9e18da11ac9e