Skip to content

geminishkv/exam_cards_bmstu

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LaTeX-шаблон экзаменационных билетов

Этот репозиторий содержит готовый к использованию шаблон для автоматической генерации экзаменационных билетов в формате PDF на основе данных из CSV-файла.

Шаблон полностью настраивается и поддерживает как двух-, так и трёхвопросные билеты с возможностью указания баллов за каждый вопрос.

Полный PDF-файл: Скачать exam_cards.pdf

Как работать

Настройки дисциплины (курс, преподаватель, протокол, число вопросов, баллы, файл вопросов) — в tex_form/course.tex; общие настройки (университет, кафедра, заведующий, оформление) — в tex_form/config.tex. Вопросы — в exam_cards/questions.csv (число столбцов = \NumberOfQuestions).

# Установка TeX (macOS)
brew install --cask mactex-no-gui
echo 'export PATH="/Library/TeX/texbin:$PATH"' >> ~/.zshrc
source ~/.zshrc
pdflatex --version

# Сборка (latexmk сам делает нужное число проходов, результат — exam_cards/exam_cards.pdf)
make build

# Очистка промежуточных файлов / полная очистка
make clean
make distclean

Без make (вручную, -halt-on-error останавливает сборку при ошибке валидации из course.tex):

cd tex_form
latexmk -pdf -halt-on-error -interaction=nonstopmode -output-directory=../exam_cards main.tex
mv ../exam_cards/main.pdf ../exam_cards/exam_cards.pdf

Содержимое вопросов

Вопросы берутся из exam_cards/questions.csv (столбцы OneQuestion, TwoQuestion, ThreeQuestion). В тексте вопроса доступны:

  • Формулы — встроенная математика: Найдите \(x^2 = 4\).
  • Изображения\protect\includegraphics[width=3cm]{case1.png}; файлы кладите в каталог images/ (ищутся по имени).
  • Переносы строк\\ внутри вопроса (авто-перенос по ширине колонки сохраняется).
  • Переменное число вопросов — оставьте ячейку пустой (но с запятой), чтобы в билете было меньше вопросов: "Вопрос 1","Вопрос 2", → 2 вопроса в билете.

\NumberOfQuestions в course.tex задаёт число столбцов (= максимум вопросов в билете, 1–3); баллы — \OneQuestionMark / \TwoQuestionMark / \ThreeQuestionMark по позиции.

Релиз

Релизы создаются автоматически по тегу vX.Y.Z (workflow release-from-notes.yml):

# 1. Добавьте секцию ## vX.Y.Z в RELEASE_NOTES.md и закоммитьте
git add RELEASE_NOTES.md && git commit -m "Release notes for v1.3.0"

# 2. Поставьте тег и запушьте
git tag -a v1.3.0 -m "v1.3.0"
git push origin v1.3.0

CI соберёт PDF, возьмёт описание из секции ## vX.Y.Z в RELEASE_NOTES.md и создаст GitHub Release с приложенным exam_cards.pdf.

# Удалить ошибочный тег
git tag -d v1.3.0                    # локально
git push origin :refs/tags/v1.3.0    # на GitHub

Требования

Для успешной компиляции шаблона необходимо наличие следующих LaTeX-пакетов:

  • fontenc, inputenc, babel — поддержка русского языка и кодировок
  • amsmath, amssymb — математические символы
  • graphicx, tikz — графика и линии оформления
  • tabularray, makecell, array — расширенные таблицы
  • datatool — работа с CSV-файлами
  • ifthen — условные конструкции
  • geometry — настройка полей страницы

Структура

├── Makefile                # make build / clean / distclean
├── exam_cards
│   ├── exam_cards.pdf
│   └── questions.csv
├── images                  # картинки для вопросов (\includegraphics)
├── exmpl
│   ├── example.png
│   └── exmpl_exam_cards.pdf
├── LICENSE
├── README.md
├── RELEASE_NOTES.md
└── tex_form
    ├── config.tex          # глобальные настройки + пакеты
    ├── course.tex          # настройки дисциплины + загрузка/валидация CSV
    ├── main.tex            # точка входа (config → course → titlepage → tickets)
    ├── tickets.tex         # генерация билетов из CSV
    └── titlepage.tex       # титульный лист

CI/CD

Workflow Триггер Действие
ci.yml push/PR в develop/main (tex_form/**, questions.csv) Сборка PDF; на push — авто-коммит обновлённого exam_cards.pdf обратно в репозиторий
release-from-notes.yml тег vX.Y.Z Сборка PDF + GitHub Release с описанием из RELEASE_NOTES.md

Сборка идёт в TeXLive-образе через xu-cheng/latex-action — отдельная установка LaTeX-пакетов не нужна.

Ограничения и известные проблемы

  • \NumberOfQuestions = максимум вопросов в билете (1, 2 или 3) и должен совпадать с числом столбцов CSV. В конкретном билете вопросов может быть меньше — пустая ячейка пропускается (см. «Содержимое вопросов»). Недопустимое значение или рассинхрон с числом столбцов отлавливаются на этапе компиляции (валидация в course.tex).
  • Все строки CSV — одинаковое число полей: для пустого вопроса оставляйте ячейку пустой, но с запятой ("Вопрос","",), иначе datatool выдаст ошибку «no element».
  • CSV без кавычек: если вопросы содержат запятые, используйте другой разделитель (например, точку с запятой) и скорректируйте \DTLloaddb (требует знания синтаксиса datatool).

Лицензия

Этот шаблон распространяется по лицензии CC0 1.0 Universal (CC0 1.0) — вы можете свободно использовать, изменять и распространять его в любых целях, включая коммерческие, без необходимости указания авторства.

Примечание: Лицензия не распространяется на имена, названия и другие элементы, заимствованные из произведения братьев Стругацких «Понедельник начинается в субботу». Использование таких элементов допускается исключительно в некоммерческих, образовательных или иллюстративных целях в рамках добросовестного использования (fair use) и с соблюдением авторских прав правообладателей оригинального произведения.

About

LaTeX-шаблон экзаменационных билетов

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TeX 91.4%
  • Makefile 8.6%