ブランクテスト準備の自動化

空のテストを準備するのは楽しいアクティビティではありません。 質問と回答オプションのリストを作成するだけでなく、フォームを作成してから、正しい回答オプションを使用して1つの参照フォームを作成する必要があります(確認しやすくするため)。



しかし、TeXは3次方程式を解くことができる非常に強力なシステムです! 彼女はそのような単純なタスクに対処することはできませんか? コープ、そしてどのように!





そこで、テキストからできるシンプルなスタイルのファイルを書きます

\documentclass[a4paper,14pt]{extarticle} \usepackage[koi8-r]{inputenc} %   \usepackage[russian]{babel} %    \usepackage{./TESTS} %   \begin{document} \begin{enumerate} \begin{q}{  ,    ?} \item  \good \item  \end{q} \begin{q}{    ?} \item  3 \item  4 \item   \item 2-4 \good \end{q} \begin{q}{ /     ?} \item   \item 4 (\verb'\q', \verb'\good', \verb'\showtbl'  \verb'\trueans')\good \item 3 \end{q} \end{enumerate} \newpage \showtbl \newpage \trueans \end{document}
      
      





このテストを入手してください:

テスト画像



そのようなフォームは次のとおりです。

テスト用のテンプレート



そして、ここにそのような標準があります:

テストエタロン



このためには少し必要です。 まず、列挙環境を再定義して、必要な方法に見えるようにします。 さらに、この環境は、回答番号と質問を比較するために使用できる独自のカウンターに依存する必要があります。

 \newcounter{lst} \renewenvironment{enumerate}% {\begin{list}{\arabic{lst}.}{\usecounter{lst}\setlength{\itemsep}{0cm}% \setlength{\parsep}{0cm}\setlength{\topsep}{2mm}}\item[]}{\end{list}}
      
      





最初のコマンドは、独自のlstカウンターを追加しました。 次に、列挙環境を再定義しました。lstカウンターを使用し、質問番号の後にドットを配置し、追加のスペースを挿入しません(質問を互いに分離する2ミリメートルのギャップを除く)。



次に、答えを「まとめる」環境qを定義します。 これは番号付きリストである必要があり、その番号付けはロシア文字で与えられます。 彼のために、私たちも自分のカウンターを設定します。

 \newcounter{qwest} \def\theqwest{\arabic{qwest}} \newenvironment{q}[1]{\item #1 \begin{list}{\asbuk{qwest})}{\usecounter{qwest}}}{\end{list}\par}
      
      





環境を1つの必須パラメーター(質問のテキスト)で設定します。



正解をマークするために、ファイルに出力する標準のTeXovskyの手段を使用できますが、自転車を止めることはできませんが、既成のインターフェイス-ラテックスラベルを使用します。 ラベルは最後に変更されたカウンターの値を保存し、正しい回答のテキストの後に配置するため、この回答の数を自動的に保存します。 ただし、質問番号は手動で保存する必要があります。ラベルテキストにプレフィックス「q」を付けて入力します。

 \newcount\total \total=0 \def\good{\label{q\arabic{lst}}\global\advance\total by1}
      
      





合計カウンターには、質問の合計数が含まれます。 質問で複数の適切なコマンドを使用すると、エラーが発生することに注意してください(合計カウンターが質問の合計数を超え、エラーテキストに無効な「q」リンクが示されます)。



フォームと標準を作成するには、追加のカウンターが必要です。

 \newcount\cone \newcount\ctwo \newcount\cthree
      
      





さらに、補助コマンドを定義します。 リンク「q <question number>」から正しい答えを抽出するため(そしてそれがカウンター値になるように)、refコマンドを再定義します。

 \def\f@rst#1#2{#1} \def\ref#1{\expandafter\@setref\csname r@#1\endcsname\f@rst#1}
      
      





1行あたり10問の表形式で回答の形式と標準を作成します。 また、正しい回答(列の形式で配置)に記入する必要があります。このテーブルでは、1つの質問に対応する各セルがネストされた列テーブルになります。 存在しない質問の数(質問の数が10の倍数でない場合)は、記号Xに置き換えられます



フォームヘッダーは、テストと参照の両方で同じです。 したがって、どちらの場合でも、同じコマンドを使用してこのヘッダーを作成します。

 \def\l@@n@{&} \def\l@n@{\ifnum\cone<\ctwo\gdef\c@ll{\number\cone}\else\gdef\c@ll{\bf X}\fi \global\advance\cone by1\global\advance\cthree by1 \l@@n@\hbox to 1cm{\hfil\c@ll\hfil} \ifnum\cthree<10\l@n@\fi}
      
      





最初の定義を作成する必要がありました、なぜなら それ以外の場合、2番目の文字&が明らかになりました。

l @ n @コマンドは、現在の質問の数(cone)が質問の総数(ctwo)より小さいかどうかをチェックし、そうであれば、質問の数が列ヘッダーに配置されます 現在の行の質問数のカウンター(cthree)と同様に、現在の質問の数が増加します。このカウンターが10未満の場合、同じコマンドの再帰呼び出しが継続します。



空のテーブルの内容は単純です(空のテーブル)。したがって、「一度に」描画するのが論理的です。

 \def\bl@nk{\hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline\hline}
      
      





回答番号と空のセルを含むテーブルを単純に描画します。



参照フォームでは、回答の番号を考慮する必要があるため、質問ごとに個別のテーブルを作成し、その内容は正しい回答に対応します。

 \def\markX{\hbox to 1cm{\hfil\bf X\hfil}} \def\@@one{\markX\\\hline\\\hline\\\hline\\} \def\@@two{\\\hline\markX\\\hline\\\hline\\} \def\@@three{\\\hline\\\hline\markX\\\hline\\} \def\@@four{\\\hline\\\hline\\\hline\markX\\} \def\the@ns#1{\hbox to 1cm{\begin{tabular}{|c}\ifcase#1\null\or\@@one\or \@@two\or\@@three\or\@@four\fi \end{tabular}}}
      
      





落書きを減らすためにmarkXコマンドを定義しました。@@ one ... @@の4つのコマンドは、1番目から4番目の行がXでマークされた列テーブルを表示します @ nsコマンドは、引数の値(正解の数)に応じて正しいネームプレートを発行します。



参照フォームに記入するには、次のコマンドを使用します。

 \def\l@@@{\ifnum\cone<\ctwo\gdef\c@ll{\the@ns{\ref{q\number\cone}}}\else\gdef\c@ll{}\fi \global\advance\cone by1\global\advance\cthree by1 \l@@n@\c@ll\ifnum\cthree<10\l@@@\fi} \def\@@tru{\global\advance\cone by-10 \global\cthree=0\hbox to 2.5cm{\begin{tabular}{|c} \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil} \end{tabular}}\l@@@\\\hline\hline}
      
      





2番目のコマンドは、10個の質問のプレートの内容に正解を直接入力します。 最初-必要な列ラベルを再帰的に置き換えます。 これは、質問の数でヘッダーを形成するコマンドとほぼ同様に機能しますが、質問の数の代わりに、この質問に対する正しい答えを示すプレートを置き換えます。



すべてのテーブルの再帰出力(10個以上の質問がある場合があるため、それぞれ複数の質問があります)には、コマンドが使用されます

 \def\@@tmp{\ifnum\cone<\ctwo\global\cthree=0 \l@n@\\\hline\bl@nk\@@tmp\fi}
      
      





フォームは、テーブルヘッダー(m @ keh @ ader)、テーブルボディ(@@ tmp)、最後にテーブルベース(m @ kefoot @ r)を表示するshowtblコマンドによって入力されます。

 \def\m@keh@ader{\begin{center}\begin{tabular}{||c|c|c|c|c|c|c|c|c|c|c||} \hline\hline .~&\multicolumn{10}{|c||}{ }\\\hline} \def\m@kefoot@r{\end{tabular}\end{center}} \def\showtbl{{\tabcolsep=0pt\global\ctwo=\total\global\cone=0 \m@keh@ader\@@tmp\m@kefoot@r}}
      
      





参照フォームの構築を実装するには、bl @ nkコマンドを@@ truに置き換えて(空のセルの代わりにマークのあるセルが描画されるようにする)、showtblコマンドと同じことを行う必要があります。

 \def\trueans{{\tabcolsep=0pt\global\ctwo=\total\global\cone=0 \m@keh@ader\gdef\bl@nk{\@@tru}\@@tmp\m@kefoot@r}}
      
      







以上で、スタイルファイルの準備は完了です。



All Articles