- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 6 mesi fa da .
-
Topic
-
Sto cercando di costruire una serie di istruzioni per creare delle prove d’esame con esercizi scelti e riarrangiati casualmente.La base di lavoro è una procedura simile a quella adottata dal pacchetto probsoln: scrivo in un file le m versioni di ogni esercizio e la macro legge il file, conta quanti esercizi ci sono e ne estrae uno casualmente; questo viene fatto per tutti i file, “mescolo” gli esercizi scelti ed ottengo la prova.
Nei file che accludo in coda (che sono l’esempio minimo che sono riuscito a creare con il problema) ho un master e i file di esercizi inc1, inc2 e inc3 (o inc3a).
Tutto funziona se creo il dvi (pdf), ma io avrei bisogno di avere come output un altro file tex che contenga tutte le prove (o n file tex ognuno con una prova). Il problema è che non riesco a far sì che su questo file (nell’esempio si chiama esame) venga scritto il codice non espanso dell’esercizio. Vorrei riuscire a dare un comando che scriva il token che contiene l’esercizio, espanso esattamente una volta, detto in altri termini: se nell’esercizio c’è un
\begin{ambiente}, nel file di output vorrei ci fosse scritto \begin{ambiente} e questo, ovviamente, in modo automatico senza dover scrivere sul file di
esercizi comandi come \noxpand o \string. Il codice che ho scritto funziona se negli esercizi non ci sono comandi d’ambiente, ecc. ma non funziona se nell’esercizio c’è, ad esempio, un
\begin{enumerate} come nel file inc3a.C’è qualcuno che ha un suggerimento?
Ho poi un altro problema: mi farebbe comodo che le stesse istruzioni contenute nel comando \newproblem fossero espresse con un ambiente. Ho provato con il comando di amsmath \collect@body, ma non mi pare funzioni.
Peggio ancora, per venire incontro alle esigenze di colleghi che usano Scientific WorkPlace (che è già un passo avanti rispetto a Word) mi sarebbe molto utile poter ridefinire il comando
\subsection{xxx} in modo che esegua il comando \newproblem: qualcuno sa se la cosa è possibile?Grazie
Flavio**************** file master. tex *****************************************
`\documentclass[italian]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{fink}%mi serve per il nome del file
\usepackage{ifthen}
\input random\newcounter{quest}
\newcounter{examnum}
\setcounter{examnum}{1}
\newwrite\test%%% codice adattato da probsoln
\newif\iffirstpass\makeatletter
\newcount\@probN
\newcommand{\newproblem}[1]{%
\stepcounter{quest}
\iffirstpass
\global\advance\@probN by 1
\else
\let\nome\finkbase
\expandafter\global\expandafter\newcommand\csname @prob@f\nome q\thequest e\theexamnum \endcsname{#1}
\fi
}\newcommand{\selectrandomly}[1]{
\newcount\j@n%
\global\@probN=0\relax
\firstpasstrue
\setcounter{quest}{0}
\input{#1}%
\setrannum{\j@n}{1}{\@probN}
\firstpassfalse%
\setcounter{quest}{0}
\input{#1}
\expandafter\immediate\write\test\expandafter{\string\item \space \csname @prob@f\nome q\number\j@n e\theexamnum\endcsname} %%scrive su file esterno
\csname @prob@f\nome q\number\j@n e\theexamnum\endcsname %% crea il dvi/pdf
}
\makeatother%% versioni pseudocasuali
\def\scegliiii#1#2#3{\def\filei{#1}\def\fileii{#2}\def\fileiii{#3}}
\def\prendiiii#1#2#3{\ifcase\theexamnum\or\scegliiii{#3}{#1}{#2}\or\scegliiii{#1}{#3}{#2}\or\scegliiii{#3}{#1}{#2}\or \scegliiii{#1}{#2}{#3}\or\scegliiii{#2}{#1}{#3}\or \scegliiii{#3}{#2}{#1}\fi}\begin{document}
\immediate\openout\test=esame.tex
\whiledo{\theexamnum<7}{\prendiiii{inc1}{inc2}{inc3} %questo va
% \prendiiii{inc1}{inc2}{inc3a} %% questo non va
\begin{enumerate}
\immediate\write\test{\string \begin{enumerate}}
\item \selectrandomly{\filei}
\item
\selectrandomly{\fileii}
\item \selectrandomly{\fileiii}
\end{enumerate}
\immediate\write\test{\string\end{enumerate} \string\newpage}
\newpage \stepcounter{examnum}}\immediate\closeout\test
\end{document}`
**************************** file inc1.tex ******************************
`\newproblem{Es.1 file 1 con parametro esame è \theexamnum}\newproblem{Es. 2 file 1}
\newproblem{Es. 3 file 1}
\newproblem{Es. 4 file 1}
`
************************ file inc2.tex *******************************
`\newproblem{Es.1 file 2 con parametro esame \theexamnum}\newproblem{Es. 2 file 2}
\newproblem{Es. 3 file 2}`
********************* file inc3.tex *************************
`\newproblem{Es.1 file 3 con parametro esame \theexamnum}\newproblem{Es. 2 file 3}
\newproblem{Es. 3 file 3}
\newproblem{Es. 4 file 3}
\newproblem{Es. 5 file 3}
`
********************** file inc3a.tex ***********************
` \newproblem{ \begin{enumerate}
\item Es.1 file 3a con parametro esame \theexamnum
\end{enumerate}}\newproblem{\begin{enumerate}
\item Es. 2 file 3a
\end{enumerate}}\newproblem{\begin{enumerate}
\item Es. 3 file 3a
\end{enumerate}}\newproblem{\begin{enumerate}
\item Es. 4 file 3a
\end{enumerate}}\newproblem{\begin{enumerate}
\item Es. 5 file 3a
\end{enumerate}}`
- Devi essere connesso per rispondere a questo topic.