LaTeX में स्नातक की डिग्री, या 150 लाइनों में DSTU 3008-95

छवि
सभी को नमस्कार। हाल ही में, मैंने छात्र जीवन में एक महत्वपूर्ण मोड़ को भी पछाड़ दिया - एक स्नातक की थीसिस। इस उल्लेखनीय घटना के कई औपचारिक विवरणों में, मानक नियंत्रण विशेष रूप से ध्यान देने योग्य है। नहीं, मैं समझता हूं और जोरदार समर्थन करता हूं कि एक शैक्षणिक पाठ के डिजाइन के लिए मानकों सहित मानक आवश्यक हैं। यह सिर्फ इतना है कि हमारे मानक, पश्चिमी लोगों के विपरीत, बल्कि मूर्खतापूर्ण हैं। वे न तो स्याही और न ही कागज बचाते हैं, वे नामकरण द्वारा साहित्य की खोज को सरल नहीं करते हैं, लेकिन नाम के पढ़ने को जटिल करते हैं। इस तथ्य का उल्लेख नहीं करने के लिए कि मानक का पाठ माइक्रोसॉफ्ट वर्ड संपादक में काम करने वाले लोगों द्वारा डिज़ाइन और वर्णित किया गया है। फिर से, मेरे पास वर्ड के खिलाफ कुछ भी नहीं है, यह एक शक्तिशाली प्रणाली है। लेकिन इसमें तकनीकी पाठ टाइप करने के लिए असुविधाजनक है, और लचीलेपन के संदर्भ में यह डोनाल्ड नुथ - लाटेक्स के अमर निर्माण के लिए कई बार हारता है।

तो, डिप्लोमा का मेरा लेखन इस तथ्य से शुरू हुआ कि मैंने डिजाइन DSTU 3008-95 के लिए यूक्रेनी मानक के मानदंडों को स्थापित करने में 4 घंटे बिताए। जहां तक ​​मुझे पता है, यह रूसी GOST के साथ लगभग पूरी तरह से सुसंगत है। मुझे पता था कि तैयार किए गए समाधान थे (उदाहरण के लिए, अव्यवस्था ), लेकिन कुछ परीक्षणों के बाद मैंने प्रत्येक भाग को स्वयं कॉन्फ़िगर करना पसंद किया। प्रशिक्षण के लिए। प्रशिक्षण एक सफलता थी - मैंने LaTeX के बारे में नई चीजों की एक खाई सीखी, इस राक्षस को पूरी तरह से सीखना असंभव है :-)

कटौती के तहत, मैं प्रत्येक विशिष्ट भाग और लेखन में उनके उपयोग की प्रक्रिया, साथ ही साथ विभिन्न छोटी चीजों को पूरी तरह से वर्णित करूंगा जो डिप्लोमा के लेखन को और भी अधिक सरल बनाते हैं। मैं आपको तुरंत चेतावनी देता हूं: कहीं, मेरे फैसले बैसाखी की तरह लग सकते हैं। कहीं वे सार्वभौमिक तो नहीं हैं। मुझे यह पता है, टिप्पणी में टिप्पणियों और सुझावों को समझें, स्वीकार करें और उनका स्वागत करें ;-)

फौजों को घर देना


चलो रिक्त के साथ शुरू करते हैं। मुझे लगता है कि आपके पास वितरण किट स्थापित है (विंडोज पर MiKTeX या लिनक्स / मैक पर समान) और सिरिलिक PsCyr फोंट को निर्देशों के अनुसार कॉन्फ़िगर किया गया है। "फ्लाई पर" अतिरिक्त पैकेजों की स्थापना को सक्षम करने के लिए मत भूलना - आपको उनमें से बहुत कुछ की आवश्यकता होगी :)

मानक को सभी पाठ को 14 टाइम्स न्यू रोमन फ़ॉन्ट में डेढ़ रिक्ति के साथ लिखा जाना चाहिए। अंतिम एक Microsoft Word शब्दावली है: LaTeX में इसके एनालॉग की रचना करने के लिए, extsizes पैकेज को कनेक्ट करें, जो दस्तावेज़ वर्ग के मापदंडों में extsizes जोड़ता है और बाकी सब को कॉन्फ़िगर करता है, जैसा कि नीचे वर्णित है:
\ documentclass [ a4paper,14pt,russian ]{ extreport }

\usepackage { extsizes }
\usepackage { cmap } % pdf
\usepackage [ T2A ]{ fontenc }
\usepackage [ utf8 ]{ inputenc }
\usepackage [ russian ]{ babel }
\usepackage { pscyr }

\usepackage { graphicx } %
\usepackage { amssymb,amsfonts,amsmath,amsthm } %
\usepackage { indentfirst } %
\usepackage [ usenames,dvipsnames ]{ color } %
\usepackage { makecell }
\usepackage { multirow } %
\usepackage { ulem } %

\linespread { 1.3 } %
\renewcommand { \rmdefault }{ ftm } % Times New Roman
\frenchspacing

\begin { document }

\end { document }
सेटिंग \linespread{1.3} (लाइन स्पेसिंग को 1.3 गुना बढ़ाने के लिए) मोटे तौर पर वर्ड वर्ल्ड में "डेढ़ इंटरवल" कहलाता है। cmap पैकेज में परिणामी पीडीएफ में एक वर्ण तालिका शामिल है (मैं PDFLaTeX का उपयोग करता हूं), ताकि एन्कोडिंग को विकृत किए बिना पीडीएफ में सिरिलिक पाठ को कॉपी और खोज करना संभव हो जाए। स्रोत फ़ाइलों के रूप में, मैं उन्हें UTF-8 एन्कोडिंग में संग्रहीत करता हूं, आपकी सामान्य सेटिंग्स के लिए, inputenc साथ पैरामीटर के मूल्य को inputenc । मैं शेष संकुल के उद्देश्य पर थोड़ी देर बाद टिप्पणी करूंगा, जब मैं सीधे डिप्लोमा के लेखन पर चर्चा करूंगा, और डिजाइन के साथ प्रस्तावना नहीं।

पृष्ठ पर अंक लगाना


अंकुरण ऊपरी दाएं कोने में होना चाहिए। मेरे मामले में, यह नंबर 5 से शुरू होता है, क्योंकि पहले 4 पेज कवर पेज, असाइनमेंट शीट, कैलेंडर प्लान और अन्य नौकरशाही द्वारा कब्जा किए जाते हैं। उनके लिए प्रपत्र doc / docx में भेजे गए थे, और उन्हें LaTeX में इस डिज़ाइन का अनुकरण करने के बजाय समय बिताने के बजाय उन्हें प्रिंट करना बहुत आसान है;)

fancyhdr हेडर पैकेज को कनेक्ट fancyhdr , जो पेज हेडर और fancyhdr लिए डिज़ाइन किया गया है, और इसमें किसी भी प्रकार की चूक को अक्षम करें। हेडर के दाहिने कोने में नंबर ( \thepage ) पेज को छोड़कर पेज पूरी तरह से खाली हो जाता है।
\usepackage { fancyhdr }
\pagestyle { fancy }
\fancyhf { }
\fancyhead [ R ]{ \thepage
}
\fancyheadoffset { 0mm }
\fancyfootoffset { 0mm }
\setlength { \headheight }{ 17pt }
\renewcommand { \headrulewidth }{ 0pt }
\renewcommand { \footrulewidth }{ 0pt }
\fancypagestyle { plain }{
\fancyhf {
}
\rhead { \thepage
}}
\setcounter { page }{ 5 } % №5
यह ध्यान दिया जाना चाहिए कि अध्याय का पहला पृष्ठ डिफ़ॉल्ट रूप से सादे पृष्ठ शैली का उपयोग करता है। इसे fancyhdr संदर्भ में भी पुनर्परिभाषित किया जाना चाहिए, ताकि अध्याय के पहले पन्नों पर भी संख्याएँ डाल दी जाएँ (देखें \fancypagestyle )।

छवियों और तालिकाओं के लिए कैप्शन


हम हस्ताक्षर प्रारूप को कॉन्फ़िगर करेंगे, जिसके लिए हम पहले caption पैकेज को caption । चूंकि मुझे कई इंटरकनेक्टेड सब-पार्ट्स के साथ विस्तृत चित्रण पसंद है, इसलिए हम subcaption पैकेज भी शामिल करेंगे। मानक के अनुसार, आकृति का नाम आकृति के नीचे स्थित है, और तालिका का नाम तालिका के ऊपर है। आपको इन स्थानों की स्वयं निगरानी करनी होगी (नीचे देखें), लेकिन आप इस कानून के बारे में पैकेज को बता सकते हैं ताकि यह तदनुसार रिक्त स्थान के आवंटन का अनुकूलन कर सके।
\usepackage [ tableposition=top ]{ caption }
\usepackage { subcaption }
\DeclareCaptionLabelFormat { gostfigure }{ #2 }
\DeclareCaptionLabelFormat { gosttable }{ #2 }
\DeclareCaptionLabelSeparator { gost }{ ~---~ }
\captionsetup { labelsep=gost }
\captionsetup [ figure ]{ labelformat=gostfigure }
\captionsetup [ table ]{ labelformat=gosttable }
\renewcommand { \thesubfigure }{ \asbuk { subfigure }}
यहां, \DeclareCaptionLabelFormat का उपयोग करते हुए \DeclareCaptionLabelFormat नया कस्टम हस्ताक्षर प्रारूप कॉन्फ़िगर किया गया है, जिसे तब दस्तावेज़ के सभी आरेखण और तालिकाओं को सौंपा गया है। इसका पहला पैरामीटर # 1 मानक लेबल पाठ है (मैंने इसे एक अलग पंक्ति के रूप में कॉन्फ़िगर नहीं करना पसंद किया, लेकिन # 1 का उपयोग किए बिना स्पष्ट रूप से लिखने के लिए), दूसरा पैरामीटर # 2 चित्र / तालिका की संख्या है।
\DeclareCaptionLabelSeparator कैप्शन लेबल और आपके द्वारा निर्दिष्ट पाठ के बीच विभाजक सेट करता है। हमारे मामले में, यह एक औसत डैश है।

हमें अंतिम पंक्ति में भी टिप्पणी करनी चाहिए। चूंकि मैं कभी-कभी दृष्टांतों को उप-भागों में विभाजित करता हूं, जो मुझे एक सब- subfigure पैकेज बनाने की अनुमति देता है, इन सबपार्ट्स को क्रमांकित करने की आवश्यकता होती है। यह उन्हें छोटे अक्षरों में क्रम में संख्या करने के लिए प्रथागत है - हालांकि, हमारे मामले में, ये सिरिलिक वर्णमाला के अक्षर होने चाहिए, न कि लैटिन वर्णमाला के! काउंटरेल का सिरिलिक प्रतिनिधित्व ( arabic , roman , latin आदि के सुप्रसिद्ध अभ्यावेदन के साथ सादृश्य द्वारा) पहले से ही babel पैकेज में लागू किया गया है। इसे छोटे सिरिलिक अक्षरों के लिए \asbuk \Asbuk और बड़े के लिए \Asbuk कहा जाता है।

मैं एक तस्वीर के विशिष्ट डिजाइन का एक उदाहरण दूंगा:
\begin { figure }[ ht ]
\centering
\begin { subfigure }[ b ]{ 0.3 \textwidth }
\centering
$$ \begin { array }{ l }
F \to x \ ;| \ ; y \ ;| \ ; (S) \\
T \to F \ ;| \ ; T \ast F \\
S \to T \ ;| \ ; S + T \\
\end { array } $
$
\ caption { }
\end { subfigure
} %
\begin { subfigure }[ b ]{ 0.6 \textwidth }
\centering
\includegraphics [ scale=0.7 ]{ parseTree.png }
\ caption { }
\end { subfigure
}

\ caption { (a) $G$ ;
() $x+y \ast y$ $G$ .
}
\ label { fig_parsetree }
\end { figure }
और टेबल:
\begin { table }[ ht ]
\ caption { }
\ label { tab_weight }
\centering
\begin { tabular }{ |c|c|c|c|c|c|c|c|c| }
\ hline \multirow { 2 }{ * }{ $x_i$ } & \multicolumn { 4 }{ c| }{ $x_j$ } &
\multicolumn { 2 }{ c| }{ } & \multicolumn { 2 }{ c| }{ } \\
\cline { 2-9 } & $X_1$ & $X_2$ & $X_3$ & $X_4$ & $w_i$ &
${ K_ \text { }} _i$ & $w_i$ & ${ K_ \text { }} _i$ \\
\ hline $X_1$ & 1 & 1 & 1.5 & 1.5 & 5 & 0.31 & 19 & 0.32 \\
\ hline $X_2$ & 1 & 1 & 1.5 & 1.5 & 5 & 0.31 & 19 & 0.32 \\
\ hline $X_3$ & 0.5 & 0.5 & 1 & 0.5 & 2.5 & 0.16 & 9.25 & 0.16 \\
\ hline $X_4$ & 0.5 & 0.5 & 1.5 & 1 & 3.5 & 0.22 & 12.25 & 0.20 \\
\ hline \multicolumn { 5 }{ |c| }{ : } & 16 & 1 & 59.5 & 1 \\
\ hline
\end { tabular }
\end { table }
यह सुंदर तालिकाओं को बनाने के लिए \multirow और \multicolumn कमांड के उपयोग पर ध्यान देने योग्य है। वे क्रमशः HTML <table> पैरामीटर: rowspan और colspan के अनुरूप हैं। सच है, पहले multirow पैकेज को जोड़ने की आवश्यकता है।

डिजाइन का परिणाम नीचे दिखाया गया है।
ड्राइंग के लिए:


तालिका के लिए:


सुर्खियों में


DSTU 3008-95 सुर्खियों में सिर्फ एक गाना है। या यों कहें, एक शोकाकुल विचार। हेडर को संरेखित करने के लिए सभी आवश्यकताओं को एक प्रकार की रचनात्मक आत्मा द्वारा शब्द के रूप में तैयार किया गया था: यहां लंघन एक पंक्ति है, यहां दो लाइनें हैं, और डेढ़ अंतराल है, और यहां दोहरी है ... नतीजतन, कुछ समय बाद एक सुंदर समाधान के साथ आने की कोशिश करते हुए, मुझे सभी स्थिरांक खोजने पड़े। पैडिंग और रिक्ति को मैन्युअल रूप से और उन्हें पिक्सेल बिंदुओं में हार्डकोड करें। मुझे लगता है कि यह प्रोग्रामिंग की सबसे घृणित शैली है जिसे मैंने अपने पूरे "कैरियर" में सहारा लिया है। हालांकि इस मामले में, LaTeX का प्रोग्रामिंग से कोई लेना-देना नहीं है :)

हेडर को प्रारूपित करने के लिए, हम titlesec पैकेज का उपयोग करते हैं। मानक के अनुसार, अध्याय (वे खंड हैं) केंद्र में लिखे गए हैं, "अध्याय एन" लाइन से पहले, और उपखंड और पैराग्राफ अध्याय के भीतर गिने जाते हैं, और उन्हें इंडेंट किया जाता है। सब कुछ बोल्ड में टाइप किया गया है, ऊपरी मामले में अध्याय शीर्षकों के साथ भी।

शीर्षक का \titleformat से कॉन्फ़िगर किया गया है। उसके पास निम्न विकल्प हैं:

ये आदेश आपको अध्याय शीर्षक के पाठ के अनिवार्य पूंजीकरण के अपवाद के साथ, सभी आवश्यक डिजाइन प्राप्त करने की अनुमति देते हैं। \MakeUppercase अनन्य रूप से एक पैरामीटर के साथ काम करता है, और इसका उपयोग " \bffamily " जैसे प्रिंट प्रारूप को "अभी और हमेशा के लिए समूह के अंत में" स्विच करने के लिए नहीं किया जा सकता है। इस प्रकार, मैं शीर्षक लेबल (शब्द "अध्याय" या "परिशिष्ट") को कैपिटल करने के लिए इसे लागू करने में सक्षम था, लेकिन शीर्षक पाठ को अपने आप कैप में मुद्रित करना पड़ा। ठीक है, कुछ भी नहीं, निषिद्ध बटन को कई बार दबाने पर यह इतना डरावना नहीं होता है :)
\usepackage { titlesec }

\titleformat { \chapter }[ display ]
{ \filcenter }
{ \MakeUppercase { \chaptertitlename } \thechapter }
{ 8pt }
{ \bfseries }{ }

\titleformat { \section
}
{ \normalsize \bfseries }
{ \thesection }
{ 1em }{ }

\titleformat { \subsection
}
{ \normalsize \bfseries }
{ \thesubsection }
{ 1em }{ }

%
\titlespacing* { \chapter }{ 0pt }{ -30pt }{ 8pt }
\titlespacing* { \section }{ \parindent }{ *4 }{ *4 }
\titlespacing* { \subsection }{ \parindent }{ *4 }{ *4 }
\parindent के लिए इंडेंटेशन सेटिंग में \parindent ध्यान दें, उन्हें पैरा इंडेंटेशन के साथ संरेखित करने के लिए मजबूर करें।

और यह कैसे यह सब अब साधारण \chapter और \section मुद्रित करते समय दिखता है:


खेतों


पेज मार्जिन को अनुकूलित करना आज के कार्यों में सबसे आसान है:
\usepackage { geometry }
\geometry { left=3cm }
\geometry { right=1.5cm }
\geometry { top=2.4cm }
\geometry { bottom=2.4cm }


सूचियों


मानक में सूचियों की आवश्यकताएं इस प्रकार हैं:

दुर्भाग्य से, LaTeX को अंतरिक्ष की itemize बड़ी मात्रा के itemize और वातावरण को घेरना पसंद है, उनके लिए एक विशेष इंडेंटेशन बनाना। इस बुरी आदत को दूर करने के लिए, आप enumitem पैकेज का उपयोग कर सकते हैं और इसे nolistsep सेट कर सकते हैं, जो सभी अतिरिक्त इंडेंट को निष्क्रिय कर देता है। सच है, enumitem को asbuk काउंटरों की बिल्कुल नई प्रस्तुति के बारे में कुछ भी नहीं पता है, जिसके बारे में मैंने ऊपर बात की थी, इसलिए आपको इसे \AddEnumerateCounter साथ इंगित करने की आवश्यकता है। इसका तीसरा पैरामीटर व्यापक प्रतिनिधित्व का एक उदाहरण है (पैकेज मुद्रण करते समय इस चौड़ाई पर ध्यान केंद्रित करेगा)। किसी कारण से (बिना कारण के) मुझे ऐसा लगता है कि टाइम्स न्यू रोमन में सिरिलिक वर्णमाला का सबसे चौड़ा अक्षर ठीक "द" है। किसी भी मामले में, जो व्यक्ति "a" से "m" की लंबाई के साथ एक क्रमांकित सूची बनाता है या मेरे लिए स्वास्थ्य अधिकारियों के कम ध्यान देने योग्य है, जैसा कि :)
\usepackage { enumitem }
\ makeatletter
\AddEnumerateCounter { \asbuk }{ \@asbuk }{ ) }
\ makeatother
\setlist { nolistsep }
\renewcommand { \labelitemi }{ - }
\renewcommand { \labelenumi }{ \asbuk { enumi } ) }
\renewcommand { \labelenumii }{ \arabic { enumii } ) }


सामग्री की तालिका


सामग्री की तालिका प्रस्तावना सेटिंग प्रक्रिया का दूसरा सबसे दर्दनाक चरण है। यह मॉडल के अनुसार ट्यून किया जाना है, इस संबंध में मानक बहुत अधिक क्रिया नहीं है। पैटर्न के अनुसार ट्यूनिंग का परिणाम अंतराल के बीच "जादू स्थिरांक" का एक और गुच्छा है।

विचार करने के लिए विभिन्न छोटी चीजों की सूची में शामिल हैं:

सौभाग्य से, एक tocloft पैकेज है। मैं इस नोट के पाठ में इसके दस्तावेज़ीकरण की नकल नहीं करने जा रहा हूं, इसमें अनगिनत कमांड शामिल हैं जो सामग्री की तालिका में शाब्दिक रूप से हर पिक्सेल को कॉन्फ़िगर करते हैं। ये सभी कमांड "की शैली में प्रतिस्थापन हैं, लेकिन उपधारा के नाम के पाठ और बिंदीदार रेखा की शुरुआत के बीच इसे टाइप करें।" प्रस्तावना में, मैं 9 ऐसे आदेशों का उपयोग करता हूं, जिनके द्वारा और बड़ी सामग्री की तालिका की उपस्थिति को अनुकूलित करें:
\usepackage { tocloft }
\renewcommand { \cfttoctitlefont }{ \hspace { 0.38 \textwidth } \bfseries \MakeUppercase }
\renewcommand { \cftbeforetoctitleskip }{ -1em }
\renewcommand { \cftaftertoctitle }{ \ mbox { } \hfill \\ \ mbox { } \hfill { \footnotesize . } \vspace { -2.5em }}
\renewcommand { \cftchapfont }{ \normalsize \bfseries \MakeUppercase { \chaptername } }
\renewcommand { \cftsecfont }{ \hspace { 31pt }}
\renewcommand { \cftsubsecfont }{ \hspace { 11pt }}
\renewcommand { \cftbeforechapskip }{ 1em }
\renewcommand { \cftparskip }{ -1mm }
\renewcommand { \cftdotsep }{ 1 }
\setcounter { tocdepth }{ 2 } % — subsection
ये आदेश उपरोक्त सूची से सभी आवश्यक छोटी चीजों को कॉन्फ़िगर करते हैं, एक को छोड़कर। विशेष वर्गों को एक विशेष तरीके से संभालना होगा।

विशेष खंड (अमूर्त, परिचय, संक्षिप्त सूची, निष्कर्ष, संदर्भों की सूची)

सूचीबद्ध अनुभाग विशेष रूप से बनाए गए हैं। सबसे पहले, उनमें से प्रत्येक एक नए पृष्ठ से शुरू होता है। यह कोई समस्या नहीं है - \newpage कोई \newpage कमांड जानता है। दूसरे, उनका शीर्षक पृष्ठ के केंद्र में बोल्ड अपर केस में तैयार किया गया है ... और इसे दो पंक्तियों में पाठ से अलग किया गया है। और अंत में, इस बकवास को पूरा करने के लिए, विशेष खंड अध्याय स्तर पर सूचीबद्ध हैं, लेकिन क्रमांकित नहीं हैं, और अध्याय नहीं हैं। ऐसा महसूस करें कि किसी के पास करने को कुछ नहीं था?

स्पष्ट कारणों के लिए \chapter* कमांड उपयुक्त नहीं है: जिन अध्यायों को शुरू किया गया है वे सामग्री की तालिका में शामिल नहीं हैं। इसके अलावा, आपको पाठ से पहले किसी तरह डबल लाइन ब्रेक की व्यवस्था करने की आवश्यकता है - ठीक है, क्या आप हर बार मैन्युअल रूप से \newline नहीं लिखते हैं?

हम आसान तरीकों की तलाश नहीं कर रहे हैं। मैंने अपनी तरह का सेक्शन बनाने का फैसला किया। जैसा कि यह निकला, यह इतना मुश्किल नहीं है।
एक खंड को परिभाषित करने के लिए (मैंने इसे likechapter कहा है), पहले आपको उचित प्रारूपण कमांड को निर्धारित करने की आवश्यकता है। अनुभाग नाम के केंद्र और पूंजीकरण की व्यवस्था करने के लिए - बस थूक। जो मैंने किया - \likechapterheading उस अनुभाग नाम को प्रिंट करता है जो इसे पास करना चाहिए।
\newcommand { \empline }{ \ mbox { } \newline }
\newcommand { \likechapterheading }[ 1 ]{
\begin { center
}
\ textbf { \MakeUppercase { #1 }}
\end { center }
\empline }
हालांकि, अनुभाग को सामग्री की तालिका में शामिल करने और अध्याय के स्तर के साथ गठबंधन करने की भी आवश्यकता है। और यहां आपको पहले से ही थोड़ा चकमा देने की आवश्यकता है।

सैद्धांतिक रूप से, सामग्री की तालिका में एक नई पंक्ति को जोड़ने का काम \addcontentsline साथ किया जाता है। इसके तीन मापदंड हैं:
  1. लाइन को जोड़ने के लिए सूची का प्रकार। हमारे मामले में, यह सामग्री की तालिका - तालिका है।
  2. जिस स्तर पर लाइन लगानी है।
  3. जोड़ने के लिए स्ट्रिंग पाठ।

पहले और तीसरे के साथ, सब कुछ स्पष्ट है। लेकिन आप केवल "अध्याय" को दूसरे के रूप में नहीं लिख सकते हैं, क्योंकि सहायक tocloft , जिसे हम थोड़ा ऊपर सेट करते हैं, लाइन के पहले "अध्याय" शब्द को प्रिंट करेगा। केवल एक ही रास्ता है - अंत तक जाएं और अपना स्वयं का अनुभाग स्तर निर्धारित करें।

जब LaTeX सामग्री की तालिका में एक विशिष्ट स्तर प्रिंट करता है, तो इसे आंतरिक कमांड \l@XXX , जहां XXX स्तर (अध्याय, अनुभाग, आदि) का नाम है। इस कमांड के दो पैरामीटर हैं - हेडर टेक्स्ट और पेज नंबर। टीम का लक्ष्य सीधे एक धराशायी लाइन, इंडेंटेशन और आपकी जरूरत की सभी चीजों के साथ कंटेंट लाइन के टेबल को प्रिंट करना है। यदि हम अपने स्वयं के स्तर को परिभाषित करना चाहते हैं, तो हमें अपने स्तर के नाम के लिए इस तरह की कमांड को परिभाषित करने की आवश्यकता है। फिर, \addcontentsline कमांड को संसाधित करने की प्रक्रिया में, \addcontentsline इसके दूसरे पैरामीटर को देखेगा, इसकी परिभाषाओं के बीच संबंधित \l@XXX ढूंढें, जहां XXX दूसरा पैरामीटर प्रतिस्थापित किया गया है, और जिससे सामग्री की तालिका में पंक्ति समाप्त हो जाती है।

यह कमांड \l@likechapter निर्धारित करने के लिए बनी हुई है (साथ ही, इसके लिए धराशायी लाइन में बिंदुओं के बीच की अवधि के लिए अवधि निर्धारित करना, जैसे कि tocloft ), और \likechapter की परिभाषा समाप्त करना:
\ makeatletter
\renewcommand { \@dotsep }{ 2 }
\newcommand { \l @likechapter }[ 2 ]{ { \bfseries \@dottedtocline { 0 }{ 0pt }{ 0pt }{ #1 }{ #2 }}}
\ makeatother
\newcommand { \likechapter }[ 1 ]{
\likechapterheading { #1
}
\addcontentsline { toc }{ likechapter }{ \MakeUppercase { #1 }}}

अब आप कार्य के परिणाम को देख सकते हैं। यहाँ सामग्री की तालिका की शुरुआत है:


विशेष खंड दिखाने का कोई मतलब नहीं है, मुझे लगता है। यह पृष्ठ के केंद्र में केवल बोल्ड कैपिटलाइज्ड टेक्स्ट है, जो \likechapter{} साथ छपा है।

संदर्भ


स्रोतों से संबंध बनाते समय, मैंने BibTeX का उपयोग नहीं करने का फैसला किया, जिसका मुझे एक हजार बार बाद में पछतावा हुआ। पत्रिका के अगले अंक का वर्णन करते समय इन सभी स्लैश, अवधियों, अल्पविरामों और डैश को ध्यान से रखने की आवश्यकता है। लेकिन, दुर्भाग्य से, मैंने पहले BibTeX का उपयोग नहीं किया था, और इसके डिज़ाइन के कॉन्फ़िगरेशन से निपटने की मेरी इच्छा पहले ही प्रस्तावना के अंत तक समाप्त हो गई थी। क्या अफ़सोस है।

वैसे, मुझे यकीन है कि पहले से ही वर्णित डिस्बर्स प्रोजेक्ट में पहले से ही कॉन्फ़िगर की गई BibTeX फाइलें लगभग पूरी तरह से इस समस्या को हल करती हैं।

लेकिन अभी के लिए, हम विशेष रूप से मेरी प्रस्तावना पर विचार कर रहे हैं। संदर्भों की सूची बनाने के लिए, मैंने शुद्ध रूप में thebibliography और the \bibitem के अच्छे पुराने वातावरण का उपयोग किया। उन्हें थोड़ा कॉन्फ़िगर करने के लिए, यह करना आवश्यक था:
\usepackage [ square,numbers,sort&compress ]{ natbib }
\renewcommand { \bibnumfmt }[ 1 ]{ #1. \hfill } % —
\renewcommand { \bibsection }{ \likechapter { }} %
\setlength { \bibsep }{ 0pt }
अब शीर्षक "संदर्भ" को एक लिकर के रूप में तैयार किया गया है, और तदनुसार सामग्री की तालिका में रखा गया है। natbib पैकेज अच्छी तरह से संख्याओं को संपीड़ित करता है जब इसे "[2, 6-9]" में संदर्भित किया जाता है।

पृष्ठों, आंकड़ों, तालिकाओं, स्रोतों का काउंटर


मानक के लिए आवश्यक है कि काम के लिए सार रेखा "थीसिस: 107 पी।, 14 अंजीर।, 19 टैब।, 2 परिशिष्ट, 28 स्रोतों" से शुरू होता है। स्वाभाविक रूप से, LaTeX हमारे समय का सबसे अच्छा लेआउट सिस्टम नहीं होगा यदि इसमें इन सभी मात्राओं की स्वचालित रूप से गणना करने और कमांड के साथ पाठ में वांछित संख्या डालने का साधन नहीं था।

पेजों से शुरू करते हैं। यहां चीजें आसान हैं: हम lastpage पैकेज को कनेक्ट करते हैं, और टेक्स्ट में हम केवल नए LastPage लेबल को संदर्भित करते हैं जो इसे \pageref* का उपयोग करके LastPage :
\usepackage { lastpage }
% ...
: \pageref * { LastPage } ~., ...

आंकड़ों और तालिकाओं के साथ, टोटकाउंट पैकेज, जो ऐसे उद्देश्यों के लिए लिखा गया था, मदद कर सकता है - एक दस्तावेज़ में विभिन्न वस्तुओं की संख्या की गणना करने के लिए। दुर्भाग्य से, अभी के रूप में, इसमें एक गंभीर खामी है: काउंटरिंग आमतौर पर प्रत्येक अध्याय के अंत में रीसेट किया जाता है जब नंबरिंग के माध्यम से नहीं होता है, ताकि किसी दस्तावेज़ के मामले में जैसे कि रिपोर्ट नहीं, लेख नहीं, हमें कुल आंकड़े नहीं मिलते हैं, लेकिन केवल आंकड़ों की संख्या अंतिम अध्याय। लेखक को बग के बारे में सूचित किया जाता है, और जब वह काम कर रहा होता है, तो उसे वर्कअराउंड ढूंढना आवश्यक होता है।

नुस्खा StackOverflow की विशालता में पाया गया था। हम प्रत्येक प्रकार के ऑब्जेक्ट के लिए अपने स्वयं के काउंटर को परिभाषित करेंगे, और फिर इस काउंटर के मूल्य को ऑक्स-फ़ाइल (संकलन के अंत में, \AtEndDocument ) के साथ \AtEndDocument । अगले संकलन पर, इसे फ़ाइल से लिया जाएगा, और हमने जो कमांड परिभाषित किया है, वह पाठ में आवश्यक संख्या को प्रतिस्थापित करेगा। इस प्रकार, pdfLaTeX के दो शुरू होने के बाद, हमें सही काउंटर वैल्यू वाला टेक्स्ट मिलता है।
\newcounter { totfigures }
\newcounter { tottables }
\ makeatletter
\AtEndDocument { %
\addtocounter { totfigures }{ \value { figure }} %
\addtocounter { tottables }{ \value { table }} %
\immediate \write \@mainaux { %
\string \gdef \string \totfig { \number \value { totfigures }} %
\string \gdef \string \tottab { \number \value { tottables }} %
} %
}
\ makeatother
% ...
: \pageref * { LastPage } ~., \totfig ~., \tottab ~...

इस समाधान में एक घातक दोष है: आपको प्रत्येक आकृति या तालिका में काउंटर मूल्य को मैन्युअल रूप से बढ़ाना होगा। आप केवल प्रत्येक अध्याय के अंत में (संबंधित सिस्टम काउंटर से) काउंटर के आंकड़ों / तालिकाओं की संख्या को जोड़कर जीवन को थोड़ा सरल कर सकते हैं, लेकिन वैसे भी कोड द्वारा कॉपी-पेस्ट मौजूद होगा। हालाँकि, इस प्रक्रिया को स्वचालित किया जा सकता है।

स्वचालन etoolbox । इसमें (अन्य चीजों के बीच) एक अद्भुत \pretocmd , जो आपको सामने के किसी भी कमांड की परिभाषा के लिए कुछ अतिरिक्त कोड असाइन करने की अनुमति देता है। इस मामले में, हम चाहते हैं कि काउंटर को किसी भी कॉल से पहले बदल दिया जाए।
\usepackage { etoolbox }
\pretocmd { \chapter }{ \addtocounter { totfigures }{ \value { figure }}}{ }{ }
\pretocmd { \chapter
}{ \addtocounter { tottables }{ \value { table }}}{ }{ }
मैं ध्यान देता हूं कि मैन्युअल रूप से काउंटर परिवर्तन कमांड को अभी भी दो बार और कॉल करना होगा। एक बार दस्तावेज़ के बहुत अंत में (ऊपर देखें \AtEndDocument )। और एक बार उन अनुप्रयोगों की शुरुआत से पहले जिन्हें अध्याय के रूप में वर्गीकृत किया गया है, लेकिन उन्हें \chapter (नीचे देखें) के साथ नहीं बुलाया जाता है।

अंत में, आप स्रोतों के साथ भी ऐसा कर सकते हैं: एक काउंटर को परिभाषित करें, स्वचालित रूप से इसे बढ़ाएं और संकलन के अंत में इसे एक aux फ़ाइल में डंप करें। केवल इस बार, \bibitem कमांड को \bibitem करना होगा:
\newcounter { totreferences }
\pretocmd { \bibitem }{ \addtocounter { totreferences }{ 1 }}{ }{ }

अब \AtEndDocument (ऊपर देखें) के लिए एक समान लाइन जोड़ना न भूलें:
\string \gdef \string \totref { \number \value { totreferences }} %
और आप " \totref ~ सूत्रों ..." पाठ में लिख सकते हैं

क्षुधा


मुझे अनुप्रयोगों के साथ टिंकर करना पड़ा। सबसे पहले, सामग्री की तालिका के कारण: यह tocloft को कॉन्फ़िगर करने के लिए काम नहीं करता था ताकि यह अध्याय के लिए "अध्याय" शब्द, और आवेदन के लिए "आवेदन" शब्द को मुद्रित कर सके, इस तथ्य के बावजूद कि इसे \chapter रूप में घोषित किया गया था। उसी समय, शीर्षक में आवश्यक शब्द को स्वयं किसी भी समस्या के बिना प्राप्त किया जाता है, शीर्षक \chaptertitlename परिभाषित \chaptertitlename

आगे की हलचल के बिना, मैंने एक बैसाखी का निर्माण किया। मैंने एप्लिकेशन को पैराग्राफ के रूप में प्रारूपित करने का निर्णय लिया। वैसे भी, पाठ में असली पैराग्राफ मैंने कहीं भी उपयोग नहीं किया है। यह एक छोटी सी बात थी - शीर्षक में \paragraph डिस्प्ले को \chapter _ \chapter समान सेट करने के लिए, और इसी तरह की सामग्री को टेबल पर इसी प्रकार के स्तर पर जोड़ें।
\usepackage [ title,titletoc ]{ appendix }

\titleformat { \paragraph }[ display ]
{ \filcenter }
{ \MakeUppercase { \chaptertitlename } \thechapter }
{ 8pt }
{ \bfseries }{ }
\titlespacing* { \paragraph
}{ 0pt }{ -30pt }{ 8pt }

\newcommand { \append }[ 1 ]{
\clearpage
\stepcounter { chapter
}
\paragraph { \MakeUppercase { #1 }}
\empline
\addcontentsline { toc }{ likechapter }{ \MakeUppercase { \chaptertitlename ~ \Asbuk { chapter }\ ;#1 }}}

अब इसे इस तरह इस्तेमाल किया जा सकता है:
\begin { appendices }
\renewcommand \thechapter { \Asbuk { chapter }}
\setcounter { chapter }{ 0 }

\append { }
...
\end { appendices }

होने की असहनीय लपट पर ध्यान दें: आवेदन अनिवार्य रूप से पैराग्राफ होते हैं, जैसे सामग्री की तालिका में लिखा गया है जैसे कि एसकथ्रॉन-एस, लेकिन एक ही समय में मैं उन्हें गिनने के लिए अध्याय काउंटर का उपयोग करता हूं, क्योंकि संक्षेप में अनुप्रयोग अध्याय हैं :) एक काउंटर प्रतिनिधित्व के रूप में \Asbuk लिया जाता है, क्योंकि यह अपरकेस साइरिलिक अक्षरों में संख्या अनुप्रयोगों के लिए प्रथागत है।

अब स्नातक के थीसिस में निर्दिष्ट दो आवश्यक अनुप्रयोगों में से प्रत्येक को कैसे पूरा करें, इसके बारे में अधिक विस्तार से।

परिशिष्ट A: चित्र सामग्री

पहला आवश्यक एप्लिकेशन प्रेजेंटेशन स्लाइड्स है। मैंने Microsoft Power Point में प्रस्तुति दी, यहाँ एक महान उत्पाद के खिलाफ मुझे अब तक कोई शिकायत नहीं है। शायद मेरे जीवन में जल्द ही एक टिपिंग पॉइंट आएगा जब मैं लाटेक्स में प्रस्तुतियां दूंगा, लेकिन अभी तक मैं उस स्तर पर नहीं हूं। मुख्य तर्क यह है कि प्रस्तुति में बड़ी संख्या में सूत्र मैं लाटेक्स की तरह मार्कअप भाषा में टाइप करता हूं, जिसे माइक्रोसॉफ्ट ऑफिस संस्करण 2007 और उससे अधिक में बनाया गया है;)

तो, प्रस्तुति तैयार है, डिप्लोमा के स्रोत कोड के बगल में एक पीपीटीएक्स-फ़ाइल में सहेजा गया है।संकलन के अधिकार में अब इसे स्वचालित रूप से डिप्लोमा पीडीएफ में कैसे डाला जाएगा? विधि मिली, और बहुत सरल थी। हम प्रस्तुति को पीडीएफ में परिवर्तित करेंगे और इस पीडीएफ को एक अद्भुत पैकेज की मदद से जनरेट करेंगे pdfpages

मैंने प्रति पृष्ठ दो स्लाइड प्रदर्शित करने का फैसला किया, जो कि फ्रेम से घिरा हुआ था। प्रक्रिया में, दो बिंदुओं को ध्यान में रखा जाना था। सबसे पहले, आवेदन वाले पृष्ठों को भी क्रमांकित करने की आवश्यकता है - इसलिए आपको पैकेज को कमांड देना नहीं भूलना चाहिए fancyhdrताकि यह शामिल पृष्ठों पर भी काम करे। दूसरे, आवेदन के पहले पृष्ठ पर न केवल प्रस्तुति के पहले दो स्लाइड हैं, बल्कि शीर्षक "परिशिष्ट ए" भी है। पहली और दूसरी दोनों कठिनाइयों को पैरामीटर द्वारा हल किया जाता है pagecommandजो हमारी मुख्य टीम के विकल्पों की सूची में मौजूद है \includepdfतैयार स्रोत कोड:
\usepackage { pdfpages }
% ...
\includepdfset { nup=1x2,frame=true,delta=10mm 10mm,noautoscale=true }
\includepdf [ pages=1-2,scale=0.55,offset=10mm -20mm,pagecommand={ \append { }} ]{ defence.pdf }
\includepdf [ pages=3-,scale=0.55,offset=10mm 0mm,pagecommand={ \fancyhead [ R ]{ \thepage }}]{ defence.pdf }

और परिणाम:


परिशिष्ट बी: सॉफ्टवेयर उत्पाद कोड

मैं एक छोटे से मोनोपॉज़ फॉन्ट में सम्मिलित स्रोत कोड को हाइलाइट करना और पेस्ट करना चाहता हूं ताकि यह डिप्लोमा के एक अच्छे आधे हिस्से पर कब्जा न करे और अपने आप में कागज बर्बाद न करे। अनुप्रयोगों में यह अनुमति है।

पैकेज स्रोत कोड को उजागर करने का एक बड़ा काम करता है listingsउसे बस थोड़ी मदद चाहिए: कोड (विकल्प basicstyle) को प्रिंट करने के लिए किस फ़ॉन्ट के साथ निर्दिष्ट करें, लाइनों में शब्दों को लपेटने के लिए कहें (विकल्प breaklines), और प्रोग्रामिंग भाषा में कीवर्ड के सेट को समायोजित करें (विकल्प morekeywords) - यह C # 2.0 को पहचानता है, और मैंने C / 4.0 में लिखा है। पैकेज सब कुछ के साथ सामना करेगा, यहां तक ​​कि उसके बगल में स्थित फ़ाइल से स्रोत पाठ को लोड करें।
\usepackage { listings }
%...
\append { }
\lstset { language= [ Sharp ] C,
morekeywords= { yield,var,get,set,from,select,partial
} ,
breaklines=true,
basicstyle= \footnotesize \ttfamily }
\linespread { 1 } %
\lstinputlisting { MyCoolProjectClass.cs }


कार्यक्षेत्र संगठन


डीएएसटीयू का अनुवाद एलईटीएक्स पर 3008-95 मानक खत्म हो गया है। मेरी प्रस्तावना में अंतिम कुछ पंक्तियाँ इस बात से संबंधित हैं कि थीसिस में कई खंडों और उप-वर्गों के साथ काम को व्यवस्थित करना सबसे सुविधाजनक कैसे था।

बेशक, हम पूरे दस्तावेज़ को कई फ़ाइलों में विभाजित करेंगे - एक टेक्स फ़ाइल प्रति उपधारा (अनुभाग)। हम प्रत्येक अध्याय को एक अलग सबफ़ोल्डर में संग्रहीत करेंगे, जैसे नाम chapter_ProgramSynthesis। इस फ़ोल्डर में एक फ़ाइल होगी chapter_ProgramSynthesis.texजिसमें अध्याय के उप-वर्गों की एक विधानसभा होगी , sec_XXX.texविशिष्ट उप-वर्गों के साथ वास्तविक फाइलें , और सभी आवश्यक अतिरिक्त सामग्री (उदाहरण के लिए, चित्र)।

मुख्य दस्तावेज़ के मुख्य भाग में एक अध्याय फ़ाइल शामिल करने और इसे अनुमति देने के लिए, बदले में, सबफ़ाइल्स शामिल करें और इसके सबफ़ोल्डर में सामग्री के लिए पथ देखें, हम पैकेज का उपयोग करेंगे importइसमें एक अद्भुत टीम है \subimportजो दो मापदंडों को लेती है - एक फ़ोल्डर जो अस्थायी रूप से एक फ़ाइल खोज बन जाता है, और एक सीधे शामिल फ़ाइल होती है। एक डिप्लोमा में अध्याय शामिल करने के लिए, हम एक सहायक कमांड को परिभाषित करते हैं, और अब हम आसानी से नाम से अध्याय का उल्लेख कर सकते हैं।

मुख्य फ़ाइल में diploma.tex:
\usepackage { import }
\newcommand { \includechapter }[ 1 ]{ \subimport { chapter_#1/ }{ chapter_#1 }}
\newcommand { \inputintro }{ \ input { sec_Intro } \newpage }
% ...
\includechapter { ProgramSynthesis }


फ़ाइल में chapter_ProgramSynthesis/chapter_ProgramSynthesis.tex:
\chapter { PROGRAM SYNTHESIS }

\inputintro
\ input { sec_Basics }
\ input { sec_Stages }
\ input { sec_Example }
\ input { sec_Conclusions }

फ़ाइलें sec_Basics.texऔर अन्य एक ही सबफ़ोल्डर में हैं chapter_ProgramSynthesisएक ही सबफ़ोल्डर से छवियों का लिंक सीधे होता है - लेख की शुरुआत में उदाहरण की परिभाषा देखें। मैंने शुद्ध पूर्णतावाद से

टीम का \inputintroनिर्धारण किया: चूंकि मैं हमेशा उप-परिचय "परिचय" कहता हूं sec_Intro.texऔर इसके बाद एक नया पृष्ठ शुरू करता हूं , तो डुप्लिकेट कोड क्यों लिखें? :-)

निष्कर्ष


इस पर, 150-पंक्ति की प्रस्तावना का टाइटैनिक विवरण पूर्ण माना जा सकता है। एक बार फिर: मुझे यह नहीं लगता कि यह सभी काम अपने "शुद्ध" रूप में मानक का पालन करने के लिए एक मानक के रूप में किया जाना चाहिए - तैयार किए गए समाधानों का उपयोग करना बहुत आसान है। लेकिन मुझे आशा है कि जैसा कि आप इस लेख को पढ़ते हैं, कई लाटेकस उत्साही लोग कई नए दिलचस्प उपकरण और क्षमताओं को सीखेंगे, उपयोगी संकुल के साथ टूलबॉक्स को समृद्ध करेंगे, और, शायद, एक या दो नोट लें।

अंत में, हम लाटेक्स को इस असीमित शक्ति के लिए प्यार करते हैं, है ना? ;) अपने लेआउट के साथ गुड लक!

UPD: सभी एक साथ संदर्भ द्वारा

Source: https://habr.com/ru/post/In144648/


All Articles