AMC

選択式試験問題マークシート自動採点

LaTeXソースファイル

この節では、LaTeXソースファイルから試験問題をデザインできるようにするためのLaTeXコマンドを説明します。別の形式をソースファイルにする場合は、この節はスキップしてください。選択式試験問題は、automultiplechoiceパッケージを用いてLaTeXファイルで記述できます。LaTeXファイルは、latexコマンドでコンパイルして生成されたdviファイルを表示することで、いつでも確認することができます。

選択式試験問題用のLaTeXファイルをどのように作ればいいかを簡潔に示すいくつかの例から始めます。それぞれのLaTeXファイルはテンプレートとして用意されているので、これらのテンプレートの一つを用いて選択式試験問題プロジェクトを作ることができます。

簡単な例

\documentclass[a4paper]{article}

\usepackage[utf8x]{inputenc}    1
\usepackage[T1]{fontenc}

\usepackage[box,completemulti,lang=JA]{automultiplechoice}    2
\begin{document}

\onecopy{10}{    3

%%% 試験問題用紙ヘッダー開始:    4

\noindent{\bf QCM  \hfill TEST}

\vspace*{.5cm}
\begin{minipage}{.4\linewidth}
\centering\large\bf テスト\\ 試験日 2008年1月1日\end{minipage}
\namefield{\fbox{    5
                \begin{minipage}{.5\linewidth}
                  氏名:

                  \vspace*{.5cm}\dotfill
                  \vspace*{1mm}
                \end{minipage}
         }}

\begin{center}
試験時間 : 10 分。

  資料の持込みと電子計算機の使用は禁じます。

  \multiSymbole{}の記号のある設問の正解は1個とは限りません。
  0個の場合や複数の場合があります。

  それ以外の設問には正解が1個だけあります。

  \emph{非常に悪い解答}にはマイナス点がつくことがあります。
\end{center}
\vspace{1ex}

%%% ヘッダー終了

\begin{question}{総理大臣}    6
  次のうち、日本の総理大臣になったことがある人を一人選びなさい。
  \begin{choices}
    \correctchoice{大隈重信}
    \wrongchoice{湯川秀樹}
    \wrongchoice{聖徳太子}
    \wrongchoice{徳川家康}
  \end{choices}
\end{question}

\begin{questionmult}{都道府県}    7
  次のうち、日本の都道府県はどれか、すべて選びなさい。
  \begin{choices}
    \correctchoice{石川}
    \wrongchoice{山田}
    \correctchoice{宮崎}
  \end{choices}
\end{questionmult}

% \AMCaddpagesto{3} 8

}   9

\end{document}

この例題の解説:

1

inputencおよびfontencパッケージにより、試験問題の文章にUTF-8エンコーディングを用いることができます。もちろん、使用したいエンコーディングに合わせて変更することもできます。(訳注: 日本語の試験問題において、後述する最近のplatexを使用する場合は、なくてもUTF-8で動作します。)

2

ここで使われているautomultiplechoiceパッケージのオプションは、設問が2ページにまたがるのを防ぎ(box)、複数選択問題にどの選択肢も該当しないことを示すもう一つの選択肢を自動追加します(completemulti)。

3

onecopyコマンドは(異なる)試験問題を必要数(ここでは10)実体化します。LaTeXの環境を用いた代替の構文については「試験問題数の記述」を参照してください。

4

この行以降は、試験問題用紙のヘッダーを記述します。

5

namefieldコマンドは受験者が氏名を記入する欄を指定します。

6

questionおよびchoices環境は、単一の正解のある選択式問題を作成します。固有の識別名(ここでは総理大臣)を指定する必要があります。

7

questionmultおよびchoices環境は、任意個数の正解のある選択式問題を作成します。受験者は、正解と思われるすべてのボックスにマークするか、(6行目のパッケージ読込みでのcompletemultiオプションで自動的に追加された)最後のボックスにマークすることになります。

8

各試験問題のページ数を3ページに固定するには、この行をアンコメントしてください。(「ページ番号」参照)

9

(9行目で始まった)onecopyコマンドの終わりを表します。

設問グループとシャフルの例

この例では、設問の順序は試験問題の実体ごとに変えたいけれど、同じ分野の設問どうしはいっしょにまとめておきたい場合を考えます。この目的のためには、設問グループを二つ作成し、各グループ内で設問をランダムにシャフルします。

\documentclass[a4paper]{article}

\usepackage[box,completemulti,lang=JA]{automultiplechoice}
\begin{document}

%%% グループの準備

\setdefaultgroupmode{withoutreplacement}

\element{地理}{
  \begin{question}{パリ}
    パリはどの大陸にありますか?
    \begin{choices}
      \correctchoice{ヨーロッパ}
      \wrongchoice{アフリカ}
      \wrongchoice{アジア}
      \wrongchoice{火星}
    \end{choices}
  \end{question}
}

\element{地理}{
  \begin{question}{カメルーン}
    カメルーンの首都はどれですか?
    \begin{choices}
      \correctchoice{ヤウンデ}
      \wrongchoice{ドゥアラ}
      \wrongchoice{アブダビ}
    \end{choices}
  \end{question}
}

\element{歴史}{
  \begin{question}{応仁}
    応仁の乱はいつ始まりましたか?
    \begin{choiceshoriz}
      \correctchoice{1467年}
      \wrongchoice{1967年}
      \wrongchoice{1419年}
    \end{choiceshoriz}
  \end{question}
}

\element{歴史}{
  \begin{questionmult}{Nantes}
    \emph{ナントの勅令}について正しいのはどれですか?
    \begin{choices}
      \correctchoice{1598年に発布された}
      \correctchoice{ルイ14世により破棄された}
      \wrongchoice{ヘンリ2世により発布された}
    \end{choices}
  \end{questionmult}
}

%%% copies

\onecopy{10}{

%%% 試験問題用紙ヘッダー開始:

\noindent{\bf QCM  \hfill TEST}

\vspace*{.5cm}
\begin{minipage}{.4\linewidth}
  \centering\large\bf 歴史と地理\\ 試験日 2008年1月1日
\end{minipage}
\namefield{\fbox{\begin{minipage}{.5\linewidth}
氏名:

\vspace*{.5cm}\dotfill
\vspace*{1mm}
\end{minipage}}}

%%% ヘッダー終了

\begin{center}
  \hrule\vspace{2mm}
  \bf\Large 地理
  \vspace{1mm}\hrule
\end{center}

\insertgroup{地理}

\begin{center}
  \hrule\vspace{2mm}
  \bf\Large 歴史
  \vspace{2mm}\hrule
\end{center}

\insertgroup{歴史}

}

\end{document}

別紙答案用紙を用いた例

この例では、マーク用のボックスをすべて別紙に集めて配置したい場合を考えます。こうすれば、不正行為はさらに難しくなり、また重要なのは、受験者一人につき用紙を1枚だけスキャンすればいいので、スキャンを手動で行う場合の手間が軽減されます。この例は設問数が少なく1枚に収まるため、このような配置はこの特定の場合ではあまり有用ではないかもしれません。このレイアウトを多数の設問向けに修正するのはおまかせします!

\documentclass[a4paper]{article}

\usepackage[box,completemulti,separateanswersheet,lang=JA]{automultiplechoice}    1
\begin{document}

\AMCrandomseed{1237893}

\def\AMCformQuestion#1{{\sc 問 #1:}}    2

\setdefaultgroupmode{withoutreplacement}

\element{general}{
  \begin{question}{総理大臣}
    次のうち、日本の総理大臣になったことがある人を一人選びなさい。
    \begin{choices}
      \correctchoice{大隈重信}
      \wrongchoice{湯川秀樹}
      \wrongchoice{聖徳太子}
      \wrongchoice{徳川家康}
    \end{choices}
  \end{question}
}

\element{general}{
  \begin{questionmult}{都道府県}
    次のうち、日本の都道府県はどれか、すべて選びなさい。
    \begin{choices}
      \correctchoice{石川}
      \wrongchoice{山田}
      \correctchoice{宮崎}
    \end{choices}
  \end{questionmult}
}

\element{general}{
  \begin{question}{EU}
    欧州連合には2009年1月現在、何ヶ国が加盟していますか?
    \begin{choiceshoriz}[o]
      \wrongchoice{15}
      \wrongchoice{21}
      \wrongchoice{25}
      \correctchoice{27}
      \wrongchoice{31}
    \end{choiceshoriz}
  \end{question}
}

\onecopy{5}{    

%%% 試験問題用紙ヘッダー開始:

\noindent{\bf QCM  \hfill TEST}

\vspace*{.5cm}
\begin{minipage}{.4\linewidth}
  \centering\large\bf テスト\\ 試験日 2008年1月1日
\end{minipage}

\begin{center}\em
試験時間 : 10 分。

  資料の持込みと電子計算機の使用は禁じます。

  \multiSymbole{}の記号のある設問の正解は1個とは限りません。
  0個の場合や複数の場合があります。

  それ以外の設問には正解が1個だけあります。

  \emph{非常に悪い解答}にはマイナス点がつくことがあります。

\end{center}
\vspace{1ex}

%%% ヘッダー終了

\insertgroup{general}

\AMCcleardoublepage    3

% \AMCaddpagesto{3} 4

\AMCformBegin    5

%%% 答案用紙ヘッダー開始

{\large\bf Answer sheet:}
\hfill \namefield{\fbox{    6
    \begin{minipage}{.5\linewidth}
      氏名:
      
      \vspace*{.5cm}\dotfill
      \vspace*{1mm}
    \end{minipage}
  }}

\begin{center}
  \bf\em 解答はこの用紙にのみ行わなければなりません:
  他の用紙に行った解答は無視されます。
\end{center}

%%% 答案用紙ヘッダー終了

\AMCform    7

% \AMCaddpagesto{5} 8

}  

\end{document}

以下の解説により、上の例がより明確になるでしょう:

1

separateanswersheetオプションにより、所望の配置ができるようになります。

2

別紙答案用紙上での設問番号の表示方法をこのように変更することができます(この行はなくてもかまいません)。

3

この改ページはマーク用ボックスを集めた答案専用の用紙の前に置きます。両面印刷を行う場合は、このページが次の用紙に印刷されるように\AMCcleardoublepageを使用してください。片面印刷の場合は、単純に\clearpageでもかまいません。

4

各試験問題の問題ページ数を3ページに固定するには、この行をアンコメントしてください。(「ページ番号」参照)(このままではコメントアウトされているので、何も起きません)

5

このコマンドは答案用紙部の開始を示します。答案用紙側にしか現れない設問(例えば\AMCcodeGridで生成される擬似的な設問)を適切に扱うために必要です。

6

受験者の氏名は答案用紙側に記入しないと意味がありません!

7

AMCformコマンドにより、マーク用ボックスがすべて出力されます。

8

各試験問題のページ数(問題ページと答案ページの合計)を5ページに固定するには、この行をアンコメントしてください。(「ページ番号」参照)

[警告]警告

別紙答案用紙を用いる場合、アルファベット(あるいはdigitsオプションを使用する場合は数字。「パッケージオプション」参照)がマーク用ボックス内に印刷されます。マーク有無を正確に検出するために、受験者にはボックスをしっかり塗りつぶすように(単純にチェックマークだけでは不十分)指示する必要があります。また、マーク判定閾値(マークのあるボックス内での黒ピクセルの割合で定義)を0.5付近に調整する必要があります。

LaTeXコマンドの説明

パッケージオプション

automultiplechoiceパッケージを使用するには、

\usepackage[...]{automultiplechoice}

という行を用い、...部分はカンマで区切ったオプションのリストを指定します。指定できるオプションは以下のとおりです:

  • lang=XX: 試験問題の言語をXXに設定します。現時点では、DE(ドイツ語)、ES(スペイン語)、FR(フランス語)、IT(イタリア語)、JA(日本語)、NL(オランダ語)、NO(ノルウェー語)、PT(ポルトガル語)のみ指定可能です。automultiplechoicecompletemultiオプションで挿入する「該当なし」のような数種類の文字列も翻訳されます。

  • pdfform: 記入可能なPDFファイルを生成します。

    [注記]注記

    AMCには作成したPDFの自動送信機能はありません。

  • box: 各設問をボックスに入れ、改ページで分割されないようにします。

    [注記]注記

    状況により、設問ごとに\AMCnoblocを用いてこのオプションをキャンセルすることもできます。

    {\AMCnobloc%
      \begin{question}{EU}
        欧州連合には2009年1月現在、何ヶ国が加盟していますか?
        \begin{choiceshoriz}[o]
          \wrongchoice{15}
          \wrongchoice{21}
          \wrongchoice{25}
          \correctchoice{27}
          \wrongchoice{31}
        \end{choiceshoriz}
      \end{question}
    }%
  • asbox: 別紙答案用紙内でboxと同様に働きます。

  • completemulti: 「該当なし」の選択肢を複数選択問題の最後に自動的に付け足します。これにより、複数選択問題において、解答がされない場合とどの選択肢も該当しないという解答とが区別できるようになります。この動作は、個別の設問において、questionmult環境の内部で \AMCcompleteMultiあるいは\AMCnoCompleteMultiコマンドを用いることで、強制あるいはキャンセルすることができます。

  • noshuffle: 各設問の選択肢を自動シャフルしないようにします。

  • noshufflegroups: 試験問題の設問グループを自動シャフルしないようにします。(設問のグループ参照)

  • answers: 試験問題用紙ではなく、模範解答を生成します。

  • indivanswers: 各試験問題用の模範解答を生成します。

  • separateanswersheet: マーク用ボックスをすべてまとめて試験問題用紙の最後に配置するようにします(通常このオプションは、受験者一人あたり用紙を1枚だけスキャンしたいときに使用します。使用例は「別紙答案用紙を用いた例」を参照してください)。

  • digits: separateanswersheetオプションを用いる場合に、digitsオプションにより選択肢を(デフォルトの)アルファベットではなく数字で識別します。

  • outsidebox: separateanswersheetを用いる場合に、このオプションによりアルファベット(あるいは数字)を答案用紙のボックスの外側に印刷します。

  • init: 時刻を用いて乱数生成を初期化します。 このオプションはテスト用です。実際の試験では使用しないでください!

  • insidebox: separateanswersheetを用いない場合に、このオプションによりアルファベット(あるいは数字)を受験者がマークするボックス内に印刷します。

  • catalog: 将来の試験で組み合わせて使えるように設問のカタログを作成します。設問は番号ではなく識別名で区別されます。このレイアウトには\onecopyを使用する必要はありません。

  • postcorrect: スキャン画像の解析を終えてから(採点時)、出題者が作成した答案用紙を正解として指定したい場合にこのオプションを用います。詳細は「採点時正解提示」を参照してください。

  • fullgroups: \insertgroup\copygroupのオプションパラメータの使用を取り消します。したがって、グループ全体が挿入およびコピーされます。(設問のグループ参照)

  • storebox: ボックスの形状(デフォルトは長方形。マーク用ボックスの外見スタイル参照)を長円や円に変更した場合に、automultiplechoiceが\saveboxではなく、\storeboxを使用してボックスの形状を保存するようにします。

  • automarks: separateanswersheet(別紙答案用紙)モードにおいて、試験問題のページに四隅のマーカーを印刷したくない場合に使用してください。マーカーは別紙答案用紙にのみ印刷されます。この場合に試験問題ページ上のページ番号の書式を変更するには、\AMCsubjectPageTagコマンドを次のように再定義してください:

    \renewcommand\AMCsubjectPageTag{%
      \fbox{\texttt{\the\AMCid@etud:\thepage}}%
    }
    [警告]警告

    automarksオプションは、AMCが試験問題ページ上のデータを処理できなくなりますので、これを読み取る必要がない場合にのみ使用してください。

  • nopage: 余白、四隅のマーカー、識別ボックスが必要ない場合、つまり(練習問題などのため)文書をAMCで使用する予定がない場合に使用してください。

試験問題数の記述

試験問題用紙の内容を記述したLaTeXソースコードは\onecopyコマンドの呼出しに含まれている必要があります。これの最初の引数は生成する実体の部数、2番目が実体を生成するコードです。

\onecopy{50}{ ... }

代替の構文としてexamcopy環境も使用可能で、部数はそのオプションで指定します(デフォルトは5)。

\begin{examcopy}[50]
...
\end{examcopy}
[注記]注記

examcopyを使用するにはenvironパッケージをインストールする必要があります。このパッケージは、Ubuntuディストリビューション9.10(Karmic Koala)までで用いられているTeX Live 2007ディストリビューションでは使用できません。

問題用紙番号が奇数か偶数かにより設問内容を変えたい場合には、\exemplairepairコマンドを使用してください。(訳注: 隣の問題と確実に差異を設けるために使用できます。\exemplairepair奇数番号用\else偶数番号用\fiのように使用します。examcopy環境内では直接には記述できません。)

\AMCStudentNumber コマンドにより問題用紙番号が表示されます。

設問と選択肢

単一選択問題(正解が1個)では、次のようなモデルを用います:

\begin{question}{識別名}
  ここに問題文...
  \begin{choices}
    \correctchoice{正しい選択肢}
    \wrongchoice{誤った選択肢}
    \wrongchoice{別の誤った選択肢}
  \end{choices}
\end{question}
[重要]重要

各設問には異なる識別名を用いなければなりません。識別名には、数字、アルファベットと、単純な文字が使えます(アンダースコア、波括弧、角括弧などLaTeXで特殊な意味をもつ文字は使えません)。設問識別名は角括弧で数字を囲んだ形式で終わらないようにしてください。この形式は受験番号記入欄用に予約されています。

[注記]注記

各設問の選択肢の数は199個までです。

[重要]重要

設問を入れ子にしてはいけません。採点表のエクスポートが正しく行われなくなります(採点表のエクスポート参照)。

特定の設問について選択肢をシャフルせず順序を保つには、choices環境のoオプションを使用します。3行目を次のようにしてください:

\begin{choices}[o]

選択肢を2カラムに配置するには、multicolパッケージを使用できます。

\usepackage{multicol}

を用いてプリアンブル部(automultiplechoiceへの参照の直後など)でロードし、以下に示すようにmulticols環境の中にchoices環境を入れてください:

\begin{multicols}{2}
  \begin{choices}
    \correctchoice{正しい選択肢}
    \wrongchoice{誤った選択肢}
    \wrongchoice{別の誤った選択肢}
  \end{choices}
\end{multicols}

選択肢がもっと短い場合、choices環境のかわりにchoiceshorizを用いることで、選択肢を横に並べていくことができます。

(正解が任意個あるような)複数選択問題には、question環境のかわりにquestionmultを使用します。

どの選択肢を選んだかが成績に無関係な設問には、次の例のように\QuestionIndicativeコマンドが使用できます。

\begin{question}{難易度}\QuestionIndicative
  \scoring{auto=0,v=-1,e=-2}
  この授業は易しいですか難しいですか?0(非常に難しい)から5(非常に易しい)の範囲で選んでください。
  \begin{choiceshoriz}[o]
    \correctchoice{0}
    \correctchoice{1}
    \correctchoice{2}
    \correctchoice{3}
    \correctchoice{4}
    \correctchoice{5}
  \end{choiceshoriz}
\end{question}

Last choice

\lastchoicesコマンドを使用すると、一部の選択肢をシャフルせず常に末尾に置くことができます。

\begin{question}{color}
  なに色ですか?
  \begin{choiceshoriz}
    \wrongchoice{赤}
    \wrongchoice{青}
    \wrongchoice{黄}
    \lastchoices
    \correctchoice{透明}
    \wrongchoice{わからない}
  \end{choiceshoriz}
\end{question}

\begin{questionmult}{number}
  いくつですか?
  \begin{choiceshoriz}
    \wrongchoice{なし}
    \correctchoice{1}
    \wrongchoice{2}
    \wrongchoice{3}
    \lastchoices
    \correctchoice{あまり多くない}
    \wrongchoice{たくさん}
  \end{choiceshoriz}
\end{questionmult}
設問番号

次の設問の番号は\AMCnumeroコマンドで変更できます。各試験問題の実体化前に

\AMCnumero{1}

が呼び出されますが、どこで使用してもかまいません。

[注記]注記

特定の設問の番号を非表示にして、番号の増加を抑制するには、次の例のように\AMCquestionNumberfalseを使用します:

{
  \AMCquestionNumberfalse
  \def\AMCbeginQuestion#1#2{}
  \begin{question}
    ...
  \end{question}
}

設問の模範解答解説

設問に対する解答に解説を加えるには、\explainコマンドを使うことができます。解説はオプションであり、模範解答と設問カタログファイルにのみ表示されます。

[警告]警告

個別模範解答には表示されません。

単純な例を示します:

\begin{question}{解説}
  次の中で標高が一番高いのはどれですか?
  \begin{choices}
      \correctchoice{サガルマータ}
      \wrongchoice{K2}
      \wrongchoice{モンブラン}
      \wrongchoice{アコンカグア}
  \end{choices}
  \explain{サガルマータは文字どおり「世界の頂上」という意味で、世界一の標高をもつエベレスト山の地元名です。}
\end{question}
[注記]注記

explainコマンドはquestion系の環境内でのみ使用できます。これにはquestionquestionmultquestionmultx環境があります。

デフォルトではこのコマンドは解説の前に解説: と表示します。この動作は\AMCtextコマンドで変更できます(「AMCが挿入するテキストのカスタマイズ」参照)。

このデフォルト動作を特定の設問でのみ変更したい場合は、\AMCtextコマンドを次の例のように\explainの前に使用してください:

\begin{question}{標高}
  次の中で標高が一番高いのはどれですか?
  \begin{choices}
      \correctchoice{サガルマータ}
      \wrongchoice{K2}
      \wrongchoice{モンブラン}
      \wrongchoice{アコンカグア}
  \end{choices}
  \explain{サガルマータは文字どおり「世界の頂上」という意味で、世界一の標高をもつエベレスト山の地元名です。}
\end{question}

\begin{question}{仲間はずれ}
  次の中から仲間はずれを選びなさい。
  \begin{choices}
      \correctchoice{キリマンジャロ}
      \wrongchoice{ヒマラヤ}
      \wrongchoice{アルプス}
      \wrongchoice{アンデス}
  \end{choices}
  \AMCtext{explain}{\textit{\textbf{理由: }}}
  \explain{キリマンジャロは山ですが、残りは山脈です。}
\end{question}

\begin{questionmult}{ヒマラヤ}
  次の中でヒマラヤにあるのはどれですか?すべて選びなさい。
  \begin{choices}
      \correctchoice{エベレスト山}
      \correctchoice{K2}
      \wrongchoice{モンブラン}
      \wrongchoice{アコンカグア}
  \end{choices}
  \explain{アコンカグアはアンデス山脈にあり、モンブランはアルプスにあります。}
\end{questionmult}

このようにすると、最初と三つめの設問では解説の前に解説: と表示しますが、二つ目の設問の解説の前には理由: と表示されます。

選択肢を複数カラムに配置

(スペースを節約するために)選択肢を複数のカラムに置くには、LaTeXのmulticolパッケージを用いて、multicols環境内にchoices環境を入れることができます。

選択肢がカラムの1行におさまらない場合、その一部が次のカラムに分割されてしまうことがあり、これは受験者を混乱させるかもしれません。この現象を避けるには、\AMCBoxedAnswersコマンドを使用して、各選択肢をボックスに入れてしまうことができます。使用例を示します:

\begin{question}{2カラム}
  鳥とは何ですか?
  \begin{multicols}{2}\AMCBoxedAnswers
    \begin{choices}
      \correctchoice{翼をもった動物で、卵を産みます。あらゆる種類の色をもった鳥がいます。}
      \wrongchoice{木製の大きな家具で、多くの場合、家庭用の衣類を保管するのに使われます。}
      \wrongchoice{蒸気で動く機械で、高速に缶を密封することができます。}
    \end{choices}
  \end{multicols}
\end{question}

複数カラム等のブロック内の選択肢間の垂直間隔はパラメータ化されており、寸法AMCinterBrepにより変更することができます:

\AMCinterBrep=.5ex

選択肢間のスペース

通常の選択肢間の垂直間隔もパラメータ化されており、寸法AMCinterIrepにより変更することができます:

\AMCinterIrep=.75ex

得点表記領域の定義

得点表記領域にtikzパッケージを用いてオプションを付加することができます(得点表記位置参照)。

\usepackage{tikz}
separateanswersheetオプションを使用しない場合

以下のコマンドを\begin{document}コマンドから\onecopyコマンドまでの間に入力してください:

\AMCsetScoreZone{width=1.5em,height=1.5ex,depth=.5ex,position=margins}

width, height, depthの各変数は得点表記領域の寸法を表します。

positionの値は、none, question, margin, marginsのいずれかです。

separateanswersheetオプションを使用する場合

以下のコマンドを\begin{document}コマンドから\onecopyコマンドまでの間に入力してください:

\AMCsetScoreZoneAnswerSheet{width=1.5em,height=1.5ex,depth=.5ex,position=question}

width, height, depthの各変数は得点表記記入領域の寸法を表します。

positionの値は、none, question, margin, marginsのいずれかです。

[警告]警告

margins オプションはAMC-TXTでは動作しません。

これらのコマンドを、試験問題の印刷に入力してはいけません。

設問のグループ

設問をグループに入れることにより、グループ内の設問をシャフルして試験問題の実体ごとに順序を変えることができます。それぞれの設問グループは通常文字によるグループ名をもたなければなりません。

設問を一つ一つグループに入れるには、次の例のようにします。

\element{マイグループ}{
  \begin{question}{簡単}
    では、1足す1はいくつですか?
    \begin{choiceshoriz}
      \correctchoice{2}
      \wrongchoice{0}
      \wrongchoice{3}
    \end{choiceshoriz}
  \end{question}
}
[重要]重要

elementを用いたグループの構築は1回しか行ってはいけません。そのため、これらは、試験問題の実体ごとに内容を繰り返すonecopyコマンドの前に置かなければなりません。

最後に、グループの内容はinsertgroupコマンドを用いて、

\insertgroup{mygroup}

のようにして試験問題用紙に出力されます。

グループの出力方法はsetgroupmodeコマンド(グループの作成後、onecopyの前に1度だけ実行)で設定するグループモードによって制御されます:

\setgroupmode{mygroup}{XXX}

XXXは以下のいずれかです:

fixed

このモードでは、出力のたびに、グループの要素を先頭から取ります。

cyclic

そのグループで前回使用した要素の次から要素を取り、必要ならリサイクルします。

withreplacement

グループを使用する前にシャフルする以外はfixedと同様です。

withoutreplacement

cyclicと同様ですが、リサイクルでグループの先頭に戻るときにシャフルします。

次に作成するグループ(グループは最初のelementで作成されます)のデフォルトのグループモードは、次のコマンドで設定できます:

\setdefaultgroupmode{XXX}

モードをまったく指定していない場合は、fixedモードが使用されます。

グループを構築すると、shufflegroupコマンドを次のように用いてグループ内の設問をシャフルすることができます:

\shufflegroup{マイグループ}

しかし、shufflegroupコマンドは、グループモードを適切に使用することでいつでも置き換えられます。

[警告]警告

AMC 1.2.2014.111201より前のバージョンでレイアウトした試験問題を再利用し、デフォルト(fixed)以外のモードを選択する場合は、\shufflegroupコマンドを忘れずに削除してください。

設問グループは、次のようなコマンドによって、より細かく操作することができます:

  • \insertgroup[n]{マイグループ}は、(オプションのパラメータnを使用することにより)グループ内の最初のn要素だけ出力します。

  • \insertgroupfrom[n]{グループ名}{i}\insertgroup[n]{groupname}と同じですが、i番目(先頭は0番目)の要素から開始します。

  • \cleargroup{マイグループ}は、グループの中身を空にします。

  • \copygroup{グループA}{グループB}は、グループAの全要素をグループBの最後にコピーします。オプション引数nを用いると、最初のn要素だけコピーされます: \copygroup[n]{グループA}{グループB}

これらのコマンドを用いれば、例えば次のコードにより、GAグループからランダムに4個、GBグループからランダムに5個、GOグループから全設問を取り出して、それらをシャフルするということができます(onecopyコマンドの引数内部で使用します。また、GA, GB, allのグループモードはwithoutreplacementまたはwithreplacementとします):

\cleargroup{all}
\copygroup[4]{GA}{all}
\copygroup[5]{GB}{all}
\copygroup{GO}{all}
\insertgroup{all}
  • \copygroupfrom[n]{groupA}{groupB}{i}\copygroup[n]{groupA}{groupB}と同じですが、i番目(先頭は0番目)の要素から開始します。

用紙サイズと余白

LaTeXのautomultiplechoiceパッケージはgeometryを用いて余白とページレイアウトを設定しています。その設定を上書きするには、\begin{document}の直前で\geometryコマンドを用いてください。詳細はgeometryパッケージのドキュメントを参照してください。AMCが設定する初期値は次のとおりです:

\geometry{hmargin=3cm,headheight=2cm,headsep=.3cm,footskip=1cm,top=3.5cm,bottom=2.5cm}

スペースを広げるために余白を縮めるときは、以下に注意してください:

  • 四隅のマーカーは完全に印刷されていなければなりません(プリンタの印刷可能範囲により欠けてしまう可能性があります)。

  • 四隅のマーカーはスキャン画像上で完全に見えなければなりません(マーカーが用紙の端ぎりぎりのとき、用紙がずれたり傾いたりすると、画像からはみ出してしまいます)。

\geometryコマンドの引数リストの一つのオプションとして用紙サイズを設定することもできます。可能な値は、a4papera5papera6paperb4paperb5paperansibpaperansicpaperansidpaperletterpaperexecutivepaperlegalpaperなどです。

用紙サイズが小さいときは、(+1/1/53+のような)目視用の用紙IDの位置を変更したい場合があるかもしれません。これは次のような形式で、\AMCidsPositionコマンドを用いることでできます:

\AMCidsPosition{pos=p,width=w,height=h}

ここで、pnonetopsideのいずれかで、whはIDを含む(見えない)ボックスの寸法です。デフォルト値は次の値です:

\AMCidsPosition{pos=side,width=4cm,height=3ex}

最後に、A5用紙のための設定例を示します:

\geometry{a5paper,hmargin=1.6cm,top=2.5cm}
\AMCidsPosition{pos=top}
[警告]警告

pgfpagesパッケージや、他のレイアウト用パッケージをロードしないでください。

マーク用ボックスの外見スタイル

\AMCboxStyleコマンド(旧称の\AMCboxDimensionsも使用可能です)により、マーク用ボックスの寸法を変えることができます。

デフォルト値:

\AMCboxStyle{shape=square,size=2.5ex,down=.4ex,rule=.5pt,outsidesep=.1em,color=black}
  • shapeはボックスの形状です。squareとすれば四角形になり、ovalとすれば円または長円になります。ovalを使用するにはLaTeXのtikzパッケージをロードする必要があることに注意してください。

  • widthはボックスの幅です。

  • heightはボックスの高さです。

  • sizeはボックスのサイズ(widthheight)です。

  • ruleはボックスの枠の太さです。

  • downはボックスをどれだけ下に下げるかを制御します。

  • outsidesepは、outsideboxオプションを選択したときに、ボックスとその外に印刷する文字との間隔です(パッケージオプション参照)。

  • cross=true正答を表すボックス(模範解答用紙で表示されます)を、黒の塗りつぶしではなくクロス記号で示します。

  • crossrule=1.5ptクロス記号の太さです。

  • color=colはボックスを描画する色を指定します。colxcolorパッケージで認識できる表記でなければなりません。例えばredのような名前も使用できます。また次のように好みの色を定義することもできます。

    \definecolor{mylightgreen}{rgb}{0.67,0.88,0.5}
    \AMCboxStyle{color=mylightgreen}

小さめのボックスを作るには、例えば次のようなコマンドを使ってください:

\AMCboxStyle{size=1.7ex,down=.2ex}

パッケージのseparateanswersheetオプションを使用しているときは、ボックスのラベルをカスタマイズすることもできます。デフォルトの動作は大文字アルファベットによるラベルですが、digitsオプションを用いると数字になります。独自のラベルを用いるには、\AMCchoiceLabelコマンドを再定義する必要があります。このコマンドは、選択肢を数えるカウンタ名を引数にとります。例えば以下のコードにより、ボックスのラベルにアルファベットの小文字を用いるようになります:

\def\AMCchoiceLabel#1{\alph{#1}}

別の例として、arabxetexパッケージを使用している場合、以下のコードが便利かもしれません:

\def\AMCchoiceLabel#1{\textLR{\Alph{#1}}}

ボックス内ラベルのスタイルも、次の例のように\AMCchoiceLabelFormatコマンドを再定義して変更することができます(ラベルを太字にしたいとします):

\def\AMCchoiceLabelFormat#1{\textbf{#1}}

ボックス外ラベルのスタイルも、次の例のように\AMCoutsideLabelFormatコマンドを再定義して変更することができます(ラベルを太字にしたいとします):

\def\AMCoutsideLabelFormat#1{\textbf{#1}}
[注記]注記

正答のボックスにマークを表示するかどうかのスイッチは\AMC@correcです。\begin{document}の後に、これをtrueに設定するコマンドを定義できます。

\makeatletter
\def\AMCforcecorrect{\AMC@correctrue}
\makeatother

そして、特定の設問で使用します(効果がその設問のみに限定されるよう、波括弧で囲みます):

{\AMCforcecorrect\begin{questionmult}{test}\QuestionIndicative
   .....
 \end{questionmult}
}

AMCがこの設問の得点を計算しないよう(採点基準を0点とするか\QuestionIndicativeを用いて)設定するべきです。

設問の外見スタイル

LaTeXのAMCbeginQuestionコマンドを再定義することにより、各設問の外見を変更することができます。デフォルトの定義は次のとおりです:

\def\AMCbeginQuestion#1#2{\par\noindent{\bf Question #1} #2\hspace*{1em}}

このコマンドに与えられる最初のパラメータは表示する設問の番号です。2番目は複数選択問題の場合に\multiSymboleを含み、それ以外の場合は空です。\multiSymboleコマンドは複数選択問題を他と区別できるようにするためのものであり、これも変更することができます。デフォルトではトランプのクラブ記号です。

\def\multiSymbole{$\clubsuit$}
[警告]警告

指名試験問題用紙(指名試験問題用紙参照)を使用する場合は、プリアンブルで次のように新しいコマンドを設定し、

\def\Iswitch{\def\AMCbeginQuestion##1##2{}\AMCquestionNumberfalse}

必要な箇所で使用します(効果の範囲を限定するため、波括弧内に記述することを忘れないでください):

{\Iswitch
 \begin{question}{Number}
   大きいものを選びなさい。
   \begin{choiceshoriz}[o]
     \wrongchoice{200}\wrongchoice{2}\wrongchoice{20}\wrongchoice{200}\correctchoice{600}
   \end{choiceshoriz}
 \end{question}
}

選択肢の外見も、choiceschoiceshorizのかわりにchoicescustomを用いれば、次の三つのLaTeXマクロを再定義して同様に変更できます:

\def\AMCbeginAnswer{}
\def\AMCendAnswer{}
\def\AMCanswer#1#2{#1 #2}
[重要]重要

\onecopyコマンド内では、#は2重にしてください。

\def\AMCanswer##1##2{##1  ##2}
\def\AMCbeginQuestion##1##2{}

以下の寸法を再定義すれば間隔を変更することもできます(これはデフォルト値です):

\AMCinterIrep=0pt
\AMCinterBrep=.5ex
\AMCinterIquest=0pt
\AMCinterBquest=3ex
\AMCpostOquest=7mm
\setlength{\AMChorizAnswerSep}{3em plus 4em}
\setlength{\AMChorizBoxSep}{1em}

これらの寸法は、標準モード用(I)とボックスモード用(B)(\AMCBoxedAnswersの使用時やboxパッケージオプション使用時)での設問間(quest)と選択肢間(rep)の垂直スペース、および記述式設問後のスペースです。最後の二つの長さは choicescustom 環境内で使用されます。

レイアウト

マージン

マージンはほとんどのプリンタで正しく印刷できるように選んであります。変更するには、LaTeXのgeometryパッケージにあるgeometryコマンドを使用することができます。例えば、トップマージンを減らすには、デフォルトの3.5cmの代わりに、\begin{document}の直前で\geometry{top=3cm}とします。

ページ番号

AMCは各試験問題のページ番号を自動的に取り扱います。各試験問題の末尾や問題用紙と答案用紙の区切りなどに\AMCaddpagesto{integer}コマンドを置くと、いくつか空ページが挿入され、その次のページ番号が各試験問題で同一になります。

別紙答案用紙方式

separateanswersheetオプション(「別紙答案用紙を用いた例」参照)で生成される別紙答案用紙のレイアウトを変更することも可能です。

  1. マーク用ボックスの水平間隔を変更したり、設問間の垂直間隔を変更したりするだけならば、以下の寸法を再定義するだけです:

    \AMCformHSpace=.3em
    \AMCformVSpace=1.2ex
    
  2. 表示設定をもっと細かく変更したい場合は、各設問と選択肢の開始に使われるコマンドを再定義することができます:

    \def\AMCformBeforeQuestion{\vspace{\AMCformVSpace}\par}
    \def\AMCformQuestion#1{{\bf 問 #1:} }
    \def\AMCformAnswer#1{\hspace{\AMCformHSpace} #1}
    

これらの定義は、LaTeXファイルの\begin{document}の直後に挿入しなければなりません。

受験番号取得

受験番号の取得はLaTeXの\AMCcodeGridInt[options]{key}{n}コマンドを使用して、受験者に答案用紙上に自分の受験番号を記入してもらうことで、容易に行うことができます。このコマンドの二つの引数は、設問キー(識別名)と、受験番号に用いる桁数nです。例えば次のようなヘッダーを用いることができます:

{\setlength{\parindent}{0pt}\hspace*{\fill}\AMCcodeGridInt{受験番号}{8}\hspace*{\fill}
\begin{minipage}[b]{6.5cm}
$\longleftarrow{}$\hspace{0pt plus 1cm} 受験番号を以下にマークし、その下に氏名を記入してください。

\vspace{3ex}

\hfill\namefield{\fbox{    
    \begin{minipage}{.9\linewidth}
      氏名:
      
      \vspace*{.5cm}\dotfill
      
      \vspace*{.5cm}\dotfill
      \vspace*{1mm}
    \end{minipage}
  }}\hfill\vspace{5ex}\end{minipage}\hspace*{\fill}

}

separateanswersheetオプションを用いている場合は、 \AMCcodeGridIntコマンドは\AMCformBeginコマンドの後に置く必要があります。

記入欄は、長さ \AMCcodeHspace\AMCcodeVspace を変更することにより調整することができます。それぞれ、ボックス間の水平および垂直の間隔です。デフォルト値は次のように設定されています:

\AMCcodeHspace=.5em
\AMCcodeVspace=.5em

\AMCcodeGrid[options]{key}{description} コマンドは、より複雑な構造の受験番号を扱いたいときに使用できます。description はカンマ区切りの候補文字集合のリストです。一例として、AからEの英字1文字の後に3桁の数字で構成されるような受験番号は、\AMCcodeGrid{client}{ABCDE,0123456789,0123456789,0123456789} により扱うことができます。

\AMCcodeGrid\AMCcodeGridInt の二つのコマンドは、以下のオプション(options 引数にカンマ区切りで指定)を認識します:

vertical=bool

booltruefalse にすると、指定した方向を使用します(デフォルトは true です)。

v

vertical=true の別名です。

h

vertical=false の別名です。

top

は、各カラムの上端を垂直方向に揃えます。

記述式設問

試験問題に記述式設問を加えたい場合があるかもしれません。一つの方法は、そういった設問のマーク用ボックスを採点者用に予約しておくことです。試験実施後、記入された答案を読んで、採点者が評価に該当するボックスにマークをつけます。そして答案をスキャンしてAMCで採点すれば、その点数を得点に組み入れることができます。

\begin{question}{記述}
  \emph{インフレーション}の定義を述べよ。
  \AMCOpen{lines=5}{\wrongchoice[W]{誤}\scoring{0}\wrongchoice[P]{部}\scoring{1}\correctchoice[C]{正}\scoring{2}}
\end{question}

この例では、採点用にボックスが3個作成されます。最初の(誤りの「誤」のラベルのついた)ボックスをマークすると、受験者は0点を獲得します。2番目の(部分点の「部」のラベルのついた)ボックスをマークすると、受験者は1点を獲得します。3番目の(正解の「正」のラベルのついた)ボックスをマークすると、受験者は2点を獲得します。

\AMCOpenの最初の引数はカンマで区切ったオプションです。使用できるオプションは次のとおりです:

lineup=bool

trueなら、解答欄と採点用ボックスを同じ行に並べます。false(デフォルト)なら、解答欄を枠で囲み、採点用ボックスの下に配置します。

lineuptext=text

lineup=trueのとき、このテキストと解答欄を同じ行に並べます。

lines=num

解答の行数を設定します。デフォルト値は1です。

lineheight=dim

各行の高さを設定します。デフォルト値は1cmです。

dots=bool

true(デフォルト)なら、各行に点線を引きます。

contentcommand=cmdname

解答領域の内容をカスタマイズするにはこのオプションを使用してください。内容を生成するための\cmdnameコマンドを定義する必要があります。

hspace=dim

採点用ボックスの間隔を設定します。

backgroundcol=color

採点領域の背景色を設定します。

foregroundcol=color

採点用ボックスの枠の色を設定します。

scan=bool

falseなら、採点用ボックスをスキャンしません(これは、この設問に限り手動でマーク認識することにして、受験者がボックスに何を記入しても無視したい場合に便利です)。デフォルトはtrueです。

annotate=bool

false(デフォルト)なら、答案に採点記入する際、ボックスに記号をつけません(素点のみ記入されます)。

question=text

採点者が設問を識別しやすくするための短いテキストを設定します。このテキストは、別紙答案用紙を用いる場合のみ、採点用ボックスの前に記載されます。

questionのみ指定すると、デフォルトで設問の識別名が表示されます。

answer=text

模範解答用紙の解答欄に記入される短いテキストを設定します。

[ヒント]ヒント

onecopyコマンドの外\saveboxコマンドを使用すると、改行を含む長いテキストを表示できます。

       \newsavebox{\correcbox}
        \savebox{\correcbox}{\parbox{5cm}{\color{red}{ここで改行\\あるいは\\ここで...}}}
       

ボックスの中身を呼び出すには次のようにします:

        \AMCOpen{lines=4,lineheight=0.15cm, answer= \usebox{\correcbox}}{問題}
       
width=dim

lineup=falseのときの、解答欄を囲む枠の幅を設定します。デフォルト値は.95\linewidthです。

framerule=dim

解答欄を囲む枠の線幅を設定します。

framerulecol=color

解答欄を囲む枠の色を設定します。

boxmargin=dim

採点用ボックスの周囲の余白を設定します。

boxframerule=dim

採点用ボックスの周囲枠の線幅を設定します。

boxframerulecol=color

採点用ボックスの周囲枠の色を設定します。

これらのパラメータの(試験全体での)デフォルト値は、次のようにして\AMCopenOptsコマンドで設定できます

\AMCopenOpts{boxframerule=2pt,boxframerulecol=red}

さらに、\AMCotextReservedコマンドを次のように再定義すると、受験者にマークしないように指示するテキストを採点領域に書くことができます:

\def\AMCotextReserved{\emph{この欄には記入しないこと}}

別紙答案用紙を用いている場合は、各設問に付け加えるテキストを次のように定義できます:

\def\AMCotextGoto{\par{\bf\emph{解答は別紙答案用紙に記入してください。}}}
[ヒント]ヒント

ボックス数が多く一定幅で改行させたい場合は、次のヒント(\parbox)が使えます。

\AMCOpen{lines=6}{
          \hbox{\parbox{8.5cm}{
                           \correctchoice[1]{1}\scoring{b=1}
                           \correctchoice[2]{2}\scoring{b=2}
                           \correctchoice[3]{3}\scoring{b=3}
                           \correctchoice[4]{4}\scoring{b=4}
                           \correctchoice[5]{5}\scoring{b=5}
                           \correctchoice[6]{6}\scoring{b=6}
                           \correctchoice[7]{7}\scoring{b=7}
                           \correctchoice[8]{8}\scoring{b=8}
                           \correctchoice[9]{9}\scoring{b=9}
                           \correctchoice[10]{10}\scoring{b=10}
                           \wrongchoice[F]{F}\scoring{b=0}
                    }}
            }
             

1文字選択肢

選択肢の記述に長い文章は必要でなく1文字で十分の場合があります。別紙答案用紙を用いる場合、問題用紙と答案用紙の両方にボックスを表示するのはとても面倒です。そのような場合、choices環境のかわりに\AMCBoxOnlyコマンドを使用してください:

\begin{question}{arm}
  図中の\textbf{腕}を示す文字はどれですか?
  \AMCBoxOnly{ordered=true}{\wrongchoice[A]{}\correctchoice[B]{}%
    \wrongchoice[C]{}\wrongchoice[D]{}}
\end{question}

\AMCBoxOnlyの最初の引数はカンマで区切ったオプションです。使用できるオプションは次のとおりです:

help=text

別紙答案用紙のボックスの前にリマインダーのテキストを表示します。

ordered=bool

true(デフォルト値はfalse)なら、選択肢はシャフルされません。

シャフルパラメータの選択

シャフルの生成に用いる乱数生成器のシードは、以下のコマンドで変更することができます(documentの最初の方で、少なくともonecopyコマンドの外で使わなければなりません):

\AMCrandomseed{1527384}

割り当てた値(1から4194303までの中から選びます)が変更されると、シャフルが変わります。もちろん、試験問題用紙を印刷した後は、この値を変更してはいけません。

[注記]注記

値はxyファイルに(\rngstate{1}{1515}のように)記録されます。デフォルト値は1515です。

セクション分けと別紙答案用紙

別紙答案用紙上にもセクション分けが見えるようにするには、\section\subsectionの代わりに、\AMCsection\AMCsubsectionを使用してください。(番号なしセクション用に\AMCsection*\AMCsubsection*も定義されています)

試験問題内での参照

LaTeXのコマンド\label\ref\pagerefコマンドを設問や選択肢で用いると、試験問題の実体化ごとに同じ引数で呼び出され、毎回参照する番号が変わるので、問題が発生します。これを解決するには、それぞれ\AMClabel\AMCref\AMCpagerefを用いてください。これらは、\label\ref\pagerefを呼び出す前に、引数に実体の番号を付加します。

[注記]注記

バージョン1.2.2015.102901以降では\AMCqlabelではなく\AMClabelを使ってください。旧コマンドは以前のtexファイルとの互換性のために残しています。

また、各実体化の最初に、カウンタを0にリセットする必要があります。一例として、別の用紙にまとめて配置された図への参照を行いたいとき、次のように書けます:

\element{動物}{
  \begin{figure}[p]
    \centering
    \includegraphics[width=.6\linewidth]{tiger}
    \caption{とある動物}
    \AMClabel{虎}
  \end{figure}

  \begin{question}{tiger}
    図\AMCref{虎}(\AMCpageref{tiger}ページ)の動物は何ですか?
    \begin{choices}
      \correctchoice{トラ}
      \wrongchoice{キリン}
      \wrongchoice{ゾウ}
      \wrongchoice{ネコ}
    \end{choices}
  \end{question}
}

そして重要なのは、\onecopyコマンドの直後に

\setcounter{figure}{0}

を挿入して、図の番号がどの実体でも1から始まるようにすることです。これを行わないと、実体ごとに番号が増加してしまい、意図した動作ではなくなってしまいます。

cleverefパッケージの使用

このパッケージは、設問番号、設問ページ番号、ラベルのページ番号を昇順にソートします(ドキュメントhttp://mirrors.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)。

[警告]警告

このパッケージは、automuliplechoiceパッケージのにロードしなければなりません。

このパッケージを使用するために新しいコマンド\AMCstudentlabelを導入しました。

\cref{\AMCstudentlabel{led},\AMCstudentlabel{lamp},\AMCstudentlabel{moter}}

led, lamp, moterは、設問を参照するために \AMClabel{led}, \AMClabel{lamp}, \AMClabel{moter} で作成されたラベルです。これらの設問の番号はコンパイル時に自動的にソートされます。

AMCが挿入するテキストのカスタマイズ

以下のカスタマイズには\AMCtextを使用してください:

  • \AMCtext{none}{sentence}は、completemultiオプションを使用する場合の「該当なし。」(日本語でのデフォルトテキスト)を、指定したsentenceに置換します。

  • \AMCtext{corrected}{title}は、模範解答用紙に表示される「模範解答」(日本語でのデフォルトテキスト)を、指定したtitleに置換します。

  • \AMCtext{catalog}{title}は、catalogオプションで生成される設問カタログに表示される「設問カタログ」(日本語でのデフォルトテキスト)を、指定したtitleに置換します。

  • \AMCtext{explain}{title}は、explainコマンドのために生成される解説の前に表示する「解説」(日本語でのデフォルトテキスト)を、指定したtitleに置換します。

    このコマンドのデフォルトオプションは次のとおりです:

    \AMCtext{explain}{\textit{\textbf{解説: }}}
  • 同様に、以下のようなコマンドも検討できます(2番目の引数は日本語でのデフォルトテキストです):

    \AMCtext{draft}{ドラフト}
    \AMCtext{message}{試験の実施には、auto-multiple-choiceでコンパイルされた文書を印刷してください。}
  • \AMCsetFoot{text}はフッタに表示するテキストを設定します。例えば、ページ番号を表示するには、\AMCsetFoot{\thepage}のように使用します。

バイナリコード

AMCは各試験問題とページの番号をバイナリコードを使って識別します。

  • 1行目 : (デフォルトで)12桁 : 試験問題番号の最大値 = 2^12-1 = 4,095

  • 2行目 : (デフォルトで)最初の6桁 : 1試験問題あたりの最大ページ数 = 2^6-1 = 63

  • 2行目 : (デフォルトで)次の6桁 : チェックコード

試験問題やページの数を増やすには、\AMC@NCBetud, \AMC@NCBpage, \AMC@NCBcheckのデフォルト値を変更してください。

プリアンブルに以下のコマンドを記述します(これらはデフォルト値)。

\makeatletter
\def\AMC@NCBetud{12}
\def\AMC@NCBpage{6}
\def\AMC@NCBcheck{6}
\makeatother

AMC用のオプション

ソースファイルのヘッダ(%で始まる先頭行)に、AMCに渡すオプションをいくつか付加することができます:

%%AMC:preprocess_command=commandname

ソースファイルを処理するLaTeXを呼ぶ前に、commandnameコマンドを実行させます。このコマンドはプロジェクトディレクトリ内で実行され、ソースファイルのコピーの名前が引数として渡されます。これは単なるコピーなので、commandnameがファイルの内容を変更しても問題ありません。

%%AMC:latex_engine=engine

ユーザ設定されたLaTeXエンジンにかかわらず、このファイルのコンパイルに用いるエンジンを指定します。

乱数を用いた数学設問

fpパッケージの使用

automultiplechoiceの前に

\usepackage{fp}

としてfpパッケージを使用すると、乱数データを用いた練習問題を作ることができます。fpパッケージのドキュメントはhttp://mirrors.ctan.org/macros/latex/contrib/fp/READMEにあります。以下では単純な例から見てみます。

\begin{question}{加算}
  \FPeval\VQa{trunc(1+random*8,0)}  1
  \FPeval\VQb{trunc(4+random*5,0)}
  \FPeval\VQsomme{clip(VQa+VQb)}  2
  \FPeval\VQnonA{clip(VQa+VQb-1)}  3
  \FPeval\VQnonB{clip(VQa*VQb)}
  \FPeval\VQnonC{clip(VQa-VQb)}

  \VQa{} と \VQb{} の和はいくつですか?
  \begin{choiceshoriz}
    \correctchoice{\VQsomme}
    \wrongchoice{\VQnonA}
    \wrongchoice{\VQnonB}
    \wrongchoice{\VQnonC}
  \end{choiceshoriz}
\end{question}

\FPevalコマンドは計算を実行するのに使います:

1

randomは[0,1]の実数を返すので、このコマンドによりVQaには1から8までの乱数の整数値が設定されます。次の行では、VQbに4から8までの乱数の整数値が設定されます。

2

正しい値をVQsomme変数に入れています。

3

誤った値をVQnonA、VQnonB、VQnonCに入れています。

変数名のVQは他のLaTeXコマンドと干渉しないように選んであります。

[注記]注記

乱数シードは次のように設定できます:

\FPseed=integer

integerは固定値でなければなりません。日付や時刻から計算してはいけません。

区間の選択

automultiplechoiceパッケージは、さらに、この種の設問の作成が容易になるように\AMCIntervalsコマンドを定義しています。以下に例を示します:

\begin{question}{inf-expo-indep}
  \FPeval\VQa{trunc(2 + random * 4,0)}
  \FPeval\VQb{trunc(6 + random * 5,0)}
  \FPeval\VQr{VQa/(VQa+VQb)}

  $X$と$Y$を互いに独立な指数分布に従う乱数変数とし、それぞれのパラメータを\VQa{}と\VQb{}とします。確率 $\mathbb{P}[X<Y]$ は、次のどの区間に属しますか?

  \begin{multicols}{5}
    \begin{choices}[o]
      \AMCIntervals{\VQr}{0}{1}{0.1}  1
    \end{choices}
  \end{multicols}
\end{question}

(訳注: \mathbbを使用するにはamsfontsパッケージが必要です。)

1

この行は、各区間 [0,0.1[ [0.1,0.2[ ... [0.9,1[ に対応した10個の選択肢を挿入し、正解の選択肢は VQr を含んだ区間であることを指示します。\AMCIntervalsの引数は次のとおりです:

  1. 正解の値

  2. 最初の区間の左端の値

  3. 最後の区間の右端の値

  4. 各区間の長さ

区間の書式は、ローカルな(例えば、よくあるのは [a,b[ ではなく [a,b) と書くなどの)慣行に合わせて、\AMCIntervalFormatコマンドを再定義して変更できます。オリジナルは

\def\AMCIntervalFormat#1#2{[#1,\,#2[}

と定義されています。

数値での解答

\AMCnumericChoicesコマンドを用いれば、次の例のように、受験者に数値での解答をマークで記入させることもできます:

\begin{questionmultx}{sqrt}
  \FPeval\VQa{trunc(5+random*15,0)}
  \FPeval\VQs{VQa^0.5}
  $\sqrt{\VQa}$ を計算して、小数点以下2桁で丸めよ。

  \AMCnumericChoices{\VQs}{digits=3,decimals=2,sign=true,
                 borderwidth=0pt,backgroundcol=lightgray,approx=5}
\end{questionmultx}

questionmultx環境に注意してください。この設問は複数のボックスをマークする必要があるので複数選択問題にしなければなりませんが、複数の正解があると言うことはできません。なので複数選択問題の記号を表示しません。

\AMCnumericChoicesコマンドの2番目の引数で用いられるオプションは次のとおりです(booltruefalseで、colorxcolorで認識できる色でなければなりません):

digits=num

は、必要な桁数(デフォルトは3)を指定します。

decimals=num

は、小数点以下の桁数(デフォルトは0)を指定します。

base=num

は、数字の基数(進法)(デフォルトは10)を指定します。

significant=bool

trueなら、\AMCnumericChoicesの最初の引数のうち上位桁のみ解答させます。例えば、\AMCnumericChoices{56945.23}{digits=2,significant=true}の正解は 57 となります。

exponent=num

指数をnum桁とした、科学的記数法モードにします。

nozero=bool

全桁から選択肢0を除去します。\AMCnumericChoicesを用いて小さい正の値(<10)を記入するのに便利かもしれません。

sign=bool

は、符号の有無(デフォルトはtrue)を指定します。

exposign=bool

指数の符号を同様に指定します。

strict=bool

trueなら、符号とすべての桁のボックスがマークされなければなりません。falseなら、マークしていない桁は0として扱います。デフォルトはfalseです。

vertical=bool

trueなら、1桁分のボックスを縦に配置します。false(デフォルト)なら、1桁分のボックスを横に配置します。

expovertical=bool

trueなら、仮数を指数のに配置します。falseなら、仮数を指数のに配置します。

reverse=bool

trueなら、verticalモードにおいて、大きい数字を上に配置します(デフォルトはtrue)。

vhead=bool

trueなら、verticalモードにおいて、各桁の上部に\AMCntextVHeadコマンドを使用して作成されるヘッダーを置きます。\AMCntextVHeadはデフォルトで次のように定義されています。

\def\AMCntextVHead#1{\emph{b#1}}

このデフォルト値は、2進数の桁に番号をつけるのに便利です。

デフォルト値はfalseです。

hspace=space

は、ボックス間の水平間隔(デフォルトは.5em)を設定します。

vspace=space

は、ボックス間の垂直間隔(デフォルトは1ex)を設定します。

borderwidth=space

は、全ボックスを囲む枠線の太さ(デフォルトは1mm)を設定します。

bordercol=color

は、枠線の色(デフォルトはlightgray)を設定します。

backgroundcol=color

は、背景色(デフォルトはwhite)を設定します。

Tsign=text

は、符号をマークするボックスの上に表示するテキスト(デフォルトは空で、\def\AMCntextSign{text}で再定義も可能)を設定します。

Tpoint=text

は、小数点のテキストを設定します。デフォルトは\raisebox{1ex}{\bf .}で、\def\AMCdecimalPoint{text}で再定義も可能です。

Texponent=text

は、仮数と指数を分けるテキストを設定します。デフォルトは$\times10$\textasciicircumで、\def\AMCexponent{text}でも再定義できます。

scoring=bool

trueなら、AMCにこの設問の採点基準を指定します。デフォルトはtrueです。

scoreexact=num

は、正解に対する素点(デフォルトは2)を指定します。

exact=num

は、正解として認めてscoreexactの得点を与える誤差(正解の整数値(小数点を除いた値)との差)(デフォルトは0)を設定します。

scoreapprox=num

は、近似解に対する素点(デフォルトは1)を指定します。

approx=num

は、近似解として認めてscoreapproxの得点を与える誤差(正解の整数値(小数点を取り除いた値)との差)(デフォルトは0)を設定します。

[警告]警告

AMCはapproxとの差分をとり比較する前に、すべての数字を(単純に小数点を取り除いて)整数に変換します。一例として、decimals=2のとき、正答が3.14で答案が3.2の場合、整数の差分は 320-314=6 となるので、approxが6以上のときに限って、受験者はscoreapproxを得ます。

scorewrong=num

は、誤答に対する素点(デフォルトは0)を指定します。

\AMCnumericOptsコマンドを使えば、これらのパラメータに対して、(試験全体用の)デフォルト値を別の値に設定することができます:

\AMCnumericOpts{scoreexact=3,borderwidth=2pt}

さらに、separateanswersheetオプションにより別紙答案用紙を使用する場合、\AMCntextGotoコマンドを再定義することにより、問題用紙側の\AMCnumericChoicesを使用する各設問の最後に付加するテキストを設定することができます:

\def\AMCntextGoto{\par{\bf\emph{解答は別紙答案用紙に記入してください。}}}

pgf/tikzパッケージの使用

このパッケージは、automuliplechoiceパッケージのにロードしなければなりません。

LaTeXのpgf/tikzパッケージ(http://www.ctan.org/tex-archive/graphics/pgf/baseを参照)は数学用関数などを提供するもので、

\usepackage{tikz}

でロードされます。

latexを走らせて試験問題をコンパイルするたびに常に同じ結果が得られるよう、最初に乱数シードを設定しなければなりません:

\pgfmathsetseed{2056}
単純な計算

これは単純な計算を用いた例です

\begin{question}{inverse}
  \pgfmathrandominteger{\x}{1}{50}

  $x=\x$ の逆数はいくつですか?

  \begin{choices}
    \correctchoice{\pgfmathparse{1/\x}\pgfmathresult }
    \wrongchoice{\pgfmathparse{1/(\x +1))}\pgfmathresult}
    \wrongchoice{\pgfmathparse{cos(\x)} \pgfmathresult}
    \wrongchoice{\pgfmathparse{\x^(-0.5)}\pgfmathresult}
  \end{choices}
\end{question}

\pgfmathparseコマンドが計算を行い、\pgfmathresultが結果を出力します。

出力の書式は、次の例(小数点以下3桁、小数点としてカンマを使用)に示すように、\pgfmathprintnumberを用いて調整することができます。

\begin{question}{inverse3}
  \pgfmathrandominteger{\x}{1}{50}
  \pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=3,use comma}
  $x=\pgfmathprintnumber{\x}$ の逆数はいくつですか?

  \begin{choices}
    \correctchoice{\pgfmathparse{1/\x}\pgfmathprintnumber{\pgfmathresult}}
    \wrongchoice{\pgfmathparse{1/(\x +1))} \pgfmathprintnumber{\pgfmathresult}}
    \wrongchoice{\pgfmathparse{cos(\x)} \pgfmathprintnumber{\pgfmathresult}}
    \wrongchoice{\pgfmathparse{\x^(-0.5)} \pgfmathprintnumber{\pgfmathresult}}
  \end{choices}
\end{question}
[注記]注記

\AMCIntervalsコマンドと\AMCnumericChoicesコマンドを使用することもできます(「区間の選択」および「数値での解答」参照)。

グラフ

tikzパッケージはグラフを(ランダムなものもそうでないものも)作成することもできます。

\begin{questionmult}{graph}
  以下にグラフが示された三つの関数を考えます:
  \pgfmathrandominteger{\a}{2}{4}
  \begin{center}
    \begin{tikzpicture}[domain=0:4]
      \draw[very thin,color=gray] (-0.1,-4.1) grid (3.9,3.9);
      \draw[->] (-0.2,0) -- (4.2,0) node[right] {$x$};
      \draw[->] (0,-4.2) -- (0,4.2) node[above] {$f(x)$};
      \draw[color=red] plot (\x,{(1+\a/4)*\x-\a}) node[right] {$f_{1} (x)$};
      \draw[color=blue] plot (\x,{\a*sin(\x r)}) node[right] {$f_{2}(x)$};
      \draw[color=orange] plot (\x,{\a*cos(\x r)}) node[right] {$f_{3}(x)$};
    \end{tikzpicture}
  \end{center}
  以下のうち正しいものはどれですか?
  \begin{choices}
    \pgfmathrandominteger{\x0}{2}{4}
    \correctchoice{$f_{2}(\x0)$=\pgfmathparse{\a*sin(\x0 r)} \pgfmathprintnumber{\pgfmathresult}.}
    \correctchoice{$f_{3}(\x0)$=\pgfmathparse{\a*cos(\x0 r)} \pgfmathprintnumber{\pgfmathresult}.}
    \wrongchoice{関数 $f_{1}(x)$ は線形関数である。}
  \end{choices}
\end{questionmult}

きれいなグラフを作成するには、pgfplotsも有用です。

pgfmathでは精度が有限なので、算術オーバーフローを考慮に入れる必要があるかもしれません。tikzpgfplotsは、バックエンドにgnuplotを用いることで、この問題を克服しています。これには、gnuplotをシステムにインストールし、LaTeXの--shell-escapeオプションを用いる必要があります。このためには、AMCの設定ウィンドウで、プロジェクト用のLaTeXエンジンとしてpdflatex --shell-escapeを設定してください。

LuaLaTeXの使用

lualatexコマンドを用いれば、LaTeX文書内でLUA言語を使用できます。これを用いる場合は、文書はUTF-8でエンコードされている必要があり、inputencパッケージはロードできません。これに関する情報はhttp://www.luatex.org/documentation.htmlを参照してください。

LUAのコマンドは、\directluaの引数として与えます。最も便利なLUA関数はtex.printで、結果をLaTeXに戻して出力します。

これも同じように、乱数を用いる場合は、コンパイルごとに同じ結果が得られるように常に乱数シードを固定してください:

\directlua{math.randomseed (2048)}

これはとても単純なソースファイルです:

\documentclass[a4paper]{article}
%\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[box,completemulti,lang=JA]{automultiplechoice}
\begin{document}

\onecopy{10}{

%%% head

\noindent{\bf QCM  \hfill TEST}

\vspace*{.5cm}
\begin{minipage}{.4\linewidth}
  \centering\large\bf LuaLaTeXサンプル試験
\end{minipage}
\namefield{\fbox{\begin{minipage}{.5\linewidth}
Name :

\vspace*{.5cm}\dotfill
\vspace*{1mm}
\end{minipage}}}

%%%

\directlua{math.randomseed (2048)}
\directlua{a=math.random()}

\begin{question}{平方根}
  \directlua{tex.print(a)}の平方根はいくつですか?

  \begin{choices}
    \correctchoice{\directlua{tex.print(math.sqrt(a))}}
    \wrongchoice{\directlua{tex.print(math.sqrt(2*a))}}
    \wrongchoice{\directlua{tex.print(math.sqrt(a*1.001))}}
  \end{choices}
\end{question}
}

\end{document}

出力の書式調整はluaの関数で行うか、siunitxで行うことができます。

[注記]注記

\AMCIntervalsコマンドと\AMCnumericChoicesコマンドを使用することもできます(「区間の選択」および「数値での解答」参照)。

PSTricksの使用

このパッケージはautomultiplechoiceafterにロードしてください。

PSTricksを使用するには、AMCを次のように設定する必要があります:編集設定メインデフォルトLaTeXエンジンlatex+dvipdf