行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
返信数: 18
宜しくお願い致します。

(1)
1+2=3 (1.1.1)

ではなく

(1) 1+2=3 (1.1.1)

という風に行頭番号(1)と参照番号(1.1.1)を一行で出力させたくて下記のようにしました。

\begin{enumerate}
\begin{fleqn}\begin{align}
\item \label{123} $1+2=3$ \label{456}
\end{align}\end{fleqn}
\end{enumerate}

「! LaTeX Error: Command \item invalid in math mode.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.」

となり,\mbox{\item \label{123}}と\mboxで括ったら

「! LaTeX Error: Something's wrong--perhaps a missing \item.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.」

となりました。どうすれば解決できますでしょうか?
DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
align環境をどういう目的で使っているのかで
対処の仕方が変わってくるんじゃないかと思います。

例えば
次のように項目が並んだときに一行目の等号"="と二行目の等号を上下に揃えたい
というような、桁揃えの希望があるのでしょうか。

(1) 1+2=3 (1.1.1)
(2) 1=3-2 (1.1.2)
北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
ご回答誠に有難うございます。

> 桁揃えの希望があるのでしょうか。

いえ,特に等号の桁ぞろえは望みません。あくまで行数をできるだけ節約する為です。

下記の様に出来れば嬉しいです。編集時に数式の順序を入れ替えたりするので,\itemを使って箇条書きしてます。


(1) 1+2=3 (1.1.1)

ここに複数行からなる説明文が来る。

(2) 1=3-2 (1.1.2)

ここに複数行からなる説明文が来る。

(3) 1+4=5 (1.1.3)

ここに複数行からなる説明文が来る。

(4) 5+4=9 (1.1.4)

DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 本田 知亮 の投稿
ひとまずはそんなに複雑に考える必要はないんです

たとえば

\begin{enumerate}
\item $y=ax^2+bx+c$ \hfill (1.1.1)
\end{enumerate}

による結果が得たいものであれば
それを順次マクロにすればいいのです

まず,それらしく入力しようと思うと

\begin{enumerate}
\item
\begin{EqInEnumerate}
y=ax^2+bx+c
\end{EqInEnumerate}
\end{enumerate}

なんてのはそれらしいでしょう.だったら,
EqinEnumerate環境ってのを最初のものになるように
さだめればいいのです

\def\EqInEnumrate{%
$\disylaystyle %%%別行だての形に
}
\def\endEqinEnumerate{%
$\hfill(1.1.1)\par}

これじゃあ,数式番号がまずい
(番号固定だし,だから増えていかない)から

\def\endEqinEnumerate{%
$\hfill
\refstepcounter{equation}%
(\theequation)\par}

これでうごくかは試してないのでわかりませんが,
ざっくり考えるならこんな感じです.

目標の結果を得る入力をまず力技ででも
何ででもでっちあげて,それをマクロ化して,
可変にすべき部分を取り出していって,
徐々に抽象化していくとこの手のものは
なんとかなります.

もう少し手をいれて,
位置揃いもしたい,改ページもしたいとなると
eqnarray環境の定義を真似するということを
思いつきます.
\itemと\halignをうまく配置するという方針です.
#たぶん可能だろうけどかなりめんどくさくなりそう.

改ページを考えないなら
array環境のtオプションを使うのもありだと思います.

========

本格的に処置しようとなると
list系環境なので相当複雑です.
\itemで実際に見出しを出す処理はややこしいのです.
\itemの処理の中で\@inlabelなるものを追いかけて,
それをequationなりeqnarrayなりと連携させた上で
\itemの処理の一部を横取りした
equationなりeqnarrayなりを書くことになります.
amsmath互換にするとなると・・・
もう考えたくないです.









本田 知亮 への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
本田さんがマクロ作成の流れを詳しく説明してくれました。
ただ、DION Emily さんのこれまでの書き込みから想像するに、
これで自分でなんとかするのは少し難しいかなという気がします。

DION Emily さんに  align 環境を使っている目的を訊ねたところ、

>> 桁揃えの希望があるのでしょうか。
> いえ,特に等号の桁ぞろえは望みません。あくまで行数をできるだけ節約する為です。

というご回答でしたが、align 環境には行を詰めたりするような機能はないはずなので、
この「行数を節約するため」というのは、 align 環境を使っていた目的ではなくて、
箇条書きの番号と数式と数式番号をすべて1行に収めることの目的だろうと想像します。

そうすると結局 align 環境を使う目的がはっきりしません。
おそらくですが、amsmath のディスプレイ数式環境に equation, align, gather, などの種類があって、
それぞれに使用目的が違うのだというようなことを把握されていないのではないでしょうか?
(これらの環境の説明は、おそらくお手元のシステムの /texmf/source/latex/amslatex/math/amsldoc.tex にあると思います)
それで、単に数式番号をつけるためだけの目的で align 環境を使っていたと。
(そもそもディスプレイ数式とインライン数式の違いを上付きや下付きの体裁の違い程度だと思っているのかも)

もしもそうなら、ディスプレイ数式にせずに数式番号だけを付けるようにできれば解決ですね。
(これが本田さんの説明してくれたことだと思います。
 が、タイプミスがあるようです。
 \EqInEnumrate → \EqInEnumerate
 \disylaystyle → \displaystyle
 \endEqinEnumerate → \endEqInEnumerate)


と、いろいろ想像を交えて書かせていただいたので、はずれているかもしれません、
DION Emily さん、いかがでしょうか?

北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
> (これらの環境の説明は、おそらくお手元のシステムの /texmf/source/latex/amslatex/math/amsldoc.tex にあると思います)

すみません。最近のシステムだと
/texmf-dist/doc/latex/amsmath/amsldoc.pdf
のようですね。

私のところのはかなり古いまま更新していないので。
本田 知亮 への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
皆様,ご回答誠に有難うございます。順次ご提案を試して行っております。

\begin{enumerate}
\item
\begin{EqInEnumerate}
y=ax^2+bx+c
\end{EqInEnumerate}
\end{enumerate}

をコンパイルしてみましたら EqInEnumerateがundefinedであるというエラーが出てしまいました。何かstyファイルが要るのでしょうか?

TexWorks 0.4.6の環境です。
DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- Olive Oil の投稿
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12158507867
muskmelon_panさんの解答が利用できるかと思います。
Olive Oil への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
ご回答誠に有難うございます。

http://tex.stackexchange.com/questions/199520/enumerating-the-align-environment

を参考に下記のコードをコンパイルできました。
eqnarray環境で表示される数式に後置される普通の数式番号(1.2.3)を出力させるにはどうすればいいのでしょうか?

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \newcounter{algostep} \newcommand\step{\stepcounter{algostep}\hskip\parindent\thealgostep.} \usepackage{etoolbox} \BeforeBeginEnvironment{flalign}{\setcounter{algostep}{0}} \begin{document} \setcounter{equation}{42} Text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text. \begin{flalign} &\step & a & = b + c \label{label1} & \\ &\step & q & = e + f \label{label2} \\ &\step & z & = a + d \label{label3} \end{flalign} Text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text. \begin{flalign} &\step & z & = a + d \label{label3} & \\ &\step & q & = e + f \label{label2} \\ &\step & a & = b + c \label{label1} \end{flalign} \end{document}

DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- Olive Oil の投稿
数式番号の最初の1がPartを表しているなら、下記のものを
\begin{document}
の前に入れてください。
\makeatletter
\renewcommand{\theequation}{\arabic{part}.\arabic{section}.\arabic{equation}}
\@addtoreset{equation}{section}
\makeatother
Olive Oil への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
ご回答誠に有難うございます。仰る通り下記のようにして上手くいきました。
ほぼ90%です。

最後にあと2つだけお許しください。

一つ目は

\arabic{part}→\arabic{chapter}に変更したのですがどの章に

「\begin{flalign}
&\step a = b + c \label{label1}& \\
&\step q = e + f \label{label2} \\
&\step z = a + d \label{label3}
\end{flalign}」

を置いても章番号の欄は常に1のままなのですが,どうすれば章番号に反応してくれるようになるのでしょうか?

二つ目は

\begin{fleqn}\begin{align}\end{align}\end{fleqn}環境では
\renewcommand{\labelenumi}{$\lbag${\rm \arabic{enumi}}$\rbag$}
として\itemは飾り括弧とアラビア数字で出力させてるのですが,
\stepででも飾り括弧とアラビア数字で出力されるにはどうすればいいのでしょうか?

(\newcounter{algostep}のalgostepをどうにか変更すればいいのだと推測はしたのですが、、)




\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\newcounter{algostep}
\newcommand\step{\stepcounter{algostep}\hskip\parindent\thealgostep.}
\usepackage{etoolbox}
\BeforeBeginEnvironment{flalign}{\setcounter{algostep}{0}}

\makeatletter
\renewcommand{\theequation}{\arabic{chapter}.\arabic{section}.\arabic{equation}}
\@addtoreset{equation}{section}
\makeatother

\begin{document}
\begin{flalign}
&\step a = b + c \label{label1}& \\
&\step q = e + f \label{label2} \\
&\step z = a + d \label{label3}
\end{flalign}

\end{document}
DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- Olive Oil の投稿
1.
文書クラスは、article.clsでなく、book.clsですか?chapterは、article.clsに定義されていません。chapterが定義されている文書クラスをお使いで、数式番号(1.2.3)の"1"が章番号に対応するなら、
\renewcommand{\theequation}{\arabic{part}.\arabic{section}.\arabic{equation}}

\renewcommand{\theequation}{\arabic{chapter}.\arabic{section}.\arabic{equation}}
として下さい。

2.
\newcommand\step{\stepcounter{algostep}\hskip\parindent\thealgostep}

\newcommand\step{\stepcounter{algostep}\hskip\parindent(\thealgostep)}
として下さい。
Olive Oil への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
ご回答誠に有難うございます。

> 文書クラスは、article.clsでなく、book.clsですか?

\documentclass[10pt,oneside]{book}

としてます。

\renewcommand{\theequation}{\arabic{chapter}.\arabic{section}.\arabic{equation}}
\newcommand\step{\stepcounter{algostep}\hskip\parindent(\thealgostep)}
と訂正して上手くいきました。\(^o^)/

もう99%目的が達成です!!!!
あと1%は

\begin{enumerate}
\item \label{1} Let $1+1=2$.\begin{eqnarray}\label{2}
a+b=c.
\end{eqnarray}
\item \label{3} Let $2+3=5$\begin{eqnarray}\label{4}
c+d=e.
\end{eqnarray}
\end{enumerate}

は\item番号も数式番号も参照できますよね。

でも\step番号を参照しようと

\begin{flalign}
&\step \label{1} \mbox{Let } 1+1=2. a+b=c \label{2} & \\
&\step \label{3} \mbox{Let } 2+3=5 c+d=e \label{4} \\
\end{flalign}

とした所,下記のエラーが出てしまいました。どうすれば解決できますでしょうか?

! Package amsmath Error: Multiple \label's: label '1' will be lost.

See the amsmath package documentation for explanation.
Type H <return> for immediate help.
DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
ちょっと進行中の流れとは違う方向ですが、
私のほうでも別案をまとめてみたので一応書いてみます。

まず問題点の分析です。問題なのは次の点ですね。

\item を使った箇条書きの項目中に数式番号付きの数式を入れたいが、
数式番号を付けるにはディスプレイ数式にするしかなく、
そうすると不用な改行や縦方向の空白が入ってしまう。

望ましい状態は、
数式を置く行の頭に \item による番号がついたうえで同時に末尾に数式番号が付く、
ということになるでしょう。

そのための方策としては、大きく分けて、
(A) 数式環境の中で、式の左側に箇条書き番号をつける
(B) 箇条書きの項目の中で(ディスプレイ形式にせずに)数式番号をつける
のいずれかが考えられます。

(A)は本田さんが示してくれた方法で、
(B)はOlive Oil さんの紹介されたサイトを参考に DION Emily さんがやってみて、現在調整中の方法ですね。

私が思うに、(B)よりも(A)のほうが素直で筋がよいように思います。
というのも、
(B)のほうは、箇条書きという 複数項目を束ねている構造を、
その構造を断ち切って項目ごとに数式に埋め込まねばならないのに対して、
(A)のほうは、数式番号を伴った数式を箇条書きの中にコンパクトに埋め込めばよく、
数式と数式番号が組になっている構造を分断しません。
ただし、(A)の場合には、数式番号を付けられるのが通常ディスプレイ数式に限られているのを、
インライン数式にもつけられるようにする必要があります。

下の例は(A)を実装してみたものです。本田さんの例では数式番号を自前で操作していたのに対して、
数式番号を付ける処理を amsmath の内部マクロを拝借してやってみたものです。
ただし、amsmath はわりと頻繁に内部マクロを変えてしまうので、うまく動くかをバージョンごとに確かめる必要があります。

項目番号と数式番号のそれぞれを \label で参照できるようです。

\documentclass{book}
\usepackage{amsmath}

\makeatletter
%\let\MakeDisplayTag\make@display@tag% 昔の amsmath 用
\def\MakeDisplayTag{\refstepcounter{equation}\tagform@\theequation}% 最近の amsmath 用
\makeatother

\begin{document}

\chapter{Aaa}
\chapter{Bbb}
\chapter{Ccc}

\section{aa}

\begin{equation}
1+1=2
\end{equation}

\section{bb}

\begin{enumerate}
\item \label{i:2}$1+2=3$\hfil\MakeDisplayTag\label{e:2}
\item \label{i:3}$2+3=5$\hfil\MakeDisplayTag\label{e:3}
\end{enumerate}

項目\ref{i:3}(ページ\pageref{i:3})は項目\ref{i:2}(ページ\pageref{i:2})の次の項目で、
式\ref{e:3}(ページ\pageref{e:3})は式\ref{e:2}(ページ\pageref{e:3})より従う。

\end{document}
北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
これ、別のトピックでほぼ同じ解決策がすでに出されていたようですね。

このトピックと同じく DION Emilyさんによって立てられた
「文中の数式に通し番号をつけて\labelもセットするには?」
https://okumuralab.org/tex/mod/forum/discuss.php?d=1067
です。

憶えておられるでしょうか?

そこで tat tsan さんによって出された回答がそうです。

そこでも指摘されているようですが、
やはり一度まとまった解説を通読していただくのがよいと思います。
システムにはすでに amsldoc.pdf があるでしょうし。
北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
すみません。二つ上の
「2017年 01月 04日(水曜日) 02:45 - 北見 けん の投稿」
について、読み返してみたら致命的な間違いがありました。
方向性として挙げていた(A)と(B)が意図したものと逆になっていて、
そのあとの論説との対応が真逆になっていました。
あれではわけがわかりませんね。申し訳ありません。
間違っていたところを修正したうえで再掲させていただきます。
修正は、論説部分で (A)→(B), (B)→(A) としただけです。

======== 以下修正して再掲  ========

ちょっと進行中の流れとは違う方向ですが、
私のほうでも別案をまとめてみたので一応書いてみます。

まず問題点の分析です。問題なのは次の点ですね。

\item を使った箇条書きの項目中に数式番号付きの数式を入れたいが、
数式番号を付けるにはディスプレイ数式にするしかなく、
そうすると不用な改行や縦方向の空白が入ってしまう。

望ましい状態は、
数式を置く行の頭に \item による番号がついたうえで同時に末尾に数式番号が付く、
ということになるでしょう。

そのための方策としては、大きく分けて、
(A) 数式環境の中で、式の左側に箇条書き番号をつける
(B) 箇条書きの項目の中で(ディスプレイ形式にせずに)数式番号をつける
のいずれかが考えられます。

(B)は本田さんが示してくれた方法で、
(A)はOlive Oil さんの紹介されたサイトを参考に DION Emily さんがやってみて、現在調整中の方法ですね。

私が思うに、(A)よりも(B)のほうが素直で筋がよいように思います。
というのも、
(A)のほうは、箇条書きという 複数項目を束ねている構造を、
その構造を断ち切って項目ごとに数式に埋め込まねばならないのに対して、
(B)のほうは、数式番号を伴った数式を箇条書きの中にコンパクトに埋め込めばよく、
数式と数式番号が組になっている構造を分断しません。
ただし、(B)の場合には、数式番号を付けられるのが通常ディスプレイ数式に限られているのを、
インライン数式にもつけられるようにする必要があります。

下の例は(B)を実装してみたものです。本田さんの例では数式番号を自前で操作していたのに対して、
数式番号を付ける処理を amsmath の内部マクロを拝借してやってみたものです。
ただし、amsmath はわりと頻繁に内部マクロを変えてしまうので、うまく動くかをバージョンごとに確かめる必要があります。

項目番号と数式番号のそれぞれを \label で参照できるようです。

\documentclass{book}
\usepackage{amsmath}

\makeatletter
%\let\MakeDisplayTag\make@display@tag% 昔の amsmath 用
\def\MakeDisplayTag{\refstepcounter{equation}\tagform@\theequation}% 最近の amsmath 用
\makeatother

\begin{document}

\chapter{Aaa}
\chapter{Bbb}
\chapter{Ccc}

\section{aa}

\begin{equation}
1+1=2
\end{equation}

\section{bb}

\begin{enumerate}
\item \label{i:2}$1+2=3$\hfil\MakeDisplayTag\label{e:2}
\item \label{i:3}$2+3=5$\hfil\MakeDisplayTag\label{e:3}
\end{enumerate}

項目\ref{i:3}(ページ\pageref{i:3})は項目\ref{i:2}(ページ\pageref{i:2})の次の項目で、
式\ref{e:3}(ページ\pageref{e:3})は式\ref{e:2}(ページ\pageref{e:3})より従う。

\end{document}
北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
北見 けん先生。ご回答大変有難うございます。

早速試してみましたら,添付ファイルのように数式番号がチャンと右端まで行ってくれません。 これは何が原因でしょうか?
添付 sample.jpg
DION Emily への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- 北見 けん の投稿
ソースファイルが付いていないので、どう試してみたのかわかりませんが、
おそらくということで書いてみます。

> なにが原因でしょうか?
私の書いた例の通りであれば、数式と数式番号の間は \hfil で隔てられています。
\hfil は無限に伸びられるグル―ですが、もしもひとつの行に複数の \hfil があると、
その \hfil 達が伸び代を均等に分け合うことになります。

試した画像を見ると、数式番号が数式と板面右端とのちょうど真ん中あたりにあるようですから、
<数式> \hfil (数式番号) \hfil 板面右端
のような状況なっているのでしょう。数式番号の後の \hfil は、
段落末尾に自動的に補われる \hskip\parfillskip によるものだと思います。
(\parfillskip は通常 0pt plus 1fil に設定されているので、\hfil と同じ効果があります。)

と、原因はこんなところですが、一連の書き込みを拝見するに、
あまり理解できていないままに行き当たりばったりであれこれいじって混乱している様子ですね。
上の説明もあまりピンと来ないかもしれません。
もしそうなら、今回に限っては、
おそらく \hfil を \hfill にすればご希望通りになるんじゃないかと思います。
\hfill も無限に伸びるグル―ですが、その伸び代は \hfil より高位の無限大になるので、
自動で補われる \parfillskip の影響を受けずに伸び代を独り占めできます。

とはいえ、対症療法的なアドバイスを何度も受けても身につかずに、
また似たような問題でつまづくことを繰り返しているのを見ると、
アドバイスをしても砂に水を撒くような心持ちです。

## これは一般的な話ですが、LaTeX(TeX) の仕組みや使い方を身につけるためだけに
## そんなに時間は割けないというのは確かにその通りだとはいえ、
## 似たような質問をしないで済む程度には、理解を深めていただければなぁと思いました。
## そのための質問などであれば、アドバイスのし甲斐もありますね。
北見 けん への返信

Re: 行頭番号(1)と参照番号(1.1.1)を一行で出力させるには?

- DION Emily の投稿
ご回答誠に有難うございます。お蔭様で漸く解決できました。

> とはいえ、対症療法的なアドバイスを何度も受けても身につかずに、
> また似たような問題でつまづくことを繰り返しているのを見ると、
> アドバイスをしても砂に水を撒くような心持ちです。

大変申し訳ありません。Latexのマニュアル本片手に自分なりに色々と試行錯誤はしては見たのですが恥ずかしながら頭の中が混乱してしまいまして。修行が足りないようです。もっと切磋琢磨いたします。m(_ _)m