数式の各上下スペースを『大学への数学』風にする

数式の各上下スペースを『大学への数学』風にする

- 北川 直樹 の投稿
返信数: 5

お世話になります。北川です。

最近、別行立て数式の前後について考えており、参考書のように調整したいと思いました。『大学への数学』(東京書籍)をみると、数式の上下のスペースは、通常のテキストの行間と等しいことが分かりました。ここで、「行間」とは\baselineskipのことではなく、ある行とその次の行に和文字の隙間(\baselineskip-1\zhに相当?)のことです。

また、alignの上下やalign中の各数式の上下のスペースも同様でした。

テキスト中の数式に分数やインテグラルを用いた場合は、「行間」が挿入されていることが分かりました。

そこで、各パラメータを次のように設定しました。

\setlength{\lineskip}{\baselineskip-1\zw}
\setlength{\lineskiplimit}{3pt}
\AtBeginDocument{
  \abovedisplayskip=0\abovedisplayskip
  \abovedisplayshortskip=0\abovedisplayshortskip
  \belowdisplayskip=0\belowdisplayskip
  \belowdisplayshortskip=0\belowdisplayshortskip
  \setlength{\jot}{0pt}
}
これは、別行立ての数式の上下を0ptにして、ほぼ強制的にlineskipを入れることを意図したものです。
 
しかし、alignの前後及び各数式の上下のスペースは想定よりも大きくなりました。
 
そこで、先の目的を達成するためには、どのように各パラメータを調整すればよいか、ご教授いただければ幸いです。
 
LuaLaTeX + jlreqで組んでいます。
 
よろしくお願いいたします。
北川 直樹 への返信

Re: 数式の各上下スペースを『大学への数学』風にする

- ut の投稿
# 飽くまでご参考までですが…。

私は LuaTeX を使ったこともありませんし、数式に無縁の私立文系で、
「大学への数学」というものも、アマゾンで東京出版の雑誌の「サン
プルを読む」の部分をチラッと覗いてみただけですので、以下では
まったく的外れなことをしている可能性が大です(すいません)。

※「大学への数学」が雑誌なのか、単行本なのか、東京書籍なのか、
  東京出版なのか、門外漢の私にはどれか分かりませんでした…。

\...display...skip の類いは、\AtBeginDocument で設定しても、
フォントサイズを変更するとそのサイズによる設定になるっぽいので、
設定をするなら \normalsize や \small などを再定義してその中で
再設定したほうがいいのかも知れません。
(下の setspace.sty では \everydisplay に仕込んでいるようです)

【参考】from: jsize10.clo

  \renewcommand{\normalsize}{%
     \@setfontsize\normalsize\@xpt{15}%
   \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
   \abovedisplayshortskip \z@ \@plus3\p@
   \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
     \belowdisplayskip \abovedisplayskip
     \let\@listi\@listI}

  \DeclareRobustCommand{\small}{%
   \@setfontsize\small\@ixpt{11}%
   \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
   \abovedisplayshortskip \z@ \@plus2\p@
   \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
   \def\@listi{\leftmargin\leftmargini
               \topsep 4\p@ \@plus2\p@ \@minus2\p@
               \parsep 2\p@ \@plus\p@ \@minus\p@
               \itemsep \parsep}%
   \belowdisplayskip \abovedisplayskip}

setspace パッケージを使うとどうなるのかを、少しだけ試してみま
した(platex です)。何かしら参考になるでしょうか。

※ 例文が創世記なのは、TLC 3rd のマネをしてみただけで、他意は
  ありません。

\documentclass{jarticle}
\usepackage{amsmath}
\usepackage{setspace}

\newcommand{\dummydisplay}{%
  \stepcounter{enumi}%
  \<(\theenumi)
  元始に神天地を創造たまへり 地は定形なく曠空くして黒暗淵の面にあり 
  神の靈水の面を覆たりき 神光あれと言たまひければ光ありき
  \begin{align}
    (a + b)^3  &= (a + b) (a + b)^2        \\
              &= (a + b)(a^2 + 2ab + b^2) \\
              &= a^3 + 3a^2b + 3ab^2 + b^3
  \end{align}
  元始に神天地を創造たまへり 地は定形なく曠空くして黒暗淵の面にあり 
  神の靈水の面を覆たりき 神光あれと言たまひければ光ありき\par
}
% cf. TLC 3rd: 3-1-13.ltx, 3-1-14.ltx; 11-2-12.ltx
% In the beginning God created the heaven
% and the earth. Now the earth was unformed
% and void, and darkness was upon the face
% of the deep; and the spirit of God
% hovered over the face of the waters.

\begin{document}

%(1)
\dummydisplay

\vspace{\stretch{1}}

%(2)
{\setstretch{0.5}
\dummydisplay}

\vspace{\stretch{1}}

%(3)
\begin{spacing}{1}
\setdisplayskipstretch{0.3}
\dummydisplay
\end{spacing}

\vspace{\stretch{1}}

%(4)
\begin{spacing}{1}
\setdisplayskipstretch{0}
\dummydisplay
\end{spacing}

\vspace{\stretch{7}}

\end{document}

添付 3966.jpg
ut への返信

Re: 数式の各上下スペースを『大学への数学』風にする

- ut の投稿
蛇足です。

setspace パッケージを使って別行立て数式前後のアキを調整するなら、
  \setdisplayskipstretch
にだけ言及すればよかったかも知れません。

\setstretch{0.5} や \begin{spacing}{1}~\end{spacing} は、私が
ちょっと試してみたかったというだけで、余計なデモです。
(わざわざお断りするまでもないとは思いますけれど、念のため)

北川 直樹 への返信

Re: 数式の各上下スペースを『大学への数学』風にする

- 本田 知亮 の投稿
紙面を見る限りMCB2で組んでいるんじゃないでしょうか.
イタリック小文字kなんかがB2の数式に見えます
(\sumが特徴的なんですが\sumがない!).
昔は写研で組まれていましたけども,
和文はちょっと平体っぽく見える書体・・・何だろう.

閑話休題.
最終的に $$ ・・・ $$ が出てくる別行式になる限り
グルーでアキが変わってくるのは避けられません.
パラメータだけでどうこうはできません.
行間のアキにしたかったら普通の行の処理をしつつ
見た目だけ別行式のようにする工夫が必要だと思います.
eqnarrayとかは内部的には \halign を使っているので
その部分だけ使って $$ は使わないといった細工をしたものを添付します.
厳密には自動化は無理なような気もしますが
サンプルがてらということで.




本田 知亮 への返信

Re: 数式の各上下スペースを『大学への数学』風にする

- 本田 知亮 の投稿

最終的に
$$ ・・・ $$$
が出てくる・・・

$$が認識されてます.フォーマットの選択がまずかったです
北川 直樹 への返信

Re: 数式の各上下スペースを『大学への数学』風にする

- 北見 けん の投稿
jlreqでの設定については詳しくないので何も言えませんが、
TeXにおける寸法レジスタの設定方法についてです。

まず、
\setlength{\lineskip}{\baselineskip-1\zw}
という記述ですが、これはおそらく、\lineskip の寸法値を、\beselineskip から 1\zw を減じた値に設定したいということかと思います。
しかしこのように記述してしまうと意図とは異なり、\lineskip に \baselineskip の寸法値が代入された後、組版している文書内に「-1」が印字されるようなことになるかと思います。また、寸法単位としては \zw ではなくて単なる「zw」が正しいです。\zw というコントロールシークエンスは定義されていなかったと思いましたが、jlreq では寸法レジスタとして定義されていたりするのでしょうか?
意図通りにするなら、LaTeXでは次のように書くことになると思います。
\setlength{\lineskip}{\baselineskip}
\addtolength{\lineskip}{-1zw}
TeX なら、
\lineskip=\baselineskip
\advance\lineskip by -1zw
となります。(しかしながら、高さ方向の寸法単位としては、zw よりも zh のほうが妥当かも)

もう一つ、
\abovedisplayskip=0\abovedisplayskip
などの記述ですが、あえてそれまでの寸法値の「0倍」と記述しなくても、0にするなら
\abovedisplayskip=0pt
とするのが一般的かと思います。

で、常に行間を \lineskip の値にしたい場合は、4つのdisplayskip を0ptにした上で、
\lineskiplimit=\maxdimen
とするのが良く使われる方法だと思います。こうすると、自然に組んだ場合の行間がほぼ必ず \lineskiplimit よりも狭くなってしまうので \lineskip が使われるようになるからです。

以上です。あまりお役に立てずにすみません。