newenvironmentの空白について

newenvironmentの空白について

- Fuwa Roco の投稿
返信数: 6
お世話になっております。
\newenvironmentを利用してequation環境を以下のコマンドで簡略化を試みたところ、出力結果の方程式の下に空白ができてしまいます。

コマンド
------------------------------
\newenvironment{eq}{\begin{equation}}{\end{equation}}
\begin{eq}
{F = ma.} \label{equation of motion}
\end{eq}
------------------------------

もとのequation環境を保ったまま簡略化(「eq」)したいのですが、空白は必ず入ってしまうのでしょうか?
方法がありましたら、ご教授お願い致します。

宜しくお願い致します。
Fuwa Roco への返信

Re: newenvironmentの空白について

- 飯島 徹 の投稿
次のようなソースでは equation 環境でも eq 環境でも同じ高さになるようですが
eq 環境だけではなく「出力結果が異なる具体的な equation 環境と eq 環境が含まれコンパイルできる完全なソース」を提示してもらえると早く解決できると思います.

%#!ptex2pdf -l -u 2018030802
\documentclass[uplatex]{jsarticle}
\newenvironment{eq}{\begin{equation}}{\end{equation}}
\begin{document}
\setbox0=\vbox{%
ほげほげほげ
\begin{eq}
{F = ma.} \label{equation of motion}
\end{eq}
ふがふがふが}
\the\ht0

\setbox0=\vbox{%
ほげほげほげ
\begin{equation}
{F = ma.} \label{equation of motion 1}
\end{equation}
ふがふがふが}
\the\ht0
\end{document}
飯島 徹 への返信

Re: newenvironmentの空白について

- Fuwa Roco の投稿
飯島 徹 様

早速のご確認ありがとうございます。
切り分けを少し行ったところ、\end{eq}と\end{equation}の下に空行を入れると発生することが分かりましたが、解決法はまだ分かりません。
ソースを以下に記します。

------------------------------
\documentclass[12pt, report]{jsbook}
\newenvironment{eq}{\begin{equation}}{\end{equation}}

\begin{document}

\begin{eq}
{F = ma.} \label{equation of motion}
\end{eq}

\noindent
ああああああああああああああああああああああああああああああああああああ

\begin{equation}
{F = ma.} \label{equation of motion 1}
\end{equation}

\noindent
ああああああああああああああああああああああああああああああああああああ

\end{document}

\end{document}
------------------------------

こちらで出力を行うと、「方程式」と「あああ・・・」の間のスペースに違いが生じます。

宜しくお願い致します。
Fuwa Roco への返信

Re: newenvironmentの空白について

- 飯島 徹 の投稿
違いを確認しました
次のようにするとどうでしょうか?

\documentclass[12pt, report]{jsbook}
%\newenvironment{eq}{\begin{equation}}{\end{equation}}
\let\eq=\equation
\let\endeq=\endequation
\begin{document}

\begin{eq}
{F = ma.} \label{equation of motion}
\end{eq}

\noindent
ああああああああああああああああああああああああああああああああああああ

\begin{equation}
{F = ma.} \label{equation of motion 1}
\end{equation}

\noindent
ああああああああああああああああああああああああああああああああああああ

\end{document}
飯島 徹 への返信

Re: newenvironmentの空白について

- 北見 けん の投稿
LaTeXの環境を入れ子にすると、内側の環境の後処理が外側の環境の後に引き継がれなくなる
のが原因ですね。

この例の場合であれば、
\newenvironment{eq}{\begin{equation}}{\end{equation}\@ignoretrue}
のように \@ignoretrue を入れて、
外側の環境の後でも equation と同じ後処理をするようにさせるとうまくいくようです。

こういうことは環境を入れ子にするときによく起こりますが、
個々の環境の後処理内容を把握しておくのは大変なので、
LaTeXで環境を入れ子にするときのセオリーとして、
\begin{内側の環境名} と \end{内側の環境名} の代わりに
\内側の環境名 と \end内側の環境名 を使うという手があります。
(どこかの文献に書かれていました。
 ランポートの「文書処理システムLaTeX2e」か、
 ltxguide.tex とか clsguide.tex とかだったかもしれません。)

今回の例では

\newenvironment{eq}{\equation}{\endequation}

するとうまくいくと思います。
北見 けん への返信

Re: newenvironmentの空白について

- 北見 けん の投稿
あ、飯島さんの回答と同じ趣旨でしたね。
失礼しました。
北見 けん への返信

Re: newenvironmentの空白について

- Fuwa Roco の投稿
飯島 徹 様、北見 けん 様

ご回答ありがとうございました。
今回、記述したソースに関しては解決はしましたが、
すでに定義されている数式環境ではあまり\newemvironmentを使用しない方が良いことを感じました。

といいますのも今度は式番号なしの\begin{equation*}\end{equation*}が同様の方法では設定できないことがわかりました。

思わぬところでバグを誘発しかねないので、用意されている数式環境はそのまま使用することにしました。

\newemvironmentは美文書で記載されているようなケースで使用したいと思います。

宜しくお願い致します。