自前命令での解答番号付与

自前命令での解答番号付与

- Hiroshi W の投稿
返信数: 6

突然の質問、失礼致します。

現在、レポート問題作成などでBeamerを用いて穴埋め問題を作っており、自前の命令によって穴埋め解答欄の番号を付与する方式をとっておりました。

例えば、その命令を\qで定義したとすると、通常の数式モードで$\q, \q, \frac{\q}{\q}$と入力すると、$(1), (2), (3)/(4)$と思ったように表示されます。

しかし、そのマクロが行立て数式モード(align環境, equation環境など)ではうまく機能せず、labelをつけてのちに参照しても(??)しか出力されず、苦肉の策として

\begin{center}

$

\q

$

\end{center}

として、参照不能状態を回避できているのが現状です。

プリアンブルの設定は以下の通りです:

-----

¥documentclass[11pt,xcolor=svgnames,dvipdfmx]{beamer}
¥setbeamertemplate{theorems}[numbered]
¥usepackage{bm}
¥usepackage{amsmath}
¥usepackage{amssymb}
¥usepackage{enumerate}
¥usepackage{multicol}
¥usepackage{bxdpx-beamer}
¥usepackage{otf}
¥usepackage{graphicx}
¥usepackage{pxjahyper}
¥usepackage{fancybox}
¥usepackage{latexsym}
¥usepackage{tikz}
¥usepackage{ascmac}
¥usepackage{amsfonts}
¥usepackage{amsthm}
¥usepackage{mathtools}
¥usepackage{mathrsfs}

%番号付自前命令始

¥newcounter{ProblemNumber}
¥setcounter{ProblemNumber}{0}
¥newcommand{¥q}{%
¥refstepcounter{ProblemNumber}
(¥theProblemNumber)
}
%番号付自前命令終
 

\begin{document}

-----

仮にこの命令を素にしたとき、行立てのモードでも番号付命令を機能させるにはどうしたら良いでしょうか?

もしくは、行立てモードで機能しない理由がわかる方がいらっしゃいましたら、ぜひご教授いただきたく存じます。

Hiroshi W への返信

Re: 自前命令での解答番号付与

- m c の投稿
とりあえず,当該命令(\q)の定義部分を
\newcommand{\q}{%
\refstepcounter{ProblemNumber}
\text{(\theProblemNumber)}
}
と\text{}で囲んでみたら,equation環境やalign環境でも通りました.

サンプル(プリアンブル略)
\begin{document}
$\q, \q, \frac{\q}{\q}$

\begin{align}
\q
\end{align}

\end{document}
m c への返信

Re: 自前命令での解答番号付与

- Hiroshi W の投稿

お返事いただきありがとうございます。

ご教示いただきました手法でやりましたところ、こちらでは問題が起こりました。

例えば、1つのalign環境(含 equation環境、[ ]による行立て)にて1つの解答欄のみを設定する場合は問題なく機能するのですが、2つ以上の解答欄を1つのalign環境に設定し、それぞれにlabel (例えば一つ目を\label{q;1}、二つ目を\label{q;2})をつけると

"Package amsmath Error: Multiple \label's: label 'q;1' will be lost" 

と表示され、走査できなくなります。

Hiroshi W への返信

Re: 自前命令での解答番号付与

- m c の投稿
確認ですが,ラベルをつけたときが問題で,ラベルなしの場合は「2つ以上の解答欄を1つのalign環境に設定」してもOKなんですね?

可能でしたら,問題の起こるサンプルソースを提示(または添付)していただけませんか.
m c への返信

Re: 自前命令での解答番号付与

- Hiroshi W の投稿
すみません、再度確認したところ、以下の状況が確認されました。
以下にサンプルソースを提示します:
equation環境・align環境(gather環境なども同様)

\begin{align*}
\q, \q
\end{align*}

または

\begin{align*}
\q\label{q;1}, \q
\end{align*}

または

\begin{align*}
\q, \q\label{q;1}
\end{align*}

のコンパイル自体は通り、番号もきちん(1), (2)と付与されるのですが、のちにref{q;1}を呼び出しても(??)となります。
一方で、

\begin{align*}
\q\label{q;1}, \q\label{q;2}
\end{align*}

とすると、コンパイル自体通らなくなります。
 
[ ]を利用した行立てによって
[
\q, \q
]
または
[
\q\label{q;1}, \q
]
または
[
\q, \q\label{q;1}
]

ではコンパイルは問題なく通り、のちにref{q;1}で呼び出すと正しい番号が呼び出されます。
しかし、
[
\q\label{q;1}, \q\label{q;2}
]
はやはりコンパイルが通らなくなります。(エラーは以前と同じです)

思った番号が呼び出されないのは、どうやら「数式番号を付与する機能のある環境中でこのマクロを使う」こと自体に原因があるとのではないかと推察しております。
Hiroshi W への返信

Re: 自前命令での解答番号付与

- m c の投稿
数式環境(equation, align等)内のラベルは,数式番号に対して付けられるみたいですね.
数式番号なしの数式環境(equation*, align*等)では,その数式環境にラベル付けされるようです.
そのため,同一行や数式番号なしの数式環境内で複数のラベルがある場合は「Package amsmath Error: Multiple \label's: label 'q;1' will be lost」のエラーになるのではないかと思います.

以下のサンプルのように改行を入れて各行にラベルをつけるとequationやalign環境でタイプセット可能になりますが,\ref{}で呼び出した際に参照されるのは数式番号の方です.
\begin{document}
\begin{align}
\q\label{q;1}\\
y = f(x) \label{q3}\\
z = g(y) \label{q4}\\
\q\label{q;2}
\end{align}
\ref{q;2}はどう参照される?
\end{document}

上記サンプルをalign*環境でタイプセットすると,やはり「Package amsmath Error: Multiple \label's: label 'q;1' will be lost」となります.

現状では数式環境内での使用は難しそうです.すみません,お役に立てなくて.
# 文中数式で組み立てて,tabular環境か何かで配置整形するしかないのかしら?
m c への返信

Re: 自前命令での解答番号付与

- Hiroshi W の投稿

お返事ありがとうございます。

こちらも色々と試してはみたのですが、結果として数式環境内では使えなさそうですね・・・

確かに、tabular環境では試してみる価値はありそうですね。

色々と知恵を貸してくださり、ありがとうございます。