من از طبقه نوشتاری exam برای نوشتن سؤال امتحانی استفاده میکنم. یک نمونه در ادامه آورده شده است:
% !TEX TS-program = XeLaTeX
% Mahmood Amintoosi, HSU
\documentclass[12pt]{exam}
\usepackage{setspace}
\usepackage{listings}
\usepackage[margin=20mm]{geometry}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\newcommand{\class}{مبانی کامپیوتر}
\newcommand{\term}{تابستان ۹۲}
\newcommand{\examnum}{}
\newcommand{\examdate}{۱۳۹۲/۰۶/۰۶}
\newcommand{\timelimit}{۱۰۰ دقیقه}
\singlespacing
\parindent 0ex
\lstset{
keywordstyle=\textbf,
identifierstyle=,
stringstyle=\ttfamily,
commentstyle=\color{LimeGreen},
stringstyle=\ttfamily,
numberstyle=\footnotesize,
showstringspaces=false}
\begin{document}
% These commands set up the running header on the top of the exam pages
\pagestyle{head}
\firstpageheader{}{}{}
\runningheader{صفحه \thepage\ از \numpages}{}{\class}
\runningheadrule
\begin{tabular}{p{90mm} l l}
\textbf{\class} & \textbf{نام:} & \makebox[45mm]{\hrulefill}\\
\textbf{\examdate} &&\\
\textbf{زمان: \timelimit} & \textbf{شماره دانشجویی:} & \makebox[25mm]{\hrulefill}
\end{tabular}\\
\rule[1ex]{\textwidth}{.1pt}
\vspace{0pt}
\textbf{تذکرات}\\
• امتحان شامل \numpages\ صفحه و \numquestions\ پرسش است.\\
• از نوشتن نام خود فراموش نفرمایید.\\
• استفاده از مداد مشكی اشكالی ندارد. از رنگ قرمز استفاده نكنید.\\
\centering
\vspace{0pt}
\gradetablestretch{2}
\vqword{پرسش} \hqword{پرسش}
\vpword{بارم} \hpword{بارم}
\vsword{نمره} \hsword{نمره}
\vtword{جمع نمرات} \htword{جمع نمرات}
\addpoints % required here by exam.cls, even though questions haven't started yet.
{\small
\gradetable[h]%[pages] % Use [pages] to have grading table by page instead of question
}
%\baselineskip = 9mm
\begin{questions}
\pointpoints{نمره}{نمره}
\question[10]
کار برنامه زیر چیست؟
\begin{latin}
\begin{lstlisting}[language=C,breaklines=true]
int main()
{
char s[80];
int i;
gets(s);
for(i=0; s[i] != '\0'; i++)
{
if(s[i] == 'a')
continue;
putchar(s[i]);
}
}
\end{lstlisting}
\end{latin}
\question
تابعی به نام
\lr{max}
بنویسید که دو عدد صحیح را به عنوان آرگومان ورودی گرفته ماکزیمم آنها را برگرداند.
\begin{parts}
\part[10] با دو \lr{return}
\part[10] با یک \lr{return}
\end{parts}
\question[20]
تابعی بازگشتی بنویسید که عددی را به عنوان آرگومان گرفته (مثلاً $x$) سه به توان آنرا ($3^x$) محاسبه و برگرداند. اگر بازگشتی ننویسید، بخشی از نمره را از دست خواهید داد.
\question[20]
تابعی بنویسید که دو عدد صحیح را به عنوان آرگومان پذیرفته، حاصل تقسیم اولی بر دومی را محاسبه و برگرداند. اگر عدد دوم صفر است پیام مناسبی چاپ کنید. اگر تابع ننویسید بخشی از نمره را از دست خواهید داد.
\question[30]
فرمول بسط سینوس به صورت زیر است:
\[ sin(x) = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \cdots \]
برنامهای برای محاسبه مجموع ۲۰ جمله اول آن بنویسید.
در صورت تمایل میتوانید تابعی برای محاسبه فاکتوریل بنویسید.
\end{questions}
\end{document}
برخی از مزایای این کلاس به شرح زیر است:
- میتوان برای هر پرسش نمره قرار داد و مجموع نمرات به صورت خودکار مشخص میشود.
- هر پرسش میتواند از چندین قسمت تشکیل شود.
- جدول نمرات پرسشها به صورت خودکار چاپ میشود (عمودی و افقی).
- حالت دوستونه آن به خوبی کار میکند.
- عنوان امتحان در سربرگ همه صفحات ظاهر میشود.
- میتوان به پرسشها به راحتی ارجاع داد و در جابجایی پرسشها شمارهها به صورت خودکار اصلاح میشود. (مثلا این شکل مربوط به پرسش فلان است)
- تعداد سؤالات و تعداد صفحات را میتوان به صورت خودکار داشت.
خروجی سند بالا به صورت زیر است: