diff --git a/Latex/BYUPhysForDegree.cls b/Latex/BYUPhysForDegree.cls new file mode 100644 index 0000000..e4984ed --- /dev/null +++ b/Latex/BYUPhysForDegree.cls @@ -0,0 +1,618 @@ +% Revision: 07-25-2007 +% Revision History +% 07-10-2008 : Corrected Alignment of signature boxes on Masters/PhD Approval page +% 07-25-2007 : Corrected some spelling errors +% 05-16-2006 : Added etd option and moved most packages from class file to template +% 05-15-2006 : Initial version. +% +% Known bugs +% Having a tiny bit of the abstract spill to second page defeats page number removal. +% Workaround: make the abstract a little longer or a little shorter. +% +% The BYUPhys class is for producing theses and dissertations +% in the BYU department of physics and astronomy. You can supply +% the following optional arguments in the square brackets to +% specify the thesis type: +% +% senior : Produces the senior thesis preliminary pages (default) +% honors : Produces the honors thesis preliminary pages +% masters : Produces the masters thesis preliminary pages +% phd : Produces the PhD dissertation preliminary pages +% +% The default format is appropriate for printing, with blank pages +% inserted after the preliminary pages in twoside mode so you can +% send it directly to a two-sided printer. However, for ETD +% submission the blank pages need to be removed from the final output. +% The following option does this: +% +% etd : Produces an electronic copy with no blank pages in the preliminary section +% +% The rest of the class options are the same as the regular book class. +% A few to remember: +% +% oneside : Produces single sided print layout (recommended for theses less than 50 pages) +% twoside : Produces single sided print layout (the default if you remove oneside) +% +% The BYUPhys class provides the following macros: +% +% \makepreliminarypages : Makes the preliminary pages +% \clearemptydoublepage : same as \cleardoublepage but doesn't put page numbers +% on blank intervening pages +% \singlespace : switch to single spaced lines +% \doublespace : switch to double spaced lines +% +% ------------------------------------------------------------------------------------------------------ +% +\NeedsTeXFormat{LaTeX2e} \ProvidesClass{BYUPhysForDegree} + +% ---------------------------- declarations ------------------------- +% +% These macros are used to declare arguments needed for the +% construction of the preliminary pages + +% The year and month the degree is awarded +\newcommand{\University}[1]{\gdef\@University{#1}} +\newcommand{\Faculty}[1]{\gdef\@Faculty{#1}} +\newcommand{\Chair}[1]{\gdef\@Chair{#1}} +\newcommand{\Lab}[1]{\gdef\@Lab{#1}} + +\newcommand{\GrText}[1]{\gdef\@GrText{#1}} +\newcommand{\AcadGroup}[1]{\gdef\@AcadGroup{#1}} +\newcommand{\AdvisorText}[1]{\gdef\@AdvisorText{#1}} +\newcommand{\ConsultantText}[1]{\gdef\@ConsultantText{#1}} + +\newcommand{\ApprovalText}[1]{\gdef\@ApprovalText{#1}} +\newcommand{\ApprovalAText}[1]{\gdef\@ApprovalAText{#1}} +\newcommand{\ApprovalBText}[1]{\gdef\@ApprovalBText{#1}} + +\newcommand{\DateText}[1]{\gdef\@DateText{#1}} + +\newcommand{\Year}[1]{\gdef\@Year{#1}} +\newcommand{\Month}[1]{\gdef\@Month{#1}} +\newcommand{\City}[1]{\gdef\@City{#1}} + +% The full name of the degree +\newcommand{\degree}[1]{\gdef\@degree{#1}} +% The name of this document (thesis/dissertation) +\newcommand{\docname}[1]{\gdef\@docname{#1}} + +% First line of title +%\newcommand{\TitleTop}[1]{\gdef\@TitleTop{\mbox{\uppercase{#1}}}} +\newcommand{\TitleTop}[1]{\gdef\@TitleTop{\mbox{#1}}} +\newcommand{\TitleTopEng}[1]{\gdef\@TitleTopEng{\mbox{#1}}} + +% Second line of title +\newcommand{\TitleBottom}[1]{\gdef\@TitleBottom{\mbox{#1}}} +\newcommand{\TitleBottomEng}[1]{\gdef\@TitleBottomEng{\mbox{#1}}} + +% Abstract text +\newcommand{\Abstract}[1]{\gdef\@Abstract{#1}} +\newcommand{\AbstractEng}[1]{\gdef\@AbstractEng{#1}} +\newcommand{\AbstractText}[1]{\gdef\@AbstractText{#1}} + +% Acknowledgments text +%\newcommand{\Acknowledgments}[1]{\gdef\@Acknowledgments{#1}} +%\newcommand{\AcknowledgmentsText}[1]{\gdef\@AcknowledgmentsText{#1}} + +% The author's name +\newcommand{\AuthorText}[1]{\gdef\@AuthorText{#1}} +\newcommand{\Author}[1]{\gdef\@Author{#1}} +\newcommand{\AuthorEng}[1]{\gdef\@AuthorEng{#1}} +\newcommand{\AuthorGenitiveCase}[1]{\gdef\@AuthorGenitiveCase{#1}} + +% The name of the advisor +\newcommand{\Advisor}[1]{\gdef\@Advisor{#1}} +\newcommand{\AdvisorDegree}[1]{\gdef\@AdvisorDegree{#1}} +% The name of the consultant +\newcommand{\Consultant}[1]{\gdef\@Consultant{#1}} +\newcommand{\ConsultantDegree}[1]{\gdef\@ConsultantDegree{#1}} + +% The name of the committee member 2 +\newcommand{\MemberA}[1]{\gdef\@MemberA{#1}} + +% The name of the committee member 3 +\newcommand{\MemberB}[1]{\gdef\@MemberB{#1}} + +% The name of the committee member 4 +\newcommand{\MemberC}[1]{\gdef\@MemberC{#1}} + +% The name of the committee member 5 +\newcommand{\MemberD}[1]{\gdef\@MemberD{#1}} + +% The name of the department chair +\newcommand{\DepRep}[1]{\gdef\@DepRep{#1}} + +% The title of the department chair (allow for associate chair, etc.) +\newcommand{\DepRepTitle}[1]{\gdef\@DepRepTitle{#1}} + +% The name of the department undergraduate coordinator +\newcommand{\UgradCoord}[1]{\gdef\@UgradCoord{#1}} + +% The name of the dean +\newcommand{\Dean}[1]{\gdef\@Dean{#1}} + +% The title of the dean +\newcommand{\DeanTitle}[1]{\gdef\@DeanTitle{#1}} + +% The name of the honors dean +\newcommand{\HonorsDean}[1]{\gdef\@HonorsDean{#1}} + +% Set default values for fields +\University{2010} + \Year{2010} + \Month{Month} + \Author{Author} + \TitleTop{Title} + \TitleBottom{ } % default is empty + \Abstract{Abstract text goes here.} +% \Acknowledgments{Acknowledgment text goes here.} +% \degree{Bachelor of Science} + \docname{Master Thesis} + \Advisor{Advisor} + \Consultant{} + \ConsultantDegree{} + \ConsultantText{} + \MemberA{Committee Member A} + \MemberB{Committee Member B} + \MemberC{Committee Member C} + \MemberD{Committee Member D} + \DepRep{Department Chair Name} + \DepRepTitle{Chair} + \Dean{Dean Name} + \DeanTitle{Associate Dean} + \HonorsDean{Honors Dean Name} + \UgradCoord{Department Ugrad Coordinator } + +% ---------------------------- options ------------------------------ + +% A command to switch to single spaced lines +\newcommand{\singlespace}{\renewcommand{\baselinestretch}{1}\small\normalsize} + +\newcommand{\oneandhalfspace}{\renewcommand{\baselinestretch}{1.33}\small\normalsize} + +% A command to switch to double spaced lines +\newcommand{\doublespace}{\renewcommand{\baselinestretch}{1.66}\small\normalsize} + +% A command pirated from chngpage.sty +\DeclareRobustCommand{\ch@ngetext}{% + \setlength{\@colht}{\textheight}\setlength{\@colroom}{\textheight}% + \setlength{\vsize}{\textheight}\setlength{\columnwidth}{\textwidth}% + \if@twocolumn% + \advance\columnwidth-\columnsep \divide\columnwidth\tw@% + \@firstcolumntrue% + \fi% + \setlength{\hsize}{\columnwidth}% + \setlength{\linewidth}{\hsize}% +} + +% A command to make margins right for the initial single sided business. +\newcommand{\preliminarymargins}{% + \addtolength{\textwidth}{-0.5in}% + \addtolength{\evensidemargin}{0.5in}% + \ch@ngetext% + } + +% A command to fix the margins after the initial single sided business. +\newcommand{\fixmargins}{% + \addtolength{\textwidth}{0.5in} + \addtolength{\evensidemargin}{-0.5in} + \ch@ngetext% +} + +% Define the preliminary section for a senior thesis. +% The senior option is essentially ignored since it is the default + \newcommand{\makepreliminarypages}{ + \preliminarymargins + \titlepage +% \copyrightpage +% \seniorapprovalpage + \abstractpage +% \acknowledgmentspage + \fixmargins + \renewcommand{\clearemptydoublepage}{\cle@remptydoublep@ge} + } + +% Define the honors thesis preliminary section if the 'honors' option is specified +\DeclareOption{honors}{ + \renewcommand{\makepreliminarypages}{ + \preliminarymargins + \honorstitlepage + \copyrightpage + \seniorapprovalpage + \abstractpage +% \acknowledgmentspage + \fixmargins + \renewcommand{\clearemptydoublepage}{\cle@remptydoublep@ge} + } +} + +% Changes to masters thesis preliminary section if the 'masters' option is specified +\DeclareOption{masters}{ + \degree{Master of Science} + \docname{thesis} + \renewcommand{\makepreliminarypages}{ + \preliminarymargins + \titlepage + \copyrightpage + \masterapprovalpage + \acceptancepage + \abstractpage +% \acknowledgmentspage + \fixmargins + \renewcommand{\clearemptydoublepage}{\cle@remptydoublep@ge} + } +} + +% Changes to PhD preliminary section if the 'phd' option is specified +\DeclareOption{phd}{ + \degree{Doctor of Philosophy} + \docname{dissertation} + \renewcommand{\makepreliminarypages}{ + \preliminarymargins + \titlepage + \copyrightpage + \phdapprovalpage + \acceptancepage + \abstractpage +% \acknowledgmentspage + \fixmargins + \renewcommand{\clearemptydoublepage}{\cle@remptydoublep@ge} + } +} + +% --------------------- Some commands to handle the single sided preliminary pages ------------------ + +% Define the '\clearemptydoublepage' command to clear pages but not number any blank pages inserted. +% This is taken from the BYUThesis.cls file +\let\cle@rdoublep@ge\cleardoublepage +\newcommand{\cle@remptydoublep@ge}{ + \clearpage + \if@twoside + \ifodd\c@page\else + \fi\fi + {\pagestyle{empty}\cle@rdoublep@ge}} +\newcommand{\clearemptydoublepage}{\cle@remptydoublep@ge} + + +% Create an abstract environment which is single sided, even in a double sided book. +% again, this was taken from BYUThesis.cls +\def\skip@bstr@ctp@ges{\relax} +\def\@@skip@bstr@ctp@ges{% + \if@twoside + \ifodd\c@page\else + \vbox{\vbox to \vsize{}} + \clearpage\fi + \else + \fi + \afterpage{\skip@bstr@ctp@ges} +} +\newenvironment{abstractenv}{ + \def\skip@bstr@ctp@ges{\@@skip@bstr@ctp@ges} + \afterpage{\skip@bstr@ctp@ges \thispagestyle{empty}} + \pagestyle{empty} +} + +% Redefine above commands if etd option is specified. The blank pages make printing nice, +% but they don't want them in the submitted PDF +\DeclareOption{etd}{ + \renewcommand{\clearemptydoublepage}{ \clearpage } + \renewenvironment{abstractenv}{\afterpage{\thispagestyle{empty}}\pagestyle{empty}}{} + } + +% ------------------------ Load the class and needed packages --------------------------------- + +% Load the book class +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions\relax +\LoadClass[a4,12pt]{article} + +% The afterpage package is required to make single sided formal pages +% in a double sided environment +\RequirePackage{afterpage} + +% Note: the hyperref package is required to make an appropriate ETD. +% However, we don't require it here since it is supposed to be the last +% package loaded and students may want to load other packages in the +% main tex file. So that this class file doesn't crash if the student +% forgets to load hyperref, we have used the following commands below: +% +% \providecommand\phantomsection{} +% \providecommand\pdfbookmark[3][]{} +% +% These commands provide dummy versions of the macros, but won't +% bother the real versions if the hyperref package is loaded in the +% tex file. + + + + +% ---------------------------- main code ---------------------------- + +% Set the margins to BYU specifications for the single sided preliminary +% pages. At the end of the \makepreliminarypages command we fix the margins +% to be appropriate alternating values for double sided printing (if selected). +% If the \makepreliminarypages macro is not run, this never gets fixed. + \setlength{\marginparwidth}{0pt} + \setlength{\marginparsep}{0pt} + \setlength{\oddsidemargin}{0.3in} + \setlength{\evensidemargin}{0in} + \setlength{\textwidth}{6in} + \setlength{\topmargin}{0in} + \setlength{\headheight}{0.125in} + \setlength{\headsep}{0.25in} + \setlength{\textheight}{8.625in} + \setlength{\footskip}{0.25in} + \raggedbottom + +% Redefine the Table of Contents to deal with some blank page +% and bookmarking issues relating to ETD submission +%\let\TEMPtableofcontents\tableofcontents +%\renewcommand{\tableofcontents}{ + % \clearemptydoublepage + %\providecommand\phantomsection{} \phantomsection + %\addcontentsline{toc}{chapter}{Оглавление} + %\TEMPtableofcontents +%} + +% Redefine the List of Figures to deal with some blank page +% and bookmarking issues +%\let\TEMPlistoffigures\listoffigures +%\renewcommand{\listoffigures}{ + % \providecommand\phantomsection{} \phantomsection + %\addcontentsline{toc}{chapter}{List of Figures} + %\TEMPlistoffigures +%} + +% Redefine the Bibliography to deal with a bookmarking issues +\let\TEMPbibliography\bibliography +\renewcommand{\bibliography}{ + \providecommand\phantomsection{} \phantomsection + %\addcontentsline{toc}{chapter}{Литература} + \TEMPbibliography +} + + + +%---------------------------- The Preliminary Page Definitions -------------------------- + +% ============================== Title Page =============================== + \renewcommand{\titlepage}{ + \thispagestyle{empty} + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[1]{Title Page}{bm:Title} + \includegraphics[height=4cm,keepaspectratio]{./gzlogo.png}\\[0.1cm] + %\vspace*{0.375in} + {\large \@University\\} + \@Faculty\\ + {\footnotesize \@Chair\\} + {\scriptsize \@Lab\\[\baselineskip]} + \vfill + {\Large \@Author \\[\baselineskip]} + {%\HRule \\[0.4cm] + \Large \textbf{\@TitleTop}\\ + \textbf{\@TitleBottom}\\[\baselineskip] + \large \@docname \\[\baselineskip] } + %\HRule \\[1.5cm] + \normalsize + \vfill + \begin{flushright} + % \emph{\@AuthorText:\\} + % {\small \@GrText~\@AcadGroup\\} + + \textbf{\@AdvisorText:\\} + {~ \@AdvisorDegree~ \\ \@Advisor\\} + + + \emph{\@ConsultantText:\\} + {~ \@ConsultantDegree~ \@Consultant\\} + \end{flushright} + \vfill + + %\vskip0.667in + %\@degree \\ + \vfill + + \@City, \@Year \\[\baselineskip] + \end{center} + \clearemptydoublepage + } + + + +% ============================== Honors Title Page ======================== +\newcommand{\honorstitlepage}{ + \thispagestyle{empty} + \begin{center} + %\providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Title Page}{bm:Title} + \vspace*{0.375in} + \@TitleTop\\[\baselineskip] + \@TitleBottom\\ + \vfill + \@Author, + \vfill + %Submitted to Brigham Young University in partial fulfillment\\[\baselineskip] + %of graduation requirements for University Honors\\[2\baselineskip] + %Department of Physics and Astronomy\\[\baselineskip] + %\@Month~\@Year + \@City,~\@Year + \vfill + \end{center} + \parbox[t]{2.75in}{ + Advisor: \@Advisor \\[.5\baselineskip] + Signature: \hrulefill} + \hfill + \parbox[t]{2.75in}{ + Honors Dean: \@HonorsDean \\[.5\baselineskip] + Signature: \hrulefill} + \clearemptydoublepage + } + +% ======================== Copyright page =============================== +\newcommand{\copyrightpage}{ + \thispagestyle{empty} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Copyright}{bm:Copyright} + \vspace*{\fill} + \begin{center} + Copyright \copyright\ \@Year~\@Author\\[\baselineskip] + All Rights Reserved\\[5\baselineskip] + \end{center} + \vspace{1in} + \vfill + \clearemptydoublepage + } + +% =============================== Approval page ======================= +\newcommand{\datebox}{ + \parbox[t]{1.5in}{ + \ \\[2\baselineskip] + \rule{1.5in}{0.4pt}\\ + \@DateText + } +} + +\newcommand{\signaturebox}[1]{ + \parbox[t]{3.6in}{ + \ \\[2\baselineskip] + \rule{3.6in}{0.4pt}\\ + #1 + } +} + +\newcommand{\phdapprovalpage}{ + \thispagestyle{empty} + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Graduate Committee Approval}{bm:ComAp} + \vspace*{0.375in} + BRIGHAM YOUNG UNIVERSITY\\[3\baselineskip] + GRADUATE COMMITTEE APPROVAL\\[5\baselineskip] + of a \@docname~submitted by\\[\baselineskip] + \@Author\\[2\baselineskip] + \end{center} + \noindent + This dissertation has been read by each member of the following graduate committee + and by majority vote has been found to be satisfactory.\\[\baselineskip] + \datebox\hfill\signaturebox{\@Advisor, Chair}\\ + \datebox\hfill\signaturebox{\@MemberA}\\ + \datebox\hfill\signaturebox{\@MemberB}\\ + \datebox\hfill\signaturebox{\@MemberC}\\ + \datebox\hfill\signaturebox{\@MemberD} + \vfill + \clearemptydoublepage + } + +\newcommand{\masterapprovalpage}{ + \thispagestyle{empty} + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Graduate Committee Approval}{bm:ComAp} + \vspace*{0.375in} + BRIGHAM YOUNG UNIVERSITY\\[3\baselineskip] + GRADUATE COMMITTEE APPROVAL\\[5\baselineskip] + of a \@docname~submitted by\\[\baselineskip] + \@Author\\[2\baselineskip] + \end{center} + \noindent + This thesis has been read by each member of the following graduate committee + and by majority vote has been found to be satisfactory.\\[\baselineskip] + \datebox\hfill\signaturebox{\@Advisor, Chair}\\ + \datebox\hfill\signaturebox{\@MemberA}\\ + \datebox\hfill\signaturebox{\@MemberB}\\ + \vfill + \clearemptydoublepage + } + +\newcommand{\seniorapprovalpage}{ + \thispagestyle{empty} + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Department Approval}{bm:DepAp} + \vspace*{0.375in} + \@University\\[3\baselineskip] + {\bf \@ApprovalText}\\[5\baselineskip] + \@docname~\@ApprovalAText\\[\baselineskip] + {\em \@AuthorGenitiveCase}\\[2\baselineskip] + \@ApprovalBText + \\[\baselineskip] + \end{center} + \datebox\hfill\signaturebox{\@Advisor, \@AdvisorText}\\ + %\datebox\hfill\signaturebox{\@UgradCoord, Research Coordinator}\\ + %\datebox\hfill\signaturebox{\@DepRep, \@DepRepTitle}\\ + \vfill + \clearemptydoublepage + } + +% ======================= Acceptance Page ============================ +\newcommand{\acceptancepage}{ + \thispagestyle{empty}% + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Acceptance Page}{bm:Accept} + \vspace*{0.375in} + BRIGHAM YOUNG UNIVERSITY\\[3\baselineskip] + \end{center}% + \noindent% + As chair of the candidate's graduate committee, I have read the + \@docname\ of \@Author \ in its final form and have found + that (1) its format, citations, and bibliographical style are + consistent and acceptable and fulfill university and department + style requirements; (2) its illustrative materials including + figures, tables, and charts are in place; and (3) the final + manuscript is satisfactory to the graduate committee + and is ready for submission to the university library.\\[2\baselineskip] + \datebox\hfill\signaturebox{\@Advisor\\Chair, Graduate Committee} + \vskip 0pt plus 2fill + \noindent Accepted for the Department\par\hfill% + \signaturebox{\@DepRep, \@DepRepTitle\\Department of Physics and + Astronomy }{} \vfill \noindent Accepted for the College\par\hfill + \signaturebox{\@Dean, \@DeanTitle \\ + College of Physical and Mathematical Sciences} + \clearemptydoublepage + } + +% ========================= Abstract =================================== + +\newcommand{\abstractpage}{ + + \thispagestyle{empty} + \begin{abstractenv} + \begin{center} + \providecommand\pdfbookmark[3][]{} \pdfbookmark[1]{Abstract}{bm:Abstract} + \vspace*{0.375in} + {\bf \@AbstractText}\\[1\baselineskip] + {\large \@TitleTop\\ + \@TitleBottom}\\[1\baselineskip] + {\em \@Author}\\[\baselineskip] + \end{center} + \renewcommand{\baselinestretch}{1.33}\small\normalsize + \@Abstract + \vfill + + % \begin{center} + % %\providecommand\pdfbookmark[3][]{} \pdfbookmark[0]{Abstract}{bm:Abstract} + % \vspace*{0.375in} + % {\bf Abstract}\\[1\baselineskip] + % {\large \@TitleTopEng\\ + % \@TitleBottomEng}\\[1\baselineskip] + % {\em \@AuthorEng}\\[\baselineskip] + % \end{center} + % \renewcommand{\baselinestretch}{1.33}\small\normalsize + % \@AbstractEng + + \end{abstractenv} + \clearemptydoublepage + } + +% ========================= Acknowledgments ============================== +%\newcommand{\acknowledgmentspage}{ +% \renewcommand{\baselinestretch}{1}\small\normalsize +% \thispagestyle{empty} +% \begin{center} +% \providecommand\pdfbookmark[3][]{} +% \pdfbookmark[0]{Acknowledgments}{bm:Acknowledge} +% \vspace*{0.375in} +% {\Large \@AcknowledgmentsText}\\[3\baselineskip] +% \end{center} +% +% \renewcommand{\baselinestretch}{1.66} \small\normalsize% +% \@Acknowledgments +% \clearemptydoublepage +% } + + diff --git a/Latex/Chapter0.tex b/Latex/Chapter0.tex new file mode 100644 index 0000000..fc57376 --- /dev/null +++ b/Latex/Chapter0.tex @@ -0,0 +1,10 @@ +\section*{Введение} +\label{sec:Chapter0} \index{Chapter0} + +% \todo[inline]{Тестовый текст} + +В лабораторных практикумах на кафедре автоматизации систем вычислительных комплексов значительная часть заданий связана с подготовкой сетевых конфигураций на стенде из виртуальных машин, размещённых на ресурсах одного физического компьютера. Для выполнения таких работ требуется не только создать набор виртуальных машин, но и задать структуру их взаимодействия, сетевые интерфейсы, связи и параметры адресации. + +Подготовка стенда включает клонирование базовых образов ВМ, подключение виртуальных сетевых адаптеров с контролем MAC-адресов, а также первичную настройку IP-адресов внутри гостевых операционных систем. Эти действия повторяются при выполнении лабораторных работ студентами и при демонстрации технологий на лекциях, поэтому их ручное выполнение занимает время и затрудняет воспроизводимость конфигураций. + +Существующие средства построения диаграмм позволяют наглядно изобразить структуру сети, однако не всегда удобны для задания формализованного описания с атрибутами элементов и возможностью дальнейшей автоматической обработки. В связи с этим актуальна разработка средства описания конфигурации сети виртуальных машин на основе структурированной модели данных. Такое описание должно быть редактируемым, читаемым и воспроизводимым, а также пригодным для последующего формирования диаграмм топологии или экспорта в формат конфигурации. diff --git a/Latex/Chapter1.tex b/Latex/Chapter1.tex new file mode 100644 index 0000000..c16a4d4 --- /dev/null +++ b/Latex/Chapter1.tex @@ -0,0 +1,24 @@ +\section{Постановка задачи} +\label{sec:Chapter1} \index{Chapter1} +% \todo[inline]{Здесь надо максимально формально описать суть задачи, которую потребуется решить, так, чтобы можно было потом понять, в какой степени полученное в результате работы решение ей соответствует. Текст главы должен быть написан в стиле технического задания, т.е. содержать как описание задачи, так и некоторый набор требований к решению} + + +В рамках курсовой работы требуется разработать инструмент планирования частично заданных сетевых конфигураций виртуальных машин, обеспечивающий удобное задание структуры сети и экспорт результата в формализованное описание. + +Разрабатываемое решение должно обеспечивать: +\begin{itemize} +\item представление сетевой конфигурации в виде структурированных данных; +\item возможность задания известных параметров элементов сети и сохранения незаполненных полей для последующего уточнения; +\item табличный способ ввода и редактирования конфигурации; +\item проверяемость и воспроизводимость полученного описания; +\item экспорт табличного представления в формат описания сетевой конфигурации виртуальных машин. +\end{itemize} + +Для достижения поставленной цели необходимо решить следующие задачи: +\begin{itemize} +\item Проанализировать существующие подходы и практики описания и визуализации сетевых конфигураций и сформулировать требования к разрабатываемому инструменту. +\item Разработать модель представления конфигураций в виде структурированных данных, позволяющую задавать известные параметры и оставлять поля для последующего уточнения. +\item Реализовать табличный способ ввода и редактирования конфигурации, обеспечивающий проверяемость и воспроизводимость описания. +\item Разработать механизм экспорта табличного представления в формат описания сетевой конфигурации виртуальных машин. +\end{itemize} + diff --git a/Latex/Chapter1_1.tex b/Latex/Chapter1_1.tex new file mode 100644 index 0000000..0b8e774 --- /dev/null +++ b/Latex/Chapter1_1.tex @@ -0,0 +1,8 @@ +\section{Состав информации о конфигурации сети виртуальных машин} +\label{sec:Chapter1_1} \index{Chapter1_1} + +Под конфигурацией сети виртуальных машин в данной работе понимается формализованное описание набора виртуальных машин и связей между ними, необходимое для воспроизведения сетевой топологии лабораторного стенда. Такое описание должно фиксировать не только внешний вид схемы, но и параметры элементов сети, пригодные для дальнейшей обработки программой. + +В состав описания конфигурации входят основные сущности сетевой топологии: узлы, сетевые интерфейсы и связи между ними. Узел соответствует виртуальной машине или иному элементу стенда. Для него могут задаваться имя, тип или роль в топологии, а также связанные с ним интерфейсы. Сетевой интерфейс описывает точку подключения узла к сети и может содержать имя интерфейса, MAC-адрес, IP-адрес и другие параметры, необходимые для настройки. Связь определяет соединение между интерфейсами или принадлежность интерфейса к определённому сетевому сегменту. + +Так как на этапе планирования часть параметров может быть неизвестна, описание конфигурации должно допускать частично заполненные данные. Это позволяет сначала зафиксировать структуру сети, а затем уточнять отдельные значения без изменения общей модели. Таким образом, конфигурация рассматривается как редактируемое структурированное описание, которое может быть представлено в табличном виде, использовано для построения диаграммы или экспортировано в формат YAML. diff --git a/Latex/Chapter2.tex b/Latex/Chapter2.tex new file mode 100644 index 0000000..3f85bab --- /dev/null +++ b/Latex/Chapter2.tex @@ -0,0 +1,3 @@ +\section{Обзор существующих решений} +\label{sec:Chapter2} \index{Chapter2} +\todo[inline]{Здесь надо рассмотреть все существующие решения поставленной задачи, но не просто пересказать, в чем там дело, а оценить степень их соответствия тем ограничениям, которые были сформулированы в постановке задачи.} \ No newline at end of file diff --git a/Latex/Chapter3.tex b/Latex/Chapter3.tex new file mode 100644 index 0000000..4ff6498 --- /dev/null +++ b/Latex/Chapter3.tex @@ -0,0 +1,3 @@ +\section{Исследование и построение решения задачи} +\label{sec:Chapter3} \index{Chapter3} +\todo[inline]{Здесь надо декомпозировать большую задачу из постановки на подзадачи и продолжать этот процесс, пока подзадачи не станут достаточно простыми, чтобы их можно было бы решить напрямую (например, поставив какой-то эксперимент или доказав теорему) или найти готовое решение.} \ No newline at end of file diff --git a/Latex/Chapter4.tex b/Latex/Chapter4.tex new file mode 100644 index 0000000..15ebe15 --- /dev/null +++ b/Latex/Chapter4.tex @@ -0,0 +1,3 @@ +\section{Описание практической части} +\label{sec:Chapter4} \index{Chapter4} +\todo[inline]{Если в рамках работы писался какой-то код, здесь должно быть его описание: выбранный язык и библиотеки и мотивы выбора, архитектура, схема функционирования, теоретическая сложность алгоритма, характеристики функционирования (скорость/память).} \ No newline at end of file diff --git a/Latex/Chapter5.tex b/Latex/Chapter5.tex new file mode 100644 index 0000000..1ef33f9 --- /dev/null +++ b/Latex/Chapter5.tex @@ -0,0 +1,3 @@ +\section*{Заключение} +\label{sec:Chapter5} \index{Chapter5} +\todo[inline]{Здесь надо перечислить все результаты, полученные в ходе работы. Из текста должно быть понятно, в какой мере решена поставленная задача.} diff --git a/Latex/gost71u.bst b/Latex/gost71u.bst new file mode 100644 index 0000000..ae9a37b --- /dev/null +++ b/Latex/gost71u.bst @@ -0,0 +1,1428 @@ +%% +%% This is file `utf8gost780u.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% utf8gost.dtx (with options: `utf8gost780u') +%% +%% Copyright 1996-2005 Maksym Polyakov. +%% Version 2005.08.12 +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% Please, send bug reports via e-mail: +%% polyama at auburn dot edu +%% +%% 2005.08.12 Bug fix (long annote) +%% +%% 2003.06.06 contributions by Konstantin Vorontsov: +%% New ENTRY "annote" added for output annotations. +%% New commands BibUrl, BibAnnote added for customize urls and annotations. +%% +%% 2003.08.10 +%% New command BibEmph added for customize emphasizing. +%% +%% 2003.10.07 +%% Some bug fixes in names and date formatting. +%% +%% 2003.10.07 +%% Bug fix in INPROCEEDINGS. +%% +%% +%% This bibliography style attempts +%% to format bibliography according to +%% GOST 7.1-84 and GOST 7.80-00 +%% +%% For the Ukrainian|Russian bibliographic entries +%% you need to create field +%% language = {ukrainian|russian}. +%% Default language is English. +%% Field numpages for books must contain number of pages. +%% Optional field url will format url (using hyperref, if loaded). +%% +%% See examples in gost71.pdf and gost780.pdf +%% +%% Requires 8-bit bibtex with switch -B and csf file supporting cyrillic. +%% bibtex8 -B -c .csf +%% + +ENTRY + { address + annote + author + booktitle + bookauthor + chapter + edition + editor + compiler + howpublished + institution + journal + key + month + note + number + organization + pages + numpages + publisher + school + series + title + type + volume + year + language + booklanguage + url + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block +after.dblslash after.slash after.column after.semicolumn} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.dblslash := + #5 'after.slash := + #6 'after.column := + #7 'after.semicolumn := +} + +STRINGS { s t } + +STRINGS { curlanguage } + +FUNCTION {change.language} +{ booklanguage empty$ + {""} + {booklanguage 'curlanguage := + "\selectlanguageifdefined{" + curlanguage * + "}" * + } + if$ +} + +FUNCTION {output.nonnull} +%%%{ 's := +{ swap$ + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + " " "--- " * write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.dblslash = + { "~//" * change.language * " " * write$ } + { output.state after.slash = + { "~/ " * write$ } + { output.state after.column = + { ": " * write$ } + { output.state after.semicolumn = + { "; " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ +%%% s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.dblslash} +{ output.state before.all = + 'skip$ + { after.dblslash 'output.state := } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { after.slash 'output.state := } + if$ +} + +FUNCTION {new.column} +{ output.state before.all = + 'skip$ + { after.column 'output.state := } + if$ +} + +FUNCTION {new.semicolumn} +{ output.state before.all = + 'skip$ + { after.semicolumn 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\BibEmph{" swap$ * "}" * } + if$ +} + +FUNCTION {space.word} +{ " " swap$ * " " * } + +FUNCTION {bbl.edby} % { "\bbledby{}" } +{ curlanguage "english" = + {"Ed. by "} + { curlanguage "ukrainian" = + {"{Під ред. }"} + { curlanguage "russian" = + {"{Под ред. }"} + {"language is not defined: " language "edited by" * * warning$ "edited by"} + if$} + if$} + if$ +} + +FUNCTION {bbl.cmplr} +{ curlanguage "english" = + {"Compiler "} + { curlanguage "ukrainian" = + {"{Укл. }"} + { curlanguage "russian" = + {"{Сост. }"} + {"language is not defined: " language "compiler" * * warning$ "compiler"} + if$} + if$} + if$ +} + +FUNCTION {bbl.edition} % { "\bbledition{}" } +{ curlanguage "english" = + {"edition"} + { curlanguage "ukrainian" = + {"{вид.}"} + { curlanguage "russian" = + {"{изд.}"} + {"language is not defined: " language "edition" * * warning$ "edition"} + if$} + if$} + if$ +} + +FUNCTION {bbl.vvolume} % { "\bblVolume{}" } +{ curlanguage "english" = + {"Volume"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Том"} + {"language is not defined: " language "Volume" * * warning$ "Volume"} + if$} + if$ +} + +FUNCTION {bbl.vvol} % { "\bblVol{}" } +{ curlanguage "english" = + {"Vol."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Т."} + {"language is not defined: " language "Vol." * * warning$ "Vol."} + if$} + if$ +} + +FUNCTION {bbl.iissue} % { "\bblIssue{}" } +{ curlanguage "english" = + {"Issue"} + { curlanguage "ukrainian" = + {"Випуск"} + { curlanguage "russian" = + {"Выпуск"} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.iiss} % { "\bblIss{}" } +{ curlanguage "english" = + {"Iss."} + { curlanguage "ukrainian" = + {"Вип."} + { curlanguage "russian" = + {"Вып."} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.of} % { "\bblof{}" } +{ curlanguage "english" = + {"of"} + { curlanguage "ukrainian" = + {"{із}"} + { curlanguage "russian" = + {"{из}"} + {"language is not defined: " language "of" * * warning$ "of"} + if$} + if$} + if$ +} + +FUNCTION {bbl.etal} % { "\bblof{}" } +{ curlanguage "english" = + {"et~al."} + { curlanguage "ukrainian" = + {"{та~ін.}"} + { curlanguage "russian" = + {"{и~др.}"} + {"language is not defined: " language "at al" * * warning$ "at al."} + if$} + if$} + if$ +} + +FUNCTION {bbl.nnumber} % { "\bblNumber{}" } +{ curlanguage "english" = + {"Number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Номер"} + {"language is not defined: " language "Number" * * warning$ "Number"} + if$} + if$ +} + +FUNCTION {bbl.number} % { "\bblnumber{}" } +{ curlanguage "english" = + {"number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{номер}"} + {"language is not defined: " language "number" * * warning$ "number"} + if$} + if$ +} + +FUNCTION {bbl.nr} % { "\bblno{}" } +{ curlanguage "english" = + {"no."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{№}"} + {"language is not defined: " language "no." * * warning$ "no."} + if$} + if$ +} + +FUNCTION {bbl.nnr} % { "\bblno{}" } +{ curlanguage "english" = + {"No."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{№}"} + {"language is not defined: " language "No." * * warning$ "No."} + if$} + if$ +} + +FUNCTION {bbl.in} % { "\bblin{}" } +{ curlanguage "english" = + {"in"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{в}"} + {"language is not defined: " language "in" * * warning$ "in"} + if$} + if$ +} + +FUNCTION {bbl.iin} % { "\bblIn{}" } +{ curlanguage "english" = + {"In"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"В"} + {"language is not defined: " language "In" * * warning$ "In"} + if$} + if$ +} + +FUNCTION {bbl.pages} % { "\bblpp." } +{ curlanguage "english" = + {"pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{с.}"} + {"language is not defined: " language "pp." * * warning$ "pp."} + if$} + if$ +} + +FUNCTION {bbl.page} % { "\bblp." +{ curlanguage "english" = + {"p."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{с.}"} + {"language is not defined: " language "p." * * warning$ "p."} + if$} + if$ +} + +FUNCTION {bbl.ppages}% { "\bblPp." } +{ curlanguage "english" = + {"Pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{С.}"} + {"language is not defined: " language "Pp." * * warning$ "Pp."} + if$} + if$ +} + +FUNCTION {bbl.ppage} % { "\bblP." } +{ curlanguage "english" = + {"P."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{С.}"} + {"language is not defined: " language "P." * * warning$ "P."} + if$} + if$ +} + + +FUNCTION {bbl.techrep} { "Tech. Rep." } +FUNCTION {bbl.mthesis} { "Master's thesis" } +FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } + +INTEGERS { nameptr namesleft numnames } + + +FUNCTION {format.names} +{ + #1 "{vv~}{ll}{~jj}{,~ff}" format.name$ +} + + +FUNCTION {format.names.rev} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff}{~vv}{~ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + nameptr #4 = + numnames #4 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + t "others" = + t "~others" = + or + { " " * bbl.etal * } + { ", " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names emphasize} + if$ +} + +FUNCTION {format.bookauthors} +{ bookauthor empty$ + { "" } + { bookauthor format.names} + if$ +} + +FUNCTION {format.authors.after} +{ author empty$ + { "" } + { author format.names.rev} + if$ +} + +FUNCTION {format.bookauthors.after} +{ bookauthor empty$ + { "" } + { bookauthor format.names.rev} + if$ +} + +FUNCTION {format.editors.after} +{ editor empty$ + { "" } + { bbl.edby editor format.names.rev * + } + if$ +} + +FUNCTION {format.compiler.after} +{ compiler empty$ + { "" } + { bbl.cmplr compiler format.names.rev * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { year ". " "--- " month * * * } + if$ + } + if$ +} + +FUNCTION {output.address.publisher.date} +{ + address empty$ + 'skip$ + { address output + publisher empty$ + 'skip$ + { new.column + } + if$ + } + if$ + publisher output + format.date output +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + language empty$ + {"english" 'curlanguage :=} + {language 'curlanguage :=} + if$ + "\selectlanguageifdefined{" write$ + curlanguage write$ + "}" write$ newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.iin + " " * } + +FUNCTION {format.btitle} +{ title +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {tie.connect} + {"~" + swap$ * * + } + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.connect + series empty$ + 'skip$ + { bbl.of space.word * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { "there's a number but no series in " cite$ * warning$ + bbl.nnr } + { + %new.dblslash + new.sentence + series + bbl.nr + tie.or.space.connect} + if$ + number tie.or.space.connect + } + if$ + } + { "" } + if$ +} + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + + +FUNCTION {convert.edition} +{ edition +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition " " * bbl.edition * } + { convert.edition " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.ppages pages n.dashify tie.connect } + { bbl.ppage pages tie.connect } + if$ + } + if$ +} + +FUNCTION {format.pages.page} +{ pages empty$ + { numpages empty$ + { "" } + { numpages bbl.pages tie.connect } + if$} + { format.pages} + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { + ", no." number tie.or.space.connect * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ": " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.or.space.connect } + if$ +} + +FUNCTION {format.number} +{ number empty$ + { "" } + { bbl.nr number tie.or.space.connect } + if$ +} + + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "" } + { number tie.or.space.connect } + if$ +} + +FUNCTION {author.before} +{ + author empty$ + 'skip$ + {author num.names$ #4 < + {format.authors output + new.sentence} + 'skip$ + if$} + if$ +} + +FUNCTION {bookauthor.before} +{ + bookauthor empty$ + 'skip$ + {bookauthor num.names$ #4 < + {format.bookauthors output + new.sentence} + 'skip$ + if$} + if$ +} + + +FUNCTION {author.after} +{ + author empty$ + 'skip$ + {format.authors.after output + new.semicolumn } + if$ +} +FUNCTION {bookauthor.after} +{ + bookauthor empty$ + 'skip$ + {format.bookauthors.after output + new.semicolumn } + if$ +} + +FUNCTION {editor.organization.after} +{ + compiler empty$ + {} + { format.compiler.after output + new.semicolumn + } + if$ + editor empty$ + {} + { format.editors.after output + new.semicolumn + } + if$ + organization empty$ + {} + {organization output + new.semicolumn + } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { after.sentence 'output.state := + "\BibUrl{ " url * "}" * + } + if$ +} + +FUNCTION {format.annote} +{ annote empty$ + { "" } +{ after.sentence 'output.state := + "\BibAnnote{" annote add.period$ * "}" * +} + if$ +} + +FUNCTION {article} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + new.dblslash + journal emphasize "journal" output.check + new.block + format.date output + new.block + format.volume output + format.number output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.sentence + format.number.series output + new.block + format.edition output + new.block + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + author.before + format.title "title" output.check + new.slash + author.after + editor.organization.after + new.block + howpublished output + address output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + new.dblslash + bookauthor.before + booktitle "booktitle" output.check + new.slash + bookauthor.after + editor.organization.after + new.block + format.edition output + new.block + format.number.series output + new.sentence + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + author.before + new.sentence + format.btitle "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + output.address.publisher.date + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + new.block + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + new.column + publisher output + format.date "year" output.check + } + if$ + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + new.block + format.url output + format.annote output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.sentence.checkb + format.btitle output + howpublished new.block.checka + howpublished output + new.block + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.sentence + format.btitle "title" output.check + new.column + bbl.phdthesis format.thesis.type output.nonnull + new.slash + school "school" output.check + new.block + output.address.publisher.date + new.block + format.pages.page output + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.btitle "title" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + publisher output + } + if$ + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.column + format.tr.number output.nonnull + new.slash + author.after + editor.organization.after + new.block + address output + new.column + institution "institution" output.check + format.date "year" output.check + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.block + note "note" output.check + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"\bbljan{}"} + +MACRO {feb} {"\bblfeb{}"} + +MACRO {mar} {"\bblmar{}"} + +MACRO {apr} {"\bblapr{}"} + +MACRO {may} {"\bblmay{}"} + +MACRO {jun} {"\bbljun{}"} + +MACRO {jul} {"\bbljul{}"} + +MACRO {aug} {"\bblaug{}"} + +MACRO {sep} {"\bblsep{}"} + +MACRO {oct} {"\bbloct{}"} + +MACRO {nov} {"\bblnov{}"} + +MACRO {dec} {"\bbldec{}"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ + "\def\selectlanguageifdefined#1{" write$ newline$ + "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$ + "\else\language\csname l@#1\endcsname\fi}" write$ newline$ + "\ifx\undefined\url\def\url#1{{\small #1}}\else\fi" write$ newline$ + "\ifx\undefined\BibUrl\def\BibUrl#1{\url{#1}}\else\fi" write$ newline$ + "\ifx\undefined\BibAnnote\long\def\BibAnnote#1{}\else\fi" write$ newline$ + "\ifx\undefined\BibEmph\def\BibEmph#1{\emph{#1}}\else\fi" write$ newline$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +%% +%% End of file `utf8gost780u.bst'. diff --git a/Latex/gost71uOld.bst b/Latex/gost71uOld.bst new file mode 100644 index 0000000..1db7879 --- /dev/null +++ b/Latex/gost71uOld.bst @@ -0,0 +1,1465 @@ +%% +%% This is file `gost71u.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% gost.dtx (with options: `gost71u') +%% +%% Copyright 1996-2005 Maksym Polyakov. +%% Version 2005.08.12 +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% Please, send bug reports via e-mail: +%% polyama at auburn dot edu +%% +%% 2005.08.12 Bug fix (long annote) +%% +%% 2003.06.06 contributions by Konstantin Vorontsov: +%% New ENTRY "annote" added for output annotations. +%% New commands BibUrl, BibAnnote added for customize urls and annotations. +%% +%% 2003.08.10 +%% New command BibEmph added for customize emphasizing. +%% +%% 2003.10.07 +%% Some bug fixes in names and date formatting. +%% +%% 2003.10.07 +%% Bug fix in INPROCEEDINGS. +%% +%% +%% This bibliography style attempts +%% to format bibliography according to +%% GOST 7.1-84 vd970321 +%% +%% For the Ukrainian|Russian bibliographic entries +%% you need to create field +%% language = {ukrainian|russian}. +%% Default language is English. +%% Field numpages for books must contain number of pages. +%% Optional field url will format url (using hyperref, if loaded). +%% +%% See examples in gost71.pdf and gost780.pdf +%% +%% Requires 8-bit bibtex with switch -B and csf file supporting cyrillic. +%% bibtex8 -B -c .csf +%% + +ENTRY + { address + annote + author + booktitle + bookauthor + chapter + edition + editor + compiler + howpublished + institution + journal + key + month + note + number + organization + pages + numpages + publisher + school + series + title + type + volume + year + language + booklanguage + url + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block +after.dblslash after.slash after.column after.semicolumn} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.dblslash := + #5 'after.slash := + #6 'after.column := + #7 'after.semicolumn := +} + +STRINGS { s t } + +STRINGS { curlanguage } + +FUNCTION {change.language} +{ booklanguage empty$ + {""} + {booklanguage 'curlanguage := + "\selectlanguageifdefined{" + curlanguage * + "}" * + } + if$ +} + +FUNCTION {output.nonnull} +%%%{ 's := +{ swap$ + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + " " quote$ "--- " * * write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.dblslash = + { "~//" * change.language * " " * write$ } + { output.state after.slash = + { "~/ " * write$ } + { output.state after.column = + { ": " * write$ } + { output.state after.semicolumn = + { "; " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ +%%% s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.dblslash} +{ output.state before.all = + 'skip$ + { after.dblslash 'output.state := } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { after.slash 'output.state := } + if$ +} + +FUNCTION {new.column} +{ output.state before.all = + 'skip$ + { after.column 'output.state := } + if$ +} + +FUNCTION {new.semicolumn} +{ output.state before.all = + 'skip$ + { after.semicolumn 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\BibEmph{" swap$ * "}" * } + if$ +} + +FUNCTION {space.word} +{ " " swap$ * " " * } + +FUNCTION {bbl.edby} % { "\bbledby{}" } +{ curlanguage "english" = + {"Ed. by "} + { curlanguage "ukrainian" = + {"{\cyr\CYRP\cyrii\cyrd\ \cyrr\cyre\cyrd.\ }"} + { curlanguage "russian" = + {"{\cyr\CYRP\cyro\cyrd\ \cyrr\cyre\cyrd.\ }"} + {"language is not defined: " language "edited by" * * warning$ "edited by"} + if$} + if$} + if$ +} + +FUNCTION {bbl.cmplr} +{ curlanguage "english" = + {"Compiler "} + { curlanguage "ukrainian" = + {"{\cyr\CYRU\cyrk\cyrl.\ }"} + { curlanguage "russian" = + {"{\cyr\CYRS\cyro\cyrs\cyrt.\ }"} + {"language is not defined: " language "compiler" * * warning$ "compiler"} + if$} + if$} + if$ +} + +FUNCTION {bbl.edition} % { "\bbledition{}" } +{ curlanguage "english" = + {"edition"} + { curlanguage "ukrainian" = + {"{\cyr\cyrv\cyri\cyrd.}"} + { curlanguage "russian" = + {"{\cyr\cyri\cyrz\cyrd.}"} + {"language is not defined: " language "edition" * * warning$ "edition"} + if$} + if$} + if$ +} + +FUNCTION {bbl.vvolume} % { "\bblVolume{}" } +{ curlanguage "english" = + {"Volume"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"\CYRT\cyro\cyrm"} + {"language is not defined: " language "Volume" * * warning$ "Volume"} + if$} + if$ +} + +FUNCTION {bbl.vvol} % { "\bblVol{}" } +{ curlanguage "english" = + {"Vol."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"\CYRT."} + {"language is not defined: " language "Vol." * * warning$ "Vol."} + if$} + if$ +} + +FUNCTION {bbl.iissue} % { "\bblIssue{}" } +{ curlanguage "english" = + {"Issue"} + { curlanguage "ukrainian" = + {"\CYRV\cyri\cyrp\cyru\cyrs\cyrk"} + { curlanguage "russian" = + {"\CYRV\cyrery\cyrp\cyru\cyrs\cyrk"} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.iiss} % { "\bblIss{}" } +{ curlanguage "english" = + {"Iss."} + { curlanguage "ukrainian" = + {"\CYRV\cyri\cyrp."} + { curlanguage "russian" = + {"\CYRV\cyrery\cyrp."} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.of} % { "\bblof{}" } +{ curlanguage "english" = + {"of"} + { curlanguage "ukrainian" = + {"{\cyr\cyrii\cyrz}"} + { curlanguage "russian" = + {"{\cyr\cyri\cyrz}"} + {"language is not defined: " language "of" * * warning$ "of"} + if$} + if$} + if$ +} + +FUNCTION {bbl.etal} % { "\bblof{}" } +{ curlanguage "english" = + {"et~al."} + { curlanguage "ukrainian" = + {"{\cyr\cyrt\cyra~\cyrii\cyrn.}"} + { curlanguage "russian" = + {"{\cyr\cyri~\cyrd\cyrr.}"} + {"language is not defined: " language "at al" * * warning$ "at al."} + if$} + if$} + if$ +} + +FUNCTION {bbl.nnumber} % { "\bblNumber{}" } +{ curlanguage "english" = + {"Number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"\CYRN\cyro\cyrm\cyre\cyrr"} + {"language is not defined: " language "Number" * * warning$ "Number"} + if$} + if$ +} + +FUNCTION {bbl.number} % { "\bblnumber{}" } +{ curlanguage "english" = + {"number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\cyrn\cyro\cyrm\cyre\cyrr}"} + {"language is not defined: " language "number" * * warning$ "number"} + if$} + if$ +} + +FUNCTION {bbl.nr} % { "\bblno{}" } +{ curlanguage "english" = + {"no."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\textnumero}"} + {"language is not defined: " language "no." * * warning$ "no."} + if$} + if$ +} + +FUNCTION {bbl.nnr} % { "\bblno{}" } +{ curlanguage "english" = + {"No."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\textnumero}"} + {"language is not defined: " language "No." * * warning$ "No."} + if$} + if$ +} + +FUNCTION {bbl.in} % { "\bblin{}" } +{ curlanguage "english" = + {"in"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\cyrv}"} + {"language is not defined: " language "in" * * warning$ "in"} + if$} + if$ +} + +FUNCTION {bbl.iin} % { "\bblIn{}" } +{ curlanguage "english" = + {"In"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"\CYRV"} + {"language is not defined: " language "In" * * warning$ "In"} + if$} + if$ +} + +FUNCTION {bbl.pages} % { "\bblpp." } +{ curlanguage "english" = + {"pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\cyrs.}"} + {"language is not defined: " language "pp." * * warning$ "pp."} + if$} + if$ +} + +FUNCTION {bbl.page} % { "\bblp." +{ curlanguage "english" = + {"p."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\cyrs.}"} + {"language is not defined: " language "p." * * warning$ "p."} + if$} + if$ +} + +FUNCTION {bbl.ppages}% { "\bblPp." } +{ curlanguage "english" = + {"Pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\CYRS.}"} + {"language is not defined: " language "Pp." * * warning$ "Pp."} + if$} + if$ +} + +FUNCTION {bbl.ppage} % { "\bblP." } +{ curlanguage "english" = + {"P."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{\cyr\CYRS.}"} + {"language is not defined: " language "P." * * warning$ "P."} + if$} + if$ +} + + +FUNCTION {bbl.techrep} { "Tech. Rep." } +FUNCTION {bbl.mthesis} { "Master's thesis" } +FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } + +INTEGERS { nameptr namesleft numnames } + + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{~jj}{~f.}" format.name$ 't := + nameptr #1 > + { + nameptr #4 = + numnames #4 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + t "others" = + t "~others" = + or + { " " * bbl.etal * } + { ", " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + +FUNCTION {format.names.rev} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f.}{~vv}{~ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + nameptr #4 = + numnames #4 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + t "others" = + t "~others" = + or + { " " * bbl.etal * } + { ", " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names emphasize} + if$ +} + +FUNCTION {format.bookauthors} +{ bookauthor empty$ + { "" } + { bookauthor format.names} + if$ +} + +FUNCTION {format.authors.after} +{ author empty$ + { "" } + { author format.names.rev} + if$ +} + +FUNCTION {format.bookauthors.after} +{ bookauthor empty$ + { "" } + { bookauthor format.names.rev} + if$ +} + +FUNCTION {format.editors.after} +{ editor empty$ + { "" } + { bbl.edby editor format.names.rev * + } + if$ +} + +FUNCTION {format.compiler.after} +{ compiler empty$ + { "" } + { bbl.cmplr compiler format.names.rev * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ + } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { year ". " quote$ "--- " month * * * * } + if$ + } + if$ +} + +FUNCTION {output.address.publisher.date} +{ + address empty$ + 'skip$ + { address output + publisher empty$ + 'skip$ + { new.column + } + if$ + } + if$ + publisher output + format.date output +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + language empty$ + {"english" 'curlanguage :=} + {language 'curlanguage :=} + if$ + "\selectlanguageifdefined{" write$ + curlanguage write$ + "}" write$ newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.iin + " " * } + +FUNCTION {format.btitle} +{ title +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {tie.connect} + {"~" + swap$ * * + } + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.connect + series empty$ + 'skip$ + { bbl.of space.word * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { "there's a number but no series in " cite$ * warning$ + bbl.nnr } + { + %new.dblslash + new.sentence + series + bbl.nr + tie.or.space.connect} + if$ + number tie.or.space.connect + } + if$ + } + { "" } + if$ +} + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + + +FUNCTION {convert.edition} +{ edition +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition "l" change.case$ " " * bbl.edition * } + { convert.edition "t" change.case$ " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.ppages pages n.dashify tie.connect } + { bbl.ppage pages tie.connect } + if$ + } + if$ +} + +FUNCTION {format.pages.page} +{ pages empty$ + { numpages empty$ + { "" } + { numpages bbl.pages tie.connect } + if$} + { format.pages} + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { + ", no." number tie.or.space.connect * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ": " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.or.space.connect } + if$ +} + +FUNCTION {format.number} +{ number empty$ + { "" } + { bbl.nr number tie.or.space.connect } + if$ +} + + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {author.before} +{ + author empty$ + 'skip$ + {author num.names$ #4 < + {format.authors output + new.sentence} + 'skip$ + if$} + if$ +} + +FUNCTION {bookauthor.before} +{ + bookauthor empty$ + 'skip$ + {bookauthor num.names$ #4 < + {format.bookauthors output + new.sentence} + 'skip$ + if$} + if$ +} + + +FUNCTION {author.after} +{ + author empty$ + 'skip$ + {author num.names$ #3 > + {format.authors.after output + new.semicolumn } + 'skip$ + if$} + if$ +} +FUNCTION {bookauthor.after} +{ + bookauthor empty$ + 'skip$ + {bookauthor num.names$ #3 > + {format.bookauthors.after output + new.semicolumn } + 'skip$ + if$} + if$ +} + +FUNCTION {editor.organization.after} +{ + compiler empty$ + {} + { format.compiler.after output + new.semicolumn + } + if$ + editor empty$ + {} + { format.editors.after output + new.semicolumn + } + if$ + organization empty$ + {} + {organization output + new.semicolumn + } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { after.sentence 'output.state := + "\BibUrl{ " url * "}" * + } + if$ +} + +FUNCTION {format.annote} +{ annote empty$ + { "" } +{ after.sentence 'output.state := + "\BibAnnote{" annote add.period$ * "}" * +} + if$ +} + +FUNCTION {article} +{ output.bibitem + author.before + format.title "title" output.check + new.slash + author.after + new.dblslash + journal emphasize "journal" output.check + new.block + format.date output + new.block + format.volume output + format.number output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.sentence + format.number.series output + new.block + format.edition output + new.block + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + author.before + format.title "title" output.check + new.slash + author.after + editor.organization.after + new.block + howpublished output + address output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + new.dblslash + bookauthor.before + booktitle "booktitle" output.check + new.slash + bookauthor.after + editor.organization.after + new.block + format.edition output + new.block + format.number.series output + new.sentence + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + output.address.publisher.date + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + new.block + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + new.column + publisher output + format.date "year" output.check + } + if$ + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + new.block + format.url output + format.annote output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.sentence.checkb + format.title output + howpublished new.block.checka + howpublished output + new.block + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.sentence + format.btitle "title" output.check + new.column + bbl.phdthesis format.thesis.type output.nonnull + new.slash + school "school" output.check + new.block + output.address.publisher.date + new.block + format.pages.page output + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.btitle "title" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + publisher output + } + if$ + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.column + format.tr.number output.nonnull + new.slash + author.after + editor.organization.after + new.block + address output + new.column + institution "institution" output.check + format.date "year" output.check + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.block + note "note" output.check + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"\bbljan{}"} + +MACRO {feb} {"\bblfeb{}"} + +MACRO {mar} {"\bblmar{}"} + +MACRO {apr} {"\bblapr{}"} + +MACRO {may} {"\bblmay{}"} + +MACRO {jun} {"\bbljun{}"} + +MACRO {jul} {"\bbljul{}"} + +MACRO {aug} {"\bblaug{}"} + +MACRO {sep} {"\bblsep{}"} + +MACRO {oct} {"\bbloct{}"} + +MACRO {nov} {"\bblnov{}"} + +MACRO {dec} {"\bbldec{}"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ + "\def\selectlanguageifdefined#1{" write$ newline$ + "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$ + "\else\language\csname l@#1\endcsname\fi}" write$ newline$ + "\ifx\undefined\url\def\url#1{{\small #1}}\else\fi" write$ newline$ + "\ifx\undefined\BibUrl\def\BibUrl#1{\url{#1}}\else\fi" write$ newline$ + "\ifx\undefined\BibAnnote\long\def\BibAnnote#1{}\else\fi" write$ newline$ + "\ifx\undefined\BibEmph\def\BibEmph#1{\emph{#1}}\else\fi" write$ newline$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +%% +%% End of file `gost71u.bst'. diff --git a/Latex/gzlogo.png b/Latex/gzlogo.png new file mode 100644 index 0000000..f195517 Binary files /dev/null and b/Latex/gzlogo.png differ diff --git a/Latex/main.tex b/Latex/main.tex new file mode 100644 index 0000000..478a059 --- /dev/null +++ b/Latex/main.tex @@ -0,0 +1,85 @@ +\documentclass[oneside,senior,etd]{BYUPhysForDegree} + +\usepackage[utf8]{inputenc} +\usepackage{rotating} + +\usepackage[russian]{babel} +\usepackage{amsfonts} % Пакеты для математических символов и теорем +\usepackage{amstext} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{graphicx} % Пакеты для вставки графики +\usepackage{subfig} +\usepackage{color} +\usepackage[unicode]{hyperref} +\usepackage[nottoc]{tocbibind} % Для того, чтобы список литературы отображался в оглавлении +\usepackage{algorithmic} % Для записи алгоритмов в псевдокоде +\usepackage{algorithm} +\usepackage{verbatim} % Для вставок заранее подготовленного текста в режиме as-is +\usepackage{listings} + +\usepackage{commath} +\newcommand\Tau{\mathcal{T}} +\newcommand{\R}{\mathbb{R}} +\usepackage{color} +\usepackage[colorinlistoftodos, prependcaption]{todonotes} +\usepackage{multirow} +\newcommand*{\MyIndent}{\hspace*{0.2cm}}% + +\Chair{Кафедра автоматизации систем вычислительных комплексов} +\Lab{~} +\Year{2026} + \Month{Апрель} + \City{Москва} + \AuthorText{Автор} + \Author{Гудов Дмитрий Олегович} + \AuthorEng{} + \AcadGroup{321} + % Если вы не Пупкин Василий Иванович, то скопируйте себе этот проект через меню и уже потом правьте + \TitleTop{Разработка средства описания конфигурации сети} + %\TitleMiddle{} + \TitleBottom{виртуальных машин для лабораторных работ} % leave empty if you don't need it + \TitleTopEng{} + \TitleBottomEng{} % leave empty if you don't need it + \docname{Курсовая работа} + %\docname{Выпускная квалификационная работа} + %\docname{Магистерская диссертация} + \Advisor{Балашов Василий Викторович} + \AdvisorDegree{К.ф.-м.н. с.н.с.} + \Consultant{Курячий Георгий Владимирович} + \ConsultantDegree{} + +\Abstract{В данной работе рассматривается задача разработки средства описания конфигурации сети виртуальных машин для лабораторных работ. Изучены существующие решения и выявлены их недостатки. Разработана и реализована модель данных для представления конфигурации сети. Разработаны и реализованы программные инструменты для редактирования, графического представления и вывода в формализованном формате конфигурации сети.} + + +%%%% DON'T change this. It is here because .sty does not support cyrillic cp properly %%%% +\University{Московский государственный университет имени М.В.Ломоносова} +\Faculty{Факультет вычислительной математики и кибернетики} +\GrText{гр.} +\AdvisorText{Научный руководитель} +\ConsultantText{Научный консультант} +\AbstractText{Аннотация} + +\begin{document} +\fixmargins +\makepreliminarypages + +\oneandhalfspace + +\tableofcontents + +\include{Chapter0} % Введение +\include{Chapter1} % Постановка задачи +\include{Chapter1_1} % Состав информации о конфигурации сети виртуальных машин +\include{Chapter2} % Обзор существующих решений +\include{Chapter3} % Исследование и построение решения задачи +\include{Chapter4} % Описание Экспериментальной части +\include{Chapter5} % Заключение + +\nocite{*} +\bibliographystyle{gost71u} % Для соответствия требованиям об оформлении списка литературы +\bibliography{references} + +% \include{Appendix} + +\end{document} diff --git a/Latex/references.bib b/Latex/references.bib new file mode 100644 index 0000000..e69de29