しかし、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}}
以上で、スタイルファイルの準備は完了です。