LuaLaTex-jaの\ltjgetparameterについて

LuaLaTex-jaの\ltjgetparameterについて

- ebal の投稿
返信数: 2
LuaTeX-jaで行あたりの文字数とページあたりの行数を指定するためにマクロを作成して対応しようとしています.調べたところpTeX用らしきマクロが出てきたのでそれを移植しようとしています.

\makeatletter
\def\mojiparline#1{
\newcounter{mpl}
\setcounter{mpl}{#1}
\@tempdima=\linewidth
\advance\@tempdima by-\value{mpl}\zw
\addtocounter{mpl}{-1}
\divide\@tempdima by \value{mpl}
\newdimen\@tempkskip
\@tempkskip=\ltjgetparameter{kanjiskip}
\advance\@tempkskip by \@tempdima
\ltjsetparameter{kanjiskip=\@tempkskip}
\advance\parindent by\@tempdima
}
\makeatother
\def\linesparpage#1{
\baselineskip=\textheight
\divide\baselineskip by #1
}

をヘッダに追加してdocument環境内で

\mojiparline{XX}
\linesparpage{YY}

と指定すれば使えそうだというところまでは来ました.
ただ,\mojiparline{XX} を指定した時にマクロ内の\@tempkskip=\ltjgetparameter{kanjiskip} によって現在の数値が"plus 0.92476pt minus 0.0924pt" このように表示されてしまいます.
これを表示させない方法,あるいはマクロの間違いを指摘していただきたいです.

説明のために抜き出したのが上ですが,動作するファイルを添付します.

追記:
私の環境を明記します.
- OS : Arch Linux
- TeX : TeXLive 2020.55416-1
- LuaLaTeX : This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/Arch Linux)
ebal への返信

Re: LuaLaTex-jaの\ltjgetparameterについて

- 北川 弘典 の投稿
\@tempkskip は \newdimen で定義されているので長さだけを格納する「dimen レジスタ」ですが,
LuaTeX-ja の \ltjgetparameter{kanjiskip} は自然長の他に伸び量・縮み量を持った「skip」の値を文字列化したものを返します.この場合では,
  \ltjgetparameter{kanjiskip}→"0.0pt plus 0.92476pt minus 0.0924pt"
です.
長さを表す文字列としては "0.0pt" で完結しているので,それより後ろが代入で使われずに残ってしまうわけです.

\@tempkskip を skip を格納する「skip レジスタ」として定義しなおせば解決すると思います.「\newdimen\@tempkskip」を「\newskip\@tempkskip」に置き換えるとどうでしょうか?

----
なお,pTeX の \kanjiskip も skip を格納しますが,
  \newdimen\@tempkskip
  \@tempkskip=\kanjiskip
での \@tempkskip の内容は \kanjiskip の自然長となります.そのため,この状態で
  \kanjiskip=\@tempkskip
とすると,もともとの \kanjikskip の伸び量・縮み量の情報が失われてしまいます.
北川 弘典 への返信

Re: LuaLaTex-jaの\ltjgetparameterについて

- ebal の投稿
ありがとうございます.
newdimen -> newskip の変更で解決しました.
LaTeXのレジスタ種類に対する知識がなく手を出すものではなかったようですね……

何故か\mojiparline{40} にすると41文字になってしまい \mojiparline{39}にする必要がありましたがおおよそ意図通りの動作ををしてくれるようになりました.