編譯後自動搖晃使用 LaTeX 建立的測試的問題和答案

編譯後自動搖晃使用 LaTeX 建立的測試的問題和答案

我們假設我們有 30 個問題來為學生解決課文,而不是像 MWE 那樣的 2 個問題:

\documentclass[leqno,11pt,landscape,a3paper]{extarticle}
\usepackage{multicol,mathtools}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}

\begin{multicols}{1}
\begin{enumerate}
\item La velocità di 1,00$\cdot 10^2$ m/s espressa in km/h è:

$\fbox{A}$  36 km/h.\\
$\fbox{B}$    360 km/h.\\
$\fbox{C}$  27,8 km/h.\\
$\fbox{D}$    $3,\!60\cdot 10^{8}$ km/h.\\
$\fbox{E}$ \begin{tabular}{lllllllllllll}
\multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{6}{c}{} \\
\hline
\end{tabular}

\item In fisica nucleare si usa l'angstrom (simbolo: 1\AA=$10^{-10}$ m) e il fermi o femtometro (1 fm= $10^{-15}$ m). Qual è la relazione tra queste due unità di misura?

$\fbox{A}$  1 \AA = $10^5$ fm.\\
$\fbox{B}$    1 \AA = $10^{-5}$ fm.\\
$\fbox{C}$    1 \AA = $10^{-15}$ fm.\\
$\fbox{D}$    1 \AA = $10^{3}$ fm.\\
$\fbox{E}$ \begin{tabular}{lllllllllllll}
\multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{6}{c}{} \\
\hline
\end{tabular}
\end{enumerate}
\end{multicols}
\end{document}

在編譯之後,是否有可能透過一些技術手段自動交換問題和答案的順序?

相關:答案選擇選項的方塊以及與數學答案的完美對齊

答案1

我在這裡提出一個可能的方法:

  • 首先,我定義一個帶有 6 個參數的巨集\definequestion:第一個是一些用來識別問題的「標籤」;第二個是問題正文;第三到第六個是可能的答案。問題以固定寬度t對齊,可以根據頁面和字體大小進行調整。\parbox\questionwidth
  • 巨集\usequestion{label}列印對應的問題。
  • 該巨集\printrandomquestions使用randomlist包以偽隨機順序列印問題。可選參數是種子,強制參數必須是逗號分隔的問題標籤清單。

重新整理答案的版本,請參閱下文。

\documentclass{article}

\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{randomlist}

\newlength{\questionwidth}
\setlength{\questionwidth}{6cm}

\makeatletter

\newcommand{\definequestion}[6]{% #1=label; #2: text; #3...#6 multiple choices
   \@namedef{question@#1}{%
     \parbox[t]{\questionwidth}{%
        #2\par\smallskip
        \framebox[1.3em]{A}~#3\par
        \framebox[1.3em]{B}~#4\par
        \framebox[1.3em]{C}~#5\par
        \framebox[1.3em]{D}~#6\par
        \framebox[1.3em]{E}~\rule{\dimexpr\questionwidth-2em}{0.4pt}
        }}
}

\newcommand*{\usequestion}[1]{\@nameuse{question@#1}}

\newcommand*{\printrandomquestions}[2][0]%
  {%
   \RLsetrandomseed{#1}%
   \def\@tempa{}%
   \@for\x:=#2\do{%
                  \edef\y{\noexpand\g@addto@macro\noexpand\@tempa{{\noexpand\@nameuse{question@\x}}}}%
                  \y
                 }%
   \expandafter\RandomEnumerateList\@tempa
  }

\makeatother

\definequestion{v}
{La velocità di $1,00\cdot 10^2$\,m$/$s espressa in km$/$h è:}
{36\,km$/$h}
{360\,km$/$h}
{27,8\,km$/$h}
{$3{,}60\cdot 10^{8}$\,km$/$h.}

\definequestion{A-fm}
{In fisica nucleare si usano l'angstrom (simbolo: $1\,\text{\AA}=10^{-10}$\,m)
 e il fermi o femtometro ($1\,\mathrm{fm} = 10^{-15}\,\mathrm{m}$). Qual è la
 relazione tra queste due unità di misura?}
{$1\,\text{\AA} = 10^5$\,fm.}
{$1\,\text{\AA} = 10^{-5}$\,fm}
{$1\,\text{\AA} = 10^{-15}$\,fm.}
{$1\,\text{\AA} = 10^{3}$\,fm.}

\definequestion{foo}{Foo}{}{}{}{}
\definequestion{baz}{Baz}{}{}{}{}


\begin{document}

Manually:
\usequestion{A-fm}

\printrandomquestions{v,A-fm,foo,baz}

\printrandomquestions[5]{v,A-fm,foo,baz}

\printrandomquestions[3]{v,A-fm,foo,baz}

\end{document}

輸出(為了清晰起見,橫向有 3 列)

在此輸入影像描述

編輯隨著答案的重新洗牌。

\documentclass[landscape]{article}

\usepackage[margin=1cm]{geometry} % for preview
\usepackage{multicol}

\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{randomlist}

\newlength{\questionwidth}
\setlength{\questionwidth}{6cm}

\makeatletter

\newcommand{\definequestion}[6]{% #1=label; #2: text; #3...#6 multiple choices
   \@namedef{question@#1}%
      {%
       \parbox[t]{\questionwidth}%
          {%
           \NewList{answers}%
           \SetList{answers}{{#3},{#4},{#5},{#6}}% extra grouping to protect commas in arguments
           #2\par\smallskip
           \count@=65
           \ForEachRandomItem{answers}{ans}{\framebox[1.3em]{\char\count@}~\ans\par\advance\count@\@ne}%
           \framebox[1.3em]{E}~\rule{\dimexpr\questionwidth-2em}{0.4pt}% last one
          }%
      }%
}

\newcommand*{\usequestion}[1]{\@nameuse{question@#1}} % provided but not quite useful

\newcommand*{\printrandomquestions}[2][0]%
  {%
   \RLsetrandomseed{#1}%
   \def\@tempa{}%
   \@for\x:=#2\do{%
                  \edef\y{\noexpand\g@addto@macro\noexpand\@tempa{{\noexpand\@nameuse{question@\x}}}}%
                  \y
                 }%
   \expandafter\RandomEnumerateList\@tempa
  }

\makeatother

\definequestion{v}
{La velocità di $1,00\cdot 10^2$\,m$/$s espressa in km$/$h è:}
{36\,km$/$h}
{360\,km$/$h}
{27,8\,km$/$h}
{$3{,}60\cdot 10^{8}$\,km$/$h.}

\definequestion{A-fm}
{In fisica nucleare si usano l'angstrom (simbolo: $1\,\text{\AA}=10^{-10}$\,m)
 e il fermi o femtometro ($1\,\mathrm{fm} = 10^{-15}\,\mathrm{m}$). Qual è la
 relazione tra queste due unità di misura?}
{$1\,\text{\AA} = 10^5$\,fm.}
{$1\,\text{\AA} = 10^{-5}$\,fm}
{$1\,\text{\AA} = 10^{-15}$\,fm.}
{$1\,\text{\AA} = 10^{3}$\,fm.}

\definequestion{foo}{Foo}{a}{b}{c}{d}
\definequestion{baz}{Baz}{$\alpha$}{$\beta$}{$\gamma$}{$\delta$}

\begin{document}

\begin{multicols}{3}
\printrandomquestions{v,A-fm,foo,baz}

\printrandomquestions[5]{v,A-fm,foo,baz}

\printrandomquestions[3]{v,A-fm,foo,baz}
\end{multicols}

\end{document}

在此輸入影像描述

答案2

您可以使用expl3設施。依序儲存答案可以對其進行打亂。

我還定義了一個test環境,​​可以根據要求製作盡可能多的測試副本。

\documentclass{article}
\usepackage[a5paper,margin=1cm]{geometry} % just to make smaller images
\usepackage{multicol,mathtools}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{siunitx}

\pagestyle{empty}

\sisetup{output-decimal-marker={,}}

\ExplSyntaxOn
\NewDocumentCommand{\question}{mm}
 {
  \seq_clear:N \l__sebastiano_question_body_seq
  \tl_map_inline:nn { #2 } { \seq_put_right:Nn \l__sebastiano_question_body_seq { ##1 } }
  \seq_shuffle:N \l__sebastiano_question_body_seq

  \item #1 \\[2ex]

  \seq_indexed_map_inline:Nn \l__sebastiano_question_body_seq
   {
    \fbox { \int_to_Alph:n { ##1 } } ~ ##2 \\[0.5ex]
   }

  \fbox { \int_to_Alph:n { \seq_count:N \l__sebastiano_question_body_seq + 1 } } ~
  \makebox[9em]{\hrulefill}
 }

\NewDocumentEnvironment{test}{m+b}
 {
  \prg_replicate:nn { #1 } { #2 \clearpage }
 }
 {}
\ExplSyntaxOff

\begin{document}

\begin{test}{4}

\begin{enumerate}
\question{La velocità di \SI{1,00e2}{m/s} espressa in \si{km/h} è:}{
  {\SI{36}{km/h}.}
  {\SI{360}{km/h}.}
  {\SI{27,8}{km/h}.}
  {\SI{3,60e8}{km/h}.}
}

\question{In fisica nucleare si usa l'angstrom (simbolo: $\SI{1}{\angstrom}=\SI{1e-10}{m}$) 
e il fermi o femtometro ($\SI{1}{fm}=\SI{1e-15}{m}$). Qual è la relazione tra queste due 
unità di misura?}{
  {$\SI{1}{\angstrom}=\SI{1e5}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e-5}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e-15}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e3}{fm}$.}
}

\end{enumerate}

\end{test}

\end{document}

在此輸入影像描述

相關內容