okumacroがあるとxalignat上部のアキが大きくなる

okumacroがあるとxalignat上部のアキが大きくなる

- 結城 浩 の投稿
返信数: 9
okumacroが有るとxalignat上部のアキが大きくなる現象がTeX Live 2020で起きているように見えます。


TeX Live 2020にバージョンアップしてから起きているように思えますが、記憶違いかもしれません。


okumacroとしては、
/usr/local/texlive/2020/texmf-dist/tex/platex/jsclasses/okumacro.sty
を使っているようで、これは、以下のリンク先にあるものに一致しているようです。diffをとりましたが違いがありません。
https://github.com/texjporg/jsclasses/blob/master/okumacro.sty

この現象がこういうものなのか、それとも不具合なのかもよくわかっていないのですが、情報をいただければありがたいです。

ソースコードは上のリンクからもたどれますが、以下にも貼り付けておきます。

\documentclass[a5paper,10pt]{article}
\usepackage{amsmath,amssymb}
% \usepackage{okumacro}
\begin{document}

\noindent\rule{\textwidth}{1pt}

\begin{xalignat*}{2}
x^2 + y^2 &= r^2 \\
x^2 + y^2 &= r^2
\end{xalignat*}

\noindent\rule{\textwidth}{1pt}

\noindent\rule{\textwidth}{1pt}

$$
x^2 + y^2 = r^2
$$

\noindent\rule{\textwidth}{1pt}

\end{document}

結城 浩 への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- 和田 勇 の投稿
okumacro の一番最後のところで widebaselines に関する動作の影響の様です。

widebaselines は bxj ltj js で始まるクラスなどでは標準で定義されるてるの、article などで okumacro 使った場合の対処の様です。
okumacro の方針がわからないので、具体的な対処はわかりませんが、widebaselines を利用しているクラスに書き換えるかダミーの
\def\widebaselines{} で誤魔かすくらいしか思いつきません。
和田 勇 への返信

\vspace{-4pt}を行って回避できるようです

- 結城 浩 の投稿
okumacro.styの最後の部分を読んでみると、

\@ifundefined{widebaselines}{}{%
\let\endmathdisplaysave=\endmathdisplay
\def\endmathdisplay{\widebaselines\endmathdisplaysave}}
\let\start@alignsave=\start@align
\def\start@align{\vspace{4pt}\start@alignsave}

となっていたので、無理矢理\vspace{-4pt}で戻してみました。具体的にはマクロはそのままでドキュメント側で以下のようにしました。

\makeatletter
\let\start@alignsavePATCH=\start@align
\def\start@align{\vspace{-4pt}\start@alignsavePATCH}
\makeatother

この結果、xalignat環境に関してはアキが戻ったように観察できました。他の箇所に悪影響が出ていないかどうかまではわかりません。

回避策があるだけでも作業的には進むのでたいへんありがたいです。情報ありがとうございます。


和田 勇 への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- Z. R. の投稿
okumacro の一番最後のところ
\@ifundefined{widebaselines}{}{%
  \let\endmathdisplaysave=\endmathdisplay
  \def\endmathdisplay{\widebaselines\endmathdisplaysave}}
  \let\start@alignsave=\start@align
  \def\start@align{\vspace{4pt}\start@alignsave}

インデントの置き方から推測すると、意図していたのは

\@ifundefined{widebaselines}{}{%
  \let\endmathdisplaysave=\endmathdisplay
  \def\endmathdisplay{\widebaselines\endmathdisplaysave}%←ここではなく
  %↓この下の2行もjsclassesでないと実行されない
  \let\start@alignsave=\start@align
  \def\start@align{\vspace{4pt}\start@alignsave}}%←ここで閉じるべき

であり、括弧の位置を書き間違えているのだと思います。

Z. R. への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- Z. R. の投稿

あれれ、jsarticleクラスを使った場合でも「最後の2行はない方がパランスがよい」ようですね。(TeX Live 2013まで戻しても同じ結果。)

Z. R. への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- 奥村 晴彦 の投稿
すみませんご迷惑をおかけしています。
出張中でいまちゃんと確認できていないのですが,もし私のミスが原因でしたら適当にお直しいただければ助かります。
奥村 晴彦 への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- 奥村 晴彦 の投稿
仕事場に戻りました。

okumacroの最後の部分,2003年に「とりあえず」入れたみたいですが,ご指摘のように括弧の位置がおかしいし,そもそもjs*の修正をなぜokumacroに入れたのか。何かの実験で入れてみたんでしょうね。この5行はないほうが自然ですね。

もうtexjportの管理下にあるファイルですから,どのように直していただいてもかまいません。

もうルビをはじめ,より良いパッケージがたくさん出ているので,役割を終えた気がします。
奥村 晴彦 への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- 結城 浩 の投稿
奥村先生ありがとうございます。

位置付けというか重み付けがわかりましたので助かります。

% \@ifundefined{widebaselines}{}{%
% \let\endmathdisplaysave=\endmathdisplay
% \def\endmathdisplay{\widebaselines\endmathdisplaysave}}
% \let\start@alignsave=\start@align
% \def\start@align{\vspace{4pt}\start@alignsave}


結城 浩 への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- Z. R. の投稿

とりあえず、TeX Live 2014で試してみましたが、TeX Live 2020と全く同じ結果になりました。

Z. R. への返信

Re: okumacroがあるとxalignat上部のアキが大きくなる

- aminophen の投稿
> ご指摘のように括弧の位置がおかしいし,
> そもそもjs*の修正をなぜokumacroに入れたのか。
> 何かの実験で入れてみたんでしょうね。
> この5行はないほうが自然ですね。

奥村先生からこのコメントを頂いていたので,
2021-07-01 版で削除しました。
https://github.com/texjporg/jsclasses/issues/74