Giter Site home page Giter Site logo

korogodin / nslreport Goto Github PK

View Code? Open in Web Editor NEW
34.0 6.0 5.0 1.85 MB

NavSysLab LaTeX report project for GOST 7.0.11, 7.32, 2.105 documents

License: GNU General Public License v3.0

Makefile 3.01% TeX 75.50% Shell 1.82% Perl 18.80% Dockerfile 0.88%
latex latex-template gost dissertation report

nslreport's Introduction

Система сборки LaTeX документов по российским ГОСТам

Данный фреймворк используется в Лаборатории Навигационных Систем НИУ МЭИ для документов следующих типов:

  • текстовые конструкторские и эксплуатационные документы по ЕСКД ГОСТ 2.105 с рамкой по ГОСТ 2.104 и без;
  • отчеты о НИР по ГОСТ 7.32-2001 и ГОСТ РВ 15.110; (coming soon)
  • кандидатские и докторские диссертации по ГОСТ Р 7.0.11;
  • пояснительные записки выпускных квалификационных работ;
  • книг и методических пособий;
  • техническое задание на НИР или ОКР по ГОСТ 15.016, ГОСТ РВ 15.201.

Для переключения между ЕСКД-документом, отчетом и диссертацией в головном файле требуется сменить стиль и титульную страницу. Доступны примеры документов.

Ориентирован на работников и студентов НавСисЛаб, принятые в лаборатории инструменты и практики:

  • командная разработка документов в парадигме docs-as-code
  • многократное повторное использование материала
  • использование Ubuntu/Kubuntu в качестве ОС
  • подготовка иллюстраций в формате svg, используя Inkscape
  • использование TexMaker для написания документа
  • для сборки документа используем pdflatex из texlive
  • используется кодировка UTF-8
  • минимизация и унификация списка используемых пакетов
  • четкое разделение исходных кодов документа (директория tex) и фреймворка для сборки

Проект является переработанной версией latex-g7-32, за что огромное спасибо его авторам.

Основные изменения относительно latex-g7-32:

  • работа с документами разных типов, в том числе с многострадальной рамкой
  • класс NSLReport полностью совместим со стандартным report, является базовым; легко дебажить проблемы переключением в стандартное окружение
  • базовый класс ступенчато расширяется стилями до нужного типа документов
  • в расширения входят must have пакеты (graphics, enumitem и т.д.), исправлены их конфликты, убрано неиспользуемое
  • при составлении документа не используются макросы фреймворка (пользователю не нужны специальные знания, облегчает повторное использование материала, части документа легко собираются в других системах, легче проходит конвертация в Word)
  • исходные коды документа отдельно, файлы фреймворка отдельно; можно даже хранить и собирать несколько документов
  • директории с изображениями поддерживают поддиректории
  • bibtex и natbib заменены на biber и biblatex, что решает проблемы с русскими символами в библиографии
  • убраны зависимости от dia, dot, cmake, pkg-config, python

Где посмотреть собранный пример?

С примерами в формате pdf можно ознакомиться в директории examples. Собранные версии документов отстают от исходных материалов, обновляются не каждый коммит.

Как собрать пример в виртуальном docker-окружении?

Самый простой вариант попробовать фреймворк - это собрать пример в docker-окружении. Для этого достаточно выполнить команду (потребует права суперпользователя для сборки образа и его запуска):

make docker

Конечно, предварительно установив сам docker (например, sudo apt install docker-ce).

При первом запуске make docker будет собран образ и создана директория tex с исходными файлами примера. Из них будет собран документ tex/rpz.pdf. Дальнейшие запуски команды make docker будут приводить к пересборке документа.

Как собрать пример с установкой зависимостей в основную систему?

  1. Установить texlive, inkscape и другие зависимости:
   sudo apt-get install -y \
            make \
            inkscape \
            imagemagick \            
            latexmk \
            texlive-latex-base \
            texlive-latex-extra \
            texlive-extra-utils \
            texlive-lang-cyrillic \
            texlive-luatex \ 
            texlive-bibtex-extra \
            biber \
            cm-super 

и далее по обстоятельсвам.

  1. Разрешить imagemagick клепать pdf-ки, для чего поправить policies (можно руками):
sed -i 's/^.*policy.*coder.*none.*PDF.*//' /etc/ImageMagick-6/policy.xml
  1. Форкнуть этот репозиторий, если вы планируете использовать отдельный репозиторий github для хранения документа

  2. Склонировать или скачать репозиторий, например,

git clone https://github.com/Korogodin/NSLReport
  1. Собрать пример
make

При первом запуске make будет создана директория tex с исходными файлами примера. Из них будет собран документ tex/rpz.pdf. Дальнейшие запуски команды make будут приводить к пересборке документа.

Вы можете собрать примеры других документов, например make example_nir, make example_eskd, make example_disser, , make example_book. Но сначала удалите директорию tex, чтобы скрипт не стеснялся создать её заново из примера.

Как составлять свой документ?

Самый простой вариант - начните править файлы в директории tex.

В ЛНС принято редактировать текст документа в TexMaker. В этом случае откройте rpz.tex и назначьте его мастер-документом (Options->Define Curre...). Теперь вы можете пересобирать документ простым нажатием F1.

В директорию graphics кладите изображения и схемы. Растровые - в img, векторные - в svg. При сборке они будут преобразованы в pdf и помещены в inc. Не кладите изображения в inc, это временная директория. Она будет удалена по команде make clean!

Когда вы добавили новое изображение и подключили его в документе с помощью includegraphics, то пересоберите документ командой make. Это сконвертирует ваше изображение и перенесет результат в inc. После этого опять можно пересобирать документ по-быстрому в TexMaker.

Вы можете разбивать документ на несколько .tex файлов. Называйте их по шаблону dd-name.tex, где dd - пара арабских цифр. Чем раньше этот файл используется в документе, тем меньше должна быть цифра. Так при упорядочивании файлов по имени они сохранят порядок изложения. А ещё, так система сборки поймет, что для этих файлов нужно подготовить изображения.

Описание источников литературы добавляется в файл rpz.bib в формате BibTeX. Фреймворк использует biblatex и biber, кодировку utf8.

nslreport's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

nslreport's Issues

Ошибки сборки примера

При попытке сборки примера на (относительно) голой системе make ругается на отсутствие biblatex.sty.

Лог при вызове make:

mklimenko@DESKTOP-QUJ6310:/mnt/d/Git/NSLReport$ make
cd tex && pdflatex rpz
This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./rpz.tex
LaTeX2e <2020-02-02> patch level 2
L3 programming layer <2020-02-14> (../sty/NSLReport.cls

LaTeX Warning: You have requested document class `../sty/NSLReport',
               but the document class provides `NSLReport'.

Document Class: NSLReport 2021/11/27 v1.00 NavSysLab modified report class
(/usr/share/texlive/texmf-dist/tex/latex/extsizes/size14.clo))
(../sty/NSLExtra.sty

LaTeX Warning: You have requested package `../sty/NSLExtra',
               but the package provides `NSLExtra'.

(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
(/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty)
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty)
(/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty
(/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty))
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty)
(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty)
(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty)
(/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty)
(/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty)
(/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty)
(/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty)
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
(/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty)
(/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty)
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def)
(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
(/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty
(/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty))
(/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty))
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def
(/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty)
(/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
(/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty)))
(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty
(/usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2aenc.def
(/usr/share/texlive/texmf-dist/tex/latex/base/t2aenc.dfu))
(/usr/share/texlive/texmf-dist/tex/latex/cyrillic/t2acmr.fd))
(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty)
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
(/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def)
(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf
(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def
(/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def)))
(/usr/share/texlive/texmf-dist/tex/generic/babel-russian/russianb.ldf))
(/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/usr/share/texlive/texmf-dist/tex/latex/was/icomma.sty)
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def)))
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption.sty
(/usr/share/texlive/texmf-dist/tex/latex/caption/caption3.sty))
(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)
(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty)
(/usr/share/texlive/texmf-dist/tex/latex/lastpage/lastpage.sty)
(/usr/share/texlive/texmf-dist/tex/latex/was/gensymb.sty)
(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty)
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
(/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty))
(/usr/share/texlive/texmf-dist/tex/latex/blindtext/blindtext.sty
(/usr/share/texlive/texmf-dist/tex/latex/tools/xspace.sty))
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.sty
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype-pdftex.def)
(/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.cfg))
\@input{listings.inc.aux}
(./listings.inc.tex
(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty
(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty)
(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg))))
(../sty/NSLEskd.sty

LaTeX Warning: You have requested package `../sty/NSLEskd',
               but the package provides `NSLEskd'.


! LaTeX Error: File `biblatex.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Предполагаемый порядок решения: добавить в установку зависимости texlive-bibtex-extra и biber. После этого всё собралось.

Стилизация библиографии

\let\l@table\l@figure

Похоже эта часть включена ошибочно

% Библиография из report.cls    
% Переведена на biblatex, пока работает из коробки без правок этого кода
\let\l@table\l@figure
\newdimen\bibindent
\setlength\bibindent{1.5em}
\newenvironment{thebibliography}[1]
     {\chapter*{\bibname}% В 2-105 без звездочки
      \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
\let\@openbib@code\@empty      

Так как стилизация не изменяется даже если её закомментировать

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.