खाली परीक्षण तैयार करना कोई मजेदार गतिविधि नहीं है। आपको न केवल प्रश्नों और उत्तर विकल्पों की एक सूची बनाने की आवश्यकता है, बल्कि फॉर्म भी बनाएं, और फिर सही उत्तर विकल्पों के साथ अपने आप को एक संदर्भ फ़ॉर्म के लिए तैयार करें (इसे जांचना आसान बनाने के लिए)।
हालाँकि, TeX एक बहुत शक्तिशाली प्रणाली है जो घन समीकरणों को भी हल कर सकती है! क्या वह इतने आसान काम का सामना नहीं कर सकती? नहीं, और कैसे!
इसलिए, हम एक सरल शैली फ़ाइल लिखेंगे जो आपको पाठ से अनुमति देती है
\documentclass[a4paper,14pt]{extarticle} \usepackage[koi8-r]{inputenc} % \usepackage[russian]{babel} % \usepackage{./TESTS} % \begin{document} \begin{enumerate} \begin{q}{ , ?} \item \good \item \end{q} \begin{q}{ ?} \item 3 \item 4 \item \item 2-4 \good \end{q} \begin{q}{ / ?} \item \item 4 (\verb'\q', \verb'\good', \verb'\showtbl' \verb'\trueans')\good \item 3 \end{q} \end{enumerate} \newpage \showtbl \newpage \trueans \end{document}
इस परीक्षण को प्राप्त करें:

यहाँ इस तरह के एक फार्म है:

और यहाँ इस तरह के एक मानक है:

इसके लिए हमें थोड़ी जरूरत है। सबसे पहले, एन्यूमरेट वातावरण को पुनर्परिभाषित करें ताकि यह उस तरह से दिखे जिस तरह से हमें इसकी आवश्यकता है। इसके अलावा, इस वातावरण को हमारे अपने काउंटर पर निर्भर होना चाहिए, जिसका उपयोग हम उत्तर संख्या और प्रश्नों की तुलना करने के लिए कर सकते हैं:
\newcounter{lst} \renewenvironment{enumerate}
पहला कमांड हमने अपना स्वयं का lst काउंटर जोड़ा। फिर हमने एन्यूमरेट वातावरण को पुनर्परिभाषित किया: यह lst काउंटर का उपयोग करेगा, प्रश्न संख्या के बाद एक बिंदी लगाई जाएगी, हम अतिरिक्त स्थान नहीं डालेंगे (दो-मिलीमीटर के अंतर को छोड़कर एक दूसरे से प्रश्नों को अलग करते हुए)।
अगला, हम पर्यावरण q को परिभाषित करते हैं जिसमें हम उत्तरों को "लपेटेंगे"। यह एक क्रमांकित सूची होनी चाहिए, जिसकी संख्या रूसी पत्रों में दी गई है। उसके लिए हम अपना काउंटर भी लगाएंगे।
\newcounter{qwest} \def\theqwest{\arabic{qwest}} \newenvironment{q}[1]{\item #1 \begin{list}{\asbuk{qwest})}{\usecounter{qwest}}}{\end{list}\par}
हम पर्यावरण को एक आवश्यक पैरामीटर के साथ सेट करते हैं - प्रश्न का पाठ।
सही उत्तर को चिह्नित करने के लिए, आप मानक TeXovsky फ़ाइल में आउटपुट करने के साधनों का उपयोग कर सकते हैं, लेकिन आप साइकिल को रोक नहीं सकते हैं, लेकिन एक तैयार इंटरफ़ेस - लेटेक्स लेबल का उपयोग करें। चूंकि लेबल अंतिम बदले हुए काउंटर के मूल्य को संग्रहीत करता है, इसे सही उत्तर के पाठ के बाद रखने पर, हम स्वचालित रूप से इस उत्तर की संख्या को बचा लेंगे। लेकिन प्रश्न संख्या को मैन्युअल रूप से सहेजना होगा, हम इसे उपसर्ग "q" के साथ लेबल टेक्स्ट में डालेंगे:
\newcount\total \total=0 \def\good{\label{q\arabic{lst}}\global\advance\total by1}
कुल काउंटर में कुल प्रश्न होंगे। ध्यान दें कि यदि हम एक प्रश्न में एक से अधिक अच्छी कमांड का उपयोग करते हैं, तो हमें एक त्रुटि मिलती है (कुल काउंटर प्रश्नों की कुल संख्या को पार कर जाएगा, त्रुटि पाठ एक अमान्य 'q' लिंक का संकेत देगा)।
प्रपत्र और मानक बनाने के लिए, हमें अतिरिक्त काउंटर की आवश्यकता है:
\newcount\cone \newcount\ctwo \newcount\cthree
इसके अलावा, हम सहायक कमांड को परिभाषित करते हैं। हमारे लिंक "q <प्रश्न संख्या>" से सही उत्तर निकालने के लिए (और इसलिए कि यह काउंटर वैल्यू है), रेफरी कमांड को फिर से परिभाषित करें:
\def\f@rst#1#2{#1} \def\ref#1{\expandafter\@setref\csname r@#1\endcsname\f@rst#1}
हम प्रति पंक्ति 10 प्रश्नों की तालिका के रूप में और उत्तर के फार्म और मानक तैयार करेंगे, और तब से हमें सही उत्तर भी भरना होगा (जिसे हम कॉलम के रूप में व्यवस्थित करते हैं), इस तालिका में एक प्रश्न के अनुरूप प्रत्येक सेल एक नेस्टेड स्तंभ तालिका होगी। गैर-मौजूद प्रश्नों की संख्या (जब प्रश्नों की संख्या दस के एक से अधिक नहीं है) को प्रतीक
X से बदल दिया जाता है।
प्रपत्र शीर्षलेख परीक्षण और संदर्भ दोनों के लिए समान है। इसलिए, दोनों ही मामलों में हम इस हेडर को बनाने के लिए एक ही कमांड का उपयोग करते हैं:
\def\l@@n@{&} \def\l@n@{\ifnum\cone<\ctwo\gdef\c@ll{\number\cone}\else\gdef\c@ll{\bf X}\fi \global\advance\cone by1\global\advance\cthree by1 \l@@n@\hbox to 1cm{\hfil\c@ll\hfil} \ifnum\cthree<10\l@n@\fi}
पहली परिभाषा बनानी पड़ी, क्योंकि अन्यथा, दूसरा चरित्र और प्रकट किया गया था।
यदि वर्तमान प्रश्न (कोन) की संख्या कुल प्रश्नों (ctwo) से कम है, तो l @ n @ कमांड जाँचता है, यदि हां, तो प्रश्न की संख्या कॉलम हैडर में रखी गई है, अन्यथा, प्रतीक
X। वर्तमान प्रश्न की संख्या बढ़ जाती है, जैसे वर्तमान पंक्ति (cthree) में प्रश्नों की संख्या का काउंटर, यदि यह काउंटर दस से कम है, तो उसी कमांड का पुनरावर्ती कॉल जारी रहता है।
रिक्त तालिका की सामग्री सरल (खाली तालिका) है, इसलिए इसे "एक बार में" खींचना तार्किक है:
\def\bl@nk{\hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline \hbox to 2.5cm{\hfil )\hfil}&&&&&&&&&&\\\hline\hline}
यह केवल उत्तर संख्या और खाली कोशिकाओं के साथ एक तालिका खींचता है।
संदर्भ फॉर्म के लिए, उत्तर की संख्या को ध्यान में रखना आवश्यक है, इसलिए प्रत्येक प्रश्न के लिए हम एक अलग तालिका बनाएंगे, जिसकी सामग्री सही उत्तर के अनुरूप है:
\def\markX{\hbox to 1cm{\hfil\bf X\hfil}} \def\@@one{\markX\\\hline\\\hline\\\hline\\} \def\@@two{\\\hline\markX\\\hline\\\hline\\} \def\@@three{\\\hline\\\hline\markX\\\hline\\} \def\@@four{\\\hline\\\hline\\\hline\markX\\} \def\the@ns#1{\hbox to 1cm{\begin{tabular}{|c}\ifcase#1\null\or\@@one\or \@@two\or\@@three\or\@@four\fi \end{tabular}}}
हमने स्क्रिबलिंग को कम करने के लिए मार्कएक्स कमांड को परिभाषित किया, @@ एक ... @@ चार कमांड एक स्तंभ तालिका प्रदर्शित करते हैं जिसमें पहली ... चौथी पंक्ति एक
एक्स के साथ चिह्नित होती है। @ Ns कमांड तर्क की वैल्यू के आधार पर सही नेमप्लेट जारी करता है - सही उत्तर की संख्या।
संदर्भ फ़ॉर्म भरने के लिए, निम्नलिखित आदेशों का उपयोग करें:
\def\l@@@{\ifnum\cone<\ctwo\gdef\c@ll{\the@ns{\ref{q\number\cone}}}\else\gdef\c@ll{}\fi \global\advance\cone by1\global\advance\cthree by1 \l@@n@\c@ll\ifnum\cthree<10\l@@@\fi} \def\@@tru{\global\advance\cone by-10 \global\cthree=0\hbox to 2.5cm{\begin{tabular}{|c} \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil}\\\hline \hbox to 2.5cm{\hfil )\hfil} \end{tabular}}\l@@@\\\hline\hline}
दूसरा कमांड सीधे सही उत्तरों के साथ 10 प्रश्नों के लिए प्लेट की सामग्री को भरता है; पहला - पुनरावर्ती रूप से आवश्यक कॉलम लेबल्स को प्रतिस्थापित करता है। यह लगभग उस कमांड के समान काम करता है जो प्रश्नों की संख्या के साथ हेडर बनाता है, लेकिन प्रश्न की संख्या के बजाय, एक प्लेट को प्रतिस्थापित करता है जो इस प्रश्न के सही उत्तर को इंगित करता है।
सभी तालिकाओं के पुनरावर्ती उत्पादन के लिए (चूंकि हमारे पास दस से अधिक प्रश्न हो सकते हैं, क्रमशः एक से अधिक होंगे), कमांड
\def\@@tmp{\ifnum\cone<\ctwo\global\cthree=0 \l@n@\\\hline\bl@nk\@@tmp\fi}
फॉर्म को शोब्बल कमांड द्वारा भरा जाता है, जो टेबल हेडर (m @ keh @ ader) प्रदर्शित करता है, फिर टेबल बॉडी (@@ tmp) और अंत में, टेबल बेस (m @ kefoot @ r):
\def\m@keh@ader{\begin{center}\begin{tabular}{||c|c|c|c|c|c|c|c|c|c|c||} \hline\hline .~&\multicolumn{10}{|c||}{ }\\\hline} \def\m@kefoot@r{\end{tabular}\end{center}} \def\showtbl{{\tabcolsep=0pt\global\ctwo=\total\global\cone=0 \m@keh@ader\@@tmp\m@kefoot@r}}
खैर, संदर्भ फॉर्म के निर्माण को लागू करने के लिए, हमें @@ tru के साथ bl @ nk कमांड को प्रतिस्थापित करने की आवश्यकता है (ताकि खाली कोशिकाओं के बजाय निशान वाले सेल तैयार किए जाएं), और फिर वही काम करें जैसा कि showtbl कमांड ने किया था:
\def\trueans{{\tabcolsep=0pt\global\ctwo=\total\global\cone=0 \m@keh@ader\gdef\bl@nk{\@@tru}\@@tmp\m@kefoot@r}}
यही है, हमारी स्टाइल फाइल तैयार है।