اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
Close Sidebar
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

محبوب‌ترین برچسب‌ها

رفع خطا جدول مراجع xepersian ریاضی‌نویسی شکل فونت فهرست مطالب شماره‌گذاری منابع bidi پانویس بیب‌تک tikz تک‌لایو parsilatex بیمر اسلاید زی‌پرشین پاورقی bibtex سربرگ نماد رسم شکل فرمول‌نویسی قالب ارجاع‌دهی biditexmaker هدر ویرایشگر beamer واژه‌نامه اندازه فونت texstudio عنوان فصل ماتریس اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول bidipresentation شماره صفحه حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف مکان شکل tikzpicture حروف‌چینی کد شماره فصل enumerate tabriz_thesis نمایه align زیرنویس شکل کادر itemize فهرست اشکال listings الگوریتم عدم اجرا نیم‌فاصله متن لاتین و فارسی بسته فاصله بین خطوط قالب پایان‌نامه فرمول نصب تک‌لایو فارسی‌تک hyperref شماره فرمول glossaries کپشن نمودار خروجی لاتک حروف‌چینی چندستونی فونت فارسی و انگلیسی ماکرونویسی biditools شماره پاورقی پیوست‌ سوال امتحانی فاصله‌گذاری فرمول چندضابطه‌ای subfigure extrafootnotefeatures header texmaker pdf tex biditufte-book تصویر شمارنده texlive2015 longtable زیرنویس خطا رسم نمودار شماره‌گذاری صفحات پایان نامه دیاگرام فهرست جداول میک‌تک texlive2016 تنظیم جدول kashida texworks caption اندیس lollipop iust-thesis multicol فصل‌نویسی شعر سوال چهارگزینه‌ای بولد تورفتگی آکولاد اعداد فارسی فاصله عمودی xindy چپ‌چینی اوبونتو میکروسافت ورد قاب geometry texlive fancyhdr وسط‌چینی تک لایو 2015 عنوان بخش شماره گذاری به‌روزرسانی بسته aimc46 صفر توخالی فرمول طولانی بیرون‌زدگی xelatex کاما tcolorbox پوستر فاصله سطرها نوشتافت شکست خط tex-programming فونت اعداد pgfplots قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس فلش جایابی تصویر قالب کتاب پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل font محیط ریاضی رسم کادر جداکننده جدول طولانی فهرست تصاویر شماره‌گذاری فرمول algorithm2e فونت بولد proof equation bidipoem eps جدول افقی عکس به‌روزرسانی پانویس چندستونی کمک مالی فاصله خطوط حروف‌چینی شعر زیرشکل minipage قلم پانویس پاراگرافی ltrfootnote پیوست computeautoilg متن فارسی و انگلیسی فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان لاتکس tabular baselineskip شماره قسمت قسمت عنوان جدول
31 نفر آنلاین
0 عضو و 31 مهمان در سایت حاضرند
بازدید امروز: 29735
بازدید دیروز: 18215
بازدید کل: 24261106

نحوه ایجاد کلید سوالات آزمون تستی

+5 رای
21,921 بازدید

سلام کد زیر یک دستور برای تولید پاسخنامه خام سوالات آزمون تستی تعریف می کند:

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{pgffor}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{multicol}
\usepackage[logo=on]{xepersian}
\settextfont{XB Niloofar}
\setdigitfont{XB Niloofar}

\begin{document}
\pagestyle{empty}
\newcommand{\myellipse}[1]{
\tikz{\node[draw,fill=red!5!white,inner sep=0pt,ellipse]{\textcolor{red}{~#1~}}}}

\tcbset{colframe=red!50!black,colback=white}
 \begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
    \LARGE{پاسخنامه خام}‎‎
    \end{tcolorbox}
\newcommand{\makesheet}[1]{
    \begin{tcolorbox}[width=\textwidth]
        \begin{multicols}{3} 
            \begin{center} 
            \noindent
            \foreach \i in {1,...,#1}
            {\fbox{\raisebox{3pt}{\makebox[1cm]{\i}} \foreach \j in {1,2,3,4} {\myellipse{\j}}}\\}
            \end{center}
       \end{multicols}
     \end{tcolorbox} }

\makesheet{60}

\end{document}

که خروجی آن به شکل زیر است:
enter image description here
اکنون فرض کنید لیست پاسخ‌های صحیح (60 سوال) را مثلا به صورت زیر بتوانیم وارد کنیم (چگونه؟):

\answerslist{1,3,4,2,2,1,3,1,2,4,3,2,2,3,4,1,1,3,2,1,1,4,4,4,3,2,1,2,4,3,3,4,2,1,1,1,3,2,4,3,1,2,3,4,2,3,1,1,2,4,1,2,1,3,4,2,1,1,3,2}

چگونه می توان دستوری را تعریف کرد که کلید سوالات را چاپ کند به طوری که خانه‌های مربوط به پاسخ‌های صحیح سیاه شده باشد؟

سوال شده خرداد 22, 1397 توسط rezaeian (735 امتیاز)
ویرایش شده خرداد 22, 1397 توسط rezaeian
درود بر شما با این سوال های زیبا و فنی.+1
بسیار ممنون. پاسخ‌های زیبای شما و دیگر دوستان انگیزه تلاش به ما می دهد.

3 پاسخ

+6 رای
 
بهترین پاسخ

برای این منظور با استفاده از foreach و csname آرایه‌ای از متغیرها درست می‌کنیم که جواب‌های صحیح را در خود نگه می‌دارند سپس هنگام کشیدن بیضی چک می‌کنیم که اگر برابر جواب صحیح بود بیضی را توپر و در غیر این‌صورت بیضی را تو خالی در نظر می‌گیرد.
توجه کنید که کمی کد دستور ساخت بیضی شما را تغییر داده‌ام و همچنین جوابها را دستور makesheet به عنوان آرگومان اختیاری می‌پذیرد
با این توضیحات کد شما به شکل زیر است

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{pgffor}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{multicol}
\usepackage[logo=on]{xepersian}
\settextfont{Yas}
\setdigitfont{Yas}
\newcounter{anscount}%
\newcounter{optioncount}
\newcounter{correctcount}
\newcommand{\makesheet}[2][]{
    \setcounter{anscount}{0}%
    \foreach \k in {#1}{%
        \stepcounter{anscount}%
        \expandafter\xdef\csname ans\the\value{anscount}\endcsname{\k}%
    }%
    \begin{tcolorbox}[width=\textwidth]
        \begin{multicols}{3} 
            \begin{center} 
                \noindent
                \foreach \i in {1,...,#2}
                {\fbox{\raisebox{3pt}{\makebox[1cm]{\i}}%
                        \ifcsname ans\i \endcsname%
                            \setcounter{correctcount}{\csname ans\i \endcsname}%
                        \else%
                            \setcounter{correctcount}{0}%
                        \fi%
                        \foreach \j in {1,2,3,4} {%
                            \setcounter{optioncount}{\j}%
                            \ifnum\value{optioncount}=\value{correctcount}%
                                \myfillellipse%
                            \else%
                                \myellipse{\j}%
                            \fi%
                        }%
                    }\\
                        }
            \end{center}
        \end{multicols}
\end{tcolorbox}%
}
\begin{document}
\pagestyle{empty}
\newcommand\myellipse[1]{%
\tikz \draw (0,0) ellipse (.3 and .2) node[pos=.5]{#1};
}
\newcommand\myfillellipse{%
    \tikz \draw[fill] (0,0) ellipse (.3 and .2);
}
\tcbset{colframe=red!50!black,colback=white}
 \begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
    \LARGE{پاسخنامه خام}‎‎
    \end{tcolorbox}
\makesheet[1,3,2,4,2]{60}%
\end{document}

و خروجی شما به این صورت است.
enter image description here
پیروز باشید.

پاسخ داده شده خرداد 23, 1397 توسط مجتبی (587 امتیاز)
انتخاب شده خرداد 23, 1397 توسط rezaeian
ممنون از شما، پاسختون واقعا دقیق و زیباست. سلامت و سربلند باشید. (+1)
تندرست باشید
خیلی به دردم خورد. ممنون (+1)
خوشحالم که براتون مفید بوده
درود بر جناب باغبان عزیز+1
نحوه ایجاد کلید سوالات آزمون تستی (2)
+6 رای

سلام


با تشکر از پاسخ فنی دوست خوبم جناب باغبان عزیز


در روشی که من می‌خواهم بیان کنم سعی کرده‌ام که خود ساختار برگه با همان رنگ‌های پیش‌فرض حفظ شود. برای انجام این کار ابتدا دو دستور داخلی زیر را برای انجام این تغییرات به کار گرفته‌ام:

\def\shfill#1{\gdef\@shfill{#1}}
\def\shcol#1{\gdef\@shcol{#1}}

و سپس ماکروی \myellipse را به صورت زیر تعریف کرده‌ام:

\newcommand{\myellipse}[1]{
\tikz{\node[draw,fill={\@shfill},inner sep=0pt,ellipse]{\textcolor{\@shcol}{~#1~}}}}

توجه کنید که جهت تغییر رنگ از دستور داخلی در ساختار تیکز بهره گرفته‌ام.
تعریف ماکروی \makesheet را از روش جناب باغبان انتخاب کرده‌ام با این تفاوت که دستور شرطی انتها‌ی آن را مطابق تغییرات بالا و به صورت زیر ویرایش کرده‌ام:

...
\shfill{black}\shcol{black}\myellipse{\j}%
\else%
\shfill{red!5!white}\shcol{red}\myellipse{\j}%
...

کد کلی شما به صورت زیر است:

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{pgffor}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{multicol}
\usepackage[logo=on]{xepersian}
\settextfont{Yas}
\setdigitfont{Yas}
\newcounter{anscount}%
\newcounter{optioncount}
\newcounter{correctcount}
\makeatletter
\def\shfill#1{\gdef\@shfill{#1}}
\def\shcol#1{\gdef\@shcol{#1}}
\newcommand{\myellipse}[1]{
\tikz{\node[draw,fill={\@shfill},inner sep=0pt,ellipse]{\textcolor{\@shcol}{~#1~}}}}
\newcommand{\makesheet}[2][]{
\setcounter{anscount}{0}%
\foreach \k in {#1}{%
\stepcounter{anscount}%
\expandafter\xdef\csname ans\the\value{anscount}\endcsname{\k}%
}%
\begin{tcolorbox}[width=\textwidth]
\begin{multicols}{3} 
\begin{center} 
\noindent
\foreach \i in {1,...,#2}
{\fbox{\raisebox{3pt}{\makebox[1cm]{\i}}%
\ifcsname ans\i \endcsname%
\setcounter{correctcount}{\csname ans\i \endcsname}%
\else%
\setcounter{correctcount}{0}%
\fi%
\foreach \j in {1,2,3,4} {%
\setcounter{optioncount}{\j}%
\ifnum\value{optioncount}=\value{correctcount}%
\shfill{black}\shcol{black}\myellipse{\j}%
\else%
\shfill{red!5!white}\shcol{red}\myellipse{\j}%
\fi}}\\}
\end{center}
\end{multicols}
\end{tcolorbox}}
\makeatother
\begin{document}
\null\vfill
\pagestyle{empty}
\tcbset{colframe=red!50!black,colback=white}
\begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
\LARGE{پاسخنامه خام}‎‎
\end{tcolorbox}
\makesheet[1,2,2,3,3,3,4,4,4,4,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,1,1,3,4,3,4,2,2,1,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,2,2,1,1]{60}%
\newpage
\begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
\LARGE{پاسخنامه خام}‎‎
\end{tcolorbox}
\makesheet[1,3,2,4,2]{60}
\end{document}

خروجیهای شما در دو حالت تکیل شده و تکمیل نشده‌ی پاسخ‌نامه و با نسخه‌ی اولیه‌ی تکلایو 2018 مطابق زیر است:


enter image description here



enter image description here

بهتر است این پرسش و پاسخ را در این زمینه ببینید.

موفق باشید.

پاسخ داده شده خرداد 23, 1397 توسط شاپور مددپور (8,667 امتیاز)
ویرایش شده خرداد 24, 1397 توسط شاپور مددپور
درود بر شما +1
بسیار متشکر از اینکه تجربیات ارزنده خود را در اختیار ما قرار می دهید. (+1)
درود بر شما
+1 رای

ضمن تشکر از دوستان و اساتید عزیز با کسب اجازه از جناب باغبان با یک تغییر جزیی در پاسخ ایشان (صرفا جهت تمرین اینجانب) می توان بدون تغییر در نحوه تولید بیضی ها ابتدا دو دستور بیضی خالی و بیضی پرشده را با همان ساختار قبل به صورت زیر تعریف می کنیم:

\newcommand{\blankellipse}[1]{
    \tikz{\node[draw,fill=red!5!white,inner sep=0pt,ellipse]{\textcolor{red}{~#1~}}}}

\newcommand{\filledellipse}[1]{
    \tikz{\node[draw,fill=black,inner sep=0pt,ellipse]{\textcolor{white}{~#1~}}}}

برای آنکه بیضی های پرشده ظاهر بهتری داشته باشند رنگ شماره داخل آن ها را سفید انتخاب کرده ایم.
اکنون در دستورهای داخل foreach پارامتر \j را در دستور \filledellipse وارد می کنیم. با این توضیحات کد کامل به صورت زیر است:

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{pgffor}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{multicol}
\usepackage[logo=on]{xepersian}
\settextfont{Yas}
\setdigitfont{Yas}
\newcounter{anscount}%
\newcounter{optioncount}
\newcounter{correctcount}
\newcommand{\makesheet}[2][]{
    \setcounter{anscount}{0}%
    \foreach \k in {#1}{%
        \stepcounter{anscount}%
        \expandafter\xdef\csname ans\the\value{anscount}\endcsname{\k}%
    }%
    \begin{tcolorbox}[width=\textwidth]
        \begin{multicols}{3} 
            \begin{center} 
                \noindent
                \foreach \i in {1,...,#2}
                {\fbox{\raisebox{3pt}{\makebox[1cm]{\i}}%
                        \ifcsname ans\i \endcsname%
                            \setcounter{correctcount}{\csname ans\i \endcsname}%
                        \else%
                            \setcounter{correctcount}{0}%
                        \fi%
                        \foreach \j in {1,2,3,4} {%
                            \setcounter{optioncount}{\j}%
                            \ifnum\value{optioncount}=\value{correctcount}%
                                \filledellipse{\j}%
                            \else%
                                \blankellipse{\j}%
                            \fi%
                        }%
                    }\\
                        }
            \end{center}
        \end{multicols}
\end{tcolorbox}%
}
\begin{document}
\pagestyle{empty}
\newcommand{\blankellipse}[1]{
    \tikz{\node[draw,fill=red!5!white,inner sep=0pt,ellipse]{\textcolor{red}{~#1~}}}}

\newcommand{\filledellipse}[1]{
    \tikz{\node[draw,fill=black,inner sep=0pt,ellipse]{\textcolor{white}{~#1~}}}}

\tcbset{colframe=red!50!black,colback=white}
 \begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
    \LARGE{پاسخنامه خام}‎‎
    \end{tcolorbox}
\makesheet{60}%
\newpage
 \begin{tcolorbox}[width=\textwidth,colback=red!5!white,halign=center]
    \LARGE{کلید سوالات}‎‎
\end{tcolorbox}
\makesheet[1,3,4,2,2,1,3,1,2,4,3,2,2,3,4,1,1,3,2,1,1,4,4,4,3,2,1,2,4,3,3,4,2,1,1,1,3,2,4,3,1,2,3,4,2,3,1,1,2,4,1,2,1,3,4,2,1,1,3,2]{60}%

\end{document}

که خروجی کلید سوالات به صورت زیر است:
enter image description here

قابل ذکر است که برای داشتن هم پاسخنامه خام و هم کلید سوالات باید دستور \makesheet{60} بدون آرگومان اختیاری را قبل از دستور با آرگومان اختیاری قرار دهیم.

بدیهی است که این پاسخ به منزله یک پاسخ جدید نیست و همان پاسخ آقای باغبان است.

پاسخ داده شده خرداد 24, 1397 توسط rezaeian (735 امتیاز)
ویرایش شده خرداد 24, 1397 توسط rezaeian
صاحب اختیاری آقای رضاییانی
درود
...