Ich möchte ein Handout erstellen, das viele Fragen enthält.
Ich möchte eine Ausgabe davon:
Eine andere Ausgabe sieht folgendermaßen aus:
Die 3. Ausgabe sieht folgendermaßen aus:
Berechnen Sie 1+2
Berechnen Sie 1+2+3
Berechnen Sie 1+2+3+4
Berechnen Sie 1+2+3+4+5
Berechnen Sie 1+2+3+4+5+6
Das Problem hier ist nur mein Beispiel. Ich habe Tausende von Prüfungsfragen für die Mittelstufe. Wer kann mir beibringen, drei Arten von PDF-Dateien mit nur einer TEX-Datei auszugeben? Vielen Dank!
Antwort1
Zusätzlich zu dem, was Erik gesagt hat, habe ich festgestellt, dass ich für viele Kurse den Text aller Fragen gefolgt von jeder Frage mit Platz zum Ausfüllen haben wollte. Ich habe die Prüfungsklasse erweitert, um dies automatisch zu tun, indem ich die Fragen nur einmal eingebe und ein paar Durchläufe des Compilers durchführe.
%\NeedsTeXFormat{Latex2e}[1996/06/01]
\ProvidesClass{examExt}[2016/11/09 v1.0]
\LoadClassWithOptions{exam}
\RequirePackage{etex}
\global\newwrite\examfile%
\newcommand\insertQuestions[1][plain]{
\begingroup
\IfFileExists{./\jobname.exm}{\thispagestyle{#1}\input{\jobname.exm}}{\typeout{Class exam Warning: Questions file created. Rerun to get expected output.}}
\endgroup
\immediate\openout\examfile=\jobname.exm
}
\AtEndDocument{
\immediate\closeout\examfile
}
\newcommand\create@environment[1]{
\newenvironment{my#1}{%
\begin{#1}
\immediate\write\examfile{\string\begin{#1}}
}{%
\immediate\write\examfile{\string\end{#1}}
\end{#1}
}
}
\newcommand\create@item[1]{
\expandafter\newcommand\csname my#1\endcsname[2]{%
\if\relax\detokenize{##1}\relax
\csname #1\endcsname ##2
\immediate\write\examfile{\string\csname \space #1\string\endcsname\relax \unexpanded{##2}}%
\else
\csname #1\endcsname[##1] ##2
\immediate\write\examfile{\string\csname \space #1\string\endcsname[##1] \unexpanded{##2}}%
\fi
}
}
\newcommand\create@titleditem[1]{
\expandafter\newcommand\csname my#1\endcsname[3]{%
\if\relax\detokenize{##2}\relax
\csname #1\endcsname{##1} ##3
\immediate\write\examfile{\string\csname \space #1\string\endcsname\unexpanded{\begingroup ##1\endgroup}\relax \unexpanded{##3}}%
\else
\csname #1\endcsname{##1}[##2] ##3
\immediate\write\examfile{\string\csname \space #1\string\endcsname\unexpanded{##1}[##2] \unexpanded{##3}}%
\fi
}
}
\create@environment{questions}
\create@environment{parts}
\create@environment{subparts}
\create@environment{subsubparts}
\create@item{question}
\create@item{part}
\create@item{subpart}
\create@item{subsubpart}
\create@titleditem{titledquestion}
\newcommand\insertClearPage{\immediate\write\examfile{\string\clearpage}}
Hier ist ein MWE, das zeigt, wie man es benutzt. Es wird eine weitere Datei erstellen und beim zweiten Durchgang die Fragen oben kopieren.
\documentclass{examExt}
\usepackage{amsmath, amssymb}
\begin{document}
\insertQuestions
\clearpage
\begin{myquestions}
\myquestion{2}{This is a question $3\in\mathbb{R}$}
\begin{solutionbox}{3in}
This is a solution
\end{solutionbox}
\begin{myparts}
\mypart{2}{This is a part}
\begin{solutionbox}{3in}
This is a solution
\end{solutionbox}
\end{myparts}
\end{myquestions}
\end{document}
Antwort2
Hier stelle ich \Calculate{}
das Problem vor und \Solution{}
gebe die Antwort. Beachten Sie, dass \Solution
das „Problem“ automatisch als erste Zeile neu formuliert wird und das optionale Argument []
den Zeilenumbruch unterdrückt, der normalerweise folgen würde (siehe Punkt 1).
\documentclass[10pt]{amsart}
\usepackage{tabstackengine,enumitem}
\newcommand\Calculate[1]{Calculate $#1$\def\Question{#1}}
\newcommand\Solution[2][\\]{Solution: \Longunderstack[l]{\Question#1#2}}
\stackMath
% TO PROVIDE BLANK SOLUTION
%\renewcommand\Solution[2][\\]{Solution: \setbox0=\hbox{%
% \Longunderstack[l]{\Question#1#2}}\rule[-\dp0]{0pt}{\dimexpr\ht0+\dp0}}
% TO PROVIDE NO SOLUTION
%\renewcommand\Solution[2][\\]{}
\begin{document}
\sffamily
\begin{enumerate}[listparindent=0in,itemsep=5pt]
\item \Calculate{1 + 2}
\Solution[]{=3}
\item \Calculate{1 + 2 + 3}
\Solution{=3+3\\=6}
\item \Calculate{1+2+3+4}
\Solution{=3+3+4\\=6+4\\=10}
\item \Calculate{1+2+3+4+5}
\Solution{=3+3+4+5\\=6+4+5\\=10+5\\=15}
\item
\end{enumerate}
\end{document}
Um die Lösungen auszublenden, entfernen Sie einfach die Kommentarzeichen aus den Zeilen, um sie neu zu definieren \Solution
als
\renewcommand\Solution[2][\\]{Solution: \setbox0=\hbox{%
\Longunderstack[l]{\Question#1#2}}\rule[-\dp0]{0pt}{\dimexpr\ht0+\dp0}}
Zu bekommenNEINLösung, entfernen Sie einfach das Kommentarzeichen aus der anderen Zeile und definieren Sie sie neu \Solution
als
\renewcommand\Solution[2][\\]{}
WECHSELN
Möchte man das nicht =
am Anfang jeder Zeile der Lösung eintippen müssen, ist dies nur durch den Verzicht auf die optionale Argumentmöglichkeit zur Unterdrückung des Zeilenumbruchs nach der Problemumformulierung möglich (vgl. Punkt 1).
\documentclass[10pt]{amsart}
\usepackage{tabstackengine,enumitem}
\def\stackalignment{l}
\newcommand\Calculate[1]{Calculate $#1$\def\Question{#1}}
\newcommand\Solution[1]{Solution: \stackunder{\Question}
{\tabbedLongunderstack[l]{#1}}}
\stackMath
\TABstackMath
\TABstackMathstyle{=}
% TO PROVIDE BLANK SOLUTION
%\renewcommand\Solution[1]{Solution: \setbox0=\hbox{\stackunder{\Question}%
% {\tabbedLongunderstack[l]{#1}}}\rule[-\dp0]{0pt}{\dimexpr\ht0+\dp0}}
% TO PROVIDE NO SOLUTION
%\renewcommand\Solution[1]{}
\begin{document}
\sffamily
\begin{enumerate}[listparindent=0in,itemsep=5pt]
\item \Calculate{1 + 2}
\Solution{3}
\item \Calculate{1 + 2 + 3}
\Solution{3+3\\6}
\item \Calculate{1+2+3+4}
\Solution{3+3+4\\6+4\\10}
\item \Calculate{1+2+3+4+5}
\Solution{3+3+4+5\\6+4+5\\10+5\\15}
\item
\end{enumerate}
\end{document}
Antwort3
Man könnte die Klasse verwenden exam
, die es einem auch erlaubt, Platz für die Lösung zu lassen. Außerdem kann man damit Fragen oder Fragenteilen (die ich hier auslasse) Punkte zuweisen.
\documentclass[
answers
]{exam}
\usepackage{mathtools}
\begin{document}
\begin{questions}
\question Calculate \(1 + 2\)
\begin{solution}
\(1 + 2 = 3\)
\end{solution}
\question Calculate \(1 + 2 + 3\)
\begin{solution}
\begin{align*}
& 1 + 2 + 3\\
& = 3 + 3\\
& = 6
\end{align*}
\end{solution}
\end{questions}
\end{document}