LaTeX — НТЦ Метротек. Архив блога http://blog.metrotek.spb.ru заметки бывших разработчиков бывшего НТЦ Метротек Thu, 02 Oct 2025 13:52:15 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.1.15 Мы — круче всех: мы работаем в LaTeX! http://blog.metrotek.spb.ru/2013/04/02/myi-kruche-vseh-myi-rabotaem-v-latex/ Tue, 02 Apr 2013 05:52:51 +0000 http://blog.metrotek.spb.ru/?p=3794 Думаю, все уже знают, что для вёрстки руководств пользователя к нашим приборам мы используем систему LaTeX. Но возможно, не все представляют, что это за система и почему именно в ней мы работаем. Об этом я и хочу рассказать.

Кратко о TeX, METAFONT и LaTeX

  1. Система компьютерной вёрстки TeX была разработана американским учёным Дональдом Эрвином Кнутом. В дополнение к этой типографской системе он также создал язык программирования METAFONT, используемый для разработки векторных шрифтов.
  2. Сам по себе TeX представляет специализированный язык программирования. Дональд Кнут не только придумал его, но и написал для этого языка транслятор, причем таким образом, что на разных компьютерах он работает совершенно одинаково.
  3. Работать над проектом Дональд Кнут начал в 1977 году, примерно через 10 лет после этого системы TeX и METAFONT были стабилизированы (версия 2.7 для METAFONT и 3.1 для TeX). В дальнейшем METAFONT и TeX модифицировались только с целью исправления ошибок. Версии TeX нумеруются знаками числа «пи», METAFONT — числа «e». За обнаружение в своих программах неизвестной ранее ошибки Дональд Кнут выплачивает небольшое вознаграждение.
  4. С помощью METAFONT Дональд Кнут создал семейство шрифтов Computer Modern, применяемое в TeX и LaTeX по умолчанию. Хочу отметить, что с недавнего времени мы используем не стандартные шрифты, а шрифты, разработанных компанией ПараТайп в рамках проекта общенациональных бесплатных шрифтов. Подробнее об этом в заметке Шрифты для LaTeX.
  5. Последняя буква в названиях TeX и LaTeX это греческая «хи», а не английская «икс», поэтому TeX и LaTeX читаются как «тех» и «латех», а не «текс» и «латекс».
  6. В начале 80-х годов 20 века американский учёный Лесли Лэмпорт начал разработку издательской системы LaTeX на основе TeX. LaTeX представляет собой набор макросов на языке TeX и позволяет автоматизировать многие задачи, которые возникают при наборе текста.

Почему не Word?

У меня есть опыт создания сложных документов и в Word и в LaTeX. Но если кто-то спросит: «Вот собираюсь создать руководство (диплом, научную статью), что лучше использовать — LaTeX или Word?», — я, конечно, посоветую LaTeX.
Хотя, почему бы не использовать Word — на первый взгляд там все понятно, а главное — наглядно: пользователь сразу видит создаваемый документ. Даже неподготовленные человек сможет набрать в этой программе несложный текст. Но если стоит задача сделать нечто большее, чем маленькая статья, тут и возникают трудности. Для того чтобы, чтобы документ получился корректным и с ним без труда могло работать несколько пользователей, необходимо знать абсолютно неочевидные вещи.

С чего вдруг неподготовленный человек решит использовать стили и шаблоны? А без них нельзя, иначе в результате получится документ с ручным форматированием и впоследствии редактировать его будет очень трудно. А вот в LaTeX без минимальных знаний сверстать документ не получится, придется изучать теорию. В результате пользователь, первый раз составляющий какое-нибудь описание с помощью LaTeX, создает его, прочитав несколько глав умной книги. В результате, на выходе получается качественный документ, в который при необходимости без труда можно вносить изменения и правки.

Кроме этого:

  1. Формат исходных файлов для LaTeX — текстовый, что позволяет применять систему контроля версий и без труда отслеживать вносимые изменения.
  2. LaTeX позволяет конвертировать исходный текстовый файл в готовый для печати вид — ps, pdf.
  3. LaTeX относится к свободному программному обеспечению.
  4. В исходный текст можно включать сложные формулы, схемы, картинки, и всё это прекрасно смотрится на печати.
  5. Разметка документа, оглавление, предметный указатель, нумерация глав, рисунков, формул — все это LaTeX делает автоматически. Достаточно выбрать стиль документа и, используя несложные команды, создавать содержание, не думая о внешнем виде документа.
  6. LaTeX позволяет подключать множество специализированных пакетов для решения различных задач. Например, пакет bytefield позволяет создавать иллюстрации для описания сетевых протоколов. Пакет pgf/tikz — рисовать сложные электрические схемы, графики и многое другое.
  7. Буклет с помощью LaTeX создать проще простого.

Пример

Конечно, сразу создать полноценный документ в LaTeX не получится. Придётся поизучать материал, но результат того стоит. Тем более, что литературы на эту тему достаточно.

Но чтобы хоть чуть-чуть понять, как всё это реализовано «изнутри», создадим простенький файл и назовём его helloworld.tex. Содержание файла будет следующим:


\documentclass{article} % тип документа
\usepackage[koi8-r]{inputenc} % кодировка
\usepackage[english, russian]{babel} % поддержка русского языка

\begin{document} % начало документа
\LARGE Это мой первый документ в LaTeX. % наш текст
\end{document} % конец документа

Теперь введём команду pdflatex helloworld.tex. После компиляции получим файл helloworld.pdf. Вот и всё, мини-документ готов.

Что почитать

Небольшой список полезных книг:

  1. С.М. Львовский «Набор и вёрстка в системе LaTeX»
  2. И.А. Котельников, П.З. Чеботаев «Издательская система LaTeX 2e»
  3. М. Гуссенс, Ф. Миттельбах, А. Самарин «Путеводитель по пакету LaTeX и его расширению LaTeX 2e»
]]>
LaTeX, PDF и Kindle http://blog.metrotek.spb.ru/2013/03/28/latex-pdf-i-kindle/ Thu, 28 Mar 2013 10:07:01 +0000 http://blog.metrotek.spb.ru/?p=3818 Любой документ, создаваемый в LaTeX, должен начинаться с команды

\documentclass[список опций]{класс документа}

Класс определяет вид и структуру документа. Раньше мы использовали ugbook (модифицированный под наши цели стандартный класс book), но недавно перешли на набор классов KOMA-Script и используем scrbook.

Подготовка документа

Так как я являюсь счастливой обладательницей электронной книги Amazon Kindle 4, захотелось посмотреть, как наши руководства смотрятся на экране.
Сразу же столкнулась с известной проблемой — слишком мелкий текст. Увеличение использовать неудобно, т.к. приближается только часть страницы.

smallsmallzoom

Выход был один — сверстать руководство так, чтобы оно хорошо смотрелось на экране. Благодаря тому, что мы используем класс scrbook, сделать это оказалось совсем несложно. Этот класс позволяет использовать нужный мне размер шрифта 14 pt (а ещё 9pt и 17pt). Также большие поля, имеющие место в стандартных классах, в классах KOMA-script значительно уменьшены. Поэтому мне осталось только открыть преамбулу документа (файл preamble.tex) и поправить одну строчку:

было:

\documentclass[a5paper,9pt,twoside,DIV=20,BCOR=10mm,automark,headsepline]{scrbook}

стало:

\documentclass[a5paper,14pt,twoside,DIV=16,BCOR=0mm,automark,headsepline]{scrbook}

Результат

Параметры, которые были изменены: размер шрифта (с 9 pt на 14 pt), рабочая область (с DIV=20 на DIV=16) и поправка на сшивание страниц (с BCOR=10mm на BCOR=0mm). Меняя эти параметры можно подобрать оптимальный для себя вариант. Мне понравилось так:

big1big2

Также я сделала выравнивание по левому краю без переносов, добавив команду \raggedright. Но это дело вкуса.
Хочу отметить, что в исходном тексте документа использованы относительные размеры картинок, а не фиксированные. Благодаря этому размер изображений автоматически меняется при изменении размера шрифта и параметров страницы.

Так что теперь наши руководства удобно просматривать и на Amazon Kindle.

]]>
из чего сделаны инструкции http://blog.metrotek.spb.ru/2012/11/26/iz-chego-sdelanyi-rukovodstva-polzovatelya/ Mon, 26 Nov 2012 06:41:48 +0000 http://blog.metrotek.spb.ru/?p=3390 каждому устройству, которое мы разрабатываем и производим, нужно руководство пользователя. инструкции по эксплуатации — это неотъемлемая часть сложного продукта, хотя существует мнение, что пользователи инструкций не читают. раньше в коробку с прибором мы вкладывали довольно толстую книжку, иногда не одну. теперь вместо книжки — компакт-диск, на который записаны pdf-файлы.

как это ни странно, для вёрстки документов мы не используем ни Word, ни QuarkXpress, ни Adobe FrameMaker. возможно, читатель нашего блога знаком с заметками Кати Саковской об особенностях и инструментах для создания руководств пользователя. они посвящены системе компьютерной вёрстки LaTeX, которая помогает нам сделать элегантные и, надеюсь, удобные для чтения документы. впрочем, рекламные материалы тоже удобно создавать в LaTeX’е.

итак, почему для создания инструкций по эксплуатации мы используем LaTeX?

во-первых, формат исходных файлов. он текстовый. да-да, обычный текст, или plain text, как говорят англоязычные товарищи. это значит, что нет проблем с редактированием и с системами контроля версий (svn). кроме того, легко находить и управлять измененими при помощи стандартных инструментов (diff).

во-вторых, автор текста в первую очередь думает о содержании, а не о том, как будет выглядеть страница.

в-третьих, LaTeX легко преобразовать в html для чтения прямо на сайте. но увы, такую возможность мы почему-то не используем, надо это исправить.

ну, и последнее: красивые документы в формате postscript, которые легко вывести на печать и pdf-файлы, удобные для чтения с экрана компьютера.

btw, рекомендую полезную статью «Учите детей Groff’у»» про то, как и зачем отделять содержание текста от внешнего вида. правда, на английском. но есть похожая заметка на русском: «О вреде дружественных интерфейсов».
рекомендую к прочтению.

]]>
LaTeX. Пакет calendar http://blog.metrotek.spb.ru/2012/11/02/latex-paket-calendar/ Fri, 02 Nov 2012 05:11:26 +0000 http://blog.metrotek.spb.ru/?p=3298 Набор пакетов calendar позволяет создавать различные виды календарей (на год, месяц, неделю), а также расписания, графики работы и т.д. Если в используемом дистрибутиве LaTeX нет данного пакета, его можно скачать и установить.

По умолчания для составления календаря применяется английский язык. Для использования русского языка необходимо в файл dates.cfg, который находится в каталоге calendar, вручную добавить перевод дней недели и месяцев.

Рассмотрим, как создать календарь, аналогичный тем, которые можно приобрести в магазине. Почти во всех таких календарях обозначены праздники и важные события. Это без труда можно сделать и с помощью данного пакета. Для этого в том же каталоге, в котором лежит исходный .tex-файл нашего календаря, создаём файл с расширением .cld, например, firstlist.cld. В этот файл записываем все праздники в таком формате:

 месяц число год время {праздник}

Например:

 Янв 1 2013 {Новый год}
 Март 8 2013 {Международный женский день}

В файл secondlist.cld можно  записать события другого типа, например, дни рождения.

Кстати, создавать наш календарь будем с помощью стиля monthly.  Вот исходный текст:

\documentclass[a4paper]{article}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage{margins}
\usepackage{lscape}
\parindent=0pt
\usepackage{color}
\usepackage{paratype}
\usepackage{monthly}

\begin{document}
\margins{1.5cm}
\begin{landscape}
\begin{monthly}{firstday=1,daynametype=\small,texttype=\normalsize,
titletype=\Large,datetype=\Large}{firstlist:red,secondlist:blue}

Jan 1 2013 to 31 Dec 2013

\end{monthly}
\end{landscape}
\end{document}

Думаю, требуется несколько пояснений.

Опция  firstday окружения monthly позволяет задать первым днём недели понедельник (по умолчанию — воскресенье). Опции daynametype, texttype, titletype и datetype  устанавливают размеры шрифта для названий дней недели, месяца, текста событий.
Опции  firstlist:red, secondlist:blue подключают файлы firstlist.cld и secondlist.cld, при этом события из файла firstlist будут напечатаны красным цветом, а из файла secondlist — синим. Строка Jan 1 2013 to 31 Dec 2013 позволит нам сформировать календарь на целый год.
Пакет lscape  подключается для того, чтобы страницы календаря имели альбомную ориентацию.

А вот одна страничка календаря, который должен получиться в результате:

 

]]>
LaTeX. Пакет FiXme http://blog.metrotek.spb.ru/2012/07/25/latex-paket-fixme/ Wed, 25 Jul 2012 12:41:13 +0000 http://blog.metrotek.spb.ru/?p=3142 В процессе написания руководства пользователя часто бывает нужно добавить в текст документа какое-нибудь «напоминание»: дописать раздел, что-то уточнить или исправить. Обычно для этих целей в .tex файле используют комментарии, которые в итоговом документе не видны, поэтому вероятность забыть о них очень велика.

На этот случай в LaTeX предусмотрен пакет FiXme, позволяющий добавить напоминание, текст которого будет отображён в итоговом pdf-документе. Этот пакет уже содержится в используемом нами дистрибутиве LaTeX, входящем в стандартную поставку Debian GNU/Linux.

Для его использования достаточно написать \usepackage{fixme} в преамбуле документа. После этого в исходный текст можно добавлять напоминания 4-х уровней значимости: примечание (\fxnote), предупреждение (\fxwarning), ошибка (\fxerror), критическая ошибка (\fxfatal).

Например, вот текст в .tex-файле:

Тестер-анализатор \fxnote{добавить фото}{\DEVICENAME{}} предназначен для проведения анализа и диагностического тестирования оборудования в сетях, основанных на технологии Ethernet. Он поддерживает полный диапазон скоростей от 10 Мбит/с до 10 Гбит/с.

А вот, что мы увидим в pdf-документе:

С помощью необязательного параметра команды \usepackage выбирают, в каком формате напоминание будет отображено в итоговом документе: в виде списка в предметном указателе, сноски, заметки на полях или непосредственно в тексте.

Например, команда \usepackage[footnote]{fixme} позволяет отобразить напоминание в виде сноски.

Кстати, для отображения напоминаний в итоговом документе следует в преамбуле указать стандартную опцию draft: \documentclass[a5paper, …, draft]{scrbook}. После того, как все ошибки и замечания исправлены, вместо draft пишем final. В полученном после компиляции pdf-файле напоминания отображаться не будут. Однако, если в тексте присутствует неисправленная критическая ошибка, то при сборке LaTeX выдаст предупреждение и документ не будет сформирован, пока ошибку не исправят.

Выше представлено описание только основных возможностей пакета. Он имеет множество других настроек, которые подробно описаны в документации.

]]>
Шрифты для LaTeX http://blog.metrotek.spb.ru/2012/04/24/shriftyi-dlya-latex/ Tue, 24 Apr 2012 00:00:43 +0000 http://blog.metrotek.spb.ru/?p=3022 Для создания сопровождающей технической документации к нашим приборам мы применяем систему вёрстки LaTeX. Это очень удобная и гибкая система, позволяющая подключать множество специализированных пакетов для решения различных задач. Есть, правда, один минус — небольшой выбор стандартных кириллических шрифтов. До недавнего времени мы использовали шрифты семейства Computer Modern. Однако в какой-то момент решили поискать более подходящий вариант как с точки зрения «красоты» русских букв, так и большей ёмкости шрифта.

Хотелось найти  основной, моноширинный и шрифт без засечек, которые наилучшим образом сочетались бы между собой. Мы остановили свой выбор на шрифтах, разработанных компанией ПараТайп в рамках проекта общенациональных бесплатных шрифтов:  ПТ Санс, ПТ Сериф и ПТ Моно . Это шрифты универсального назначения  с открытой пользовательской лицензией. При этом они являются супергарнитурой, т.е. идеально соответствуют друг другу.

Для подключения шрифтов ПараТайп к системе LaTeX в архиве CTAN имеется специальный пакет, который, кстати, уже содержится в используемом нами дистрибутиве LaTeX, входящем в стандартную поставку Debian GNU/Linux.

Для сравнения:

1) Computer Modern

2) ПараТайп

 

]]>
Буклет с помощью LaTeX на раз-два-три http://blog.metrotek.spb.ru/2011/04/15/buklet-s-pomoshhyu-latex-na-raz-dva-tri/ http://blog.metrotek.spb.ru/2011/04/15/buklet-s-pomoshhyu-latex-na-raz-dva-tri/#comments Fri, 15 Apr 2011 11:01:06 +0000 http://blog.metrotek.spb.ru/?p=2726 Пакет pdfpages для LaTeX позволяет втавлять в .tex файлы страницы из pdf-документов. Для вставки используется директива \includepdf[]{}, которая имеет множество параметров. Задавая определённые значения параметров можно любой pdf-документ преобразовать таким образом, чтобы впоследствии без труда распечатать его с двух сторон листа в виде брошюры нужного формата.

Раз

Создаем .tex файл, например, booklet.tex следующего содержания:

\documentclass[a4paper]{article}
\usepackage[final]{pdfpages}
\begin{document}
\includepdf[pages=-, booklet, landscape]{имя_файла.pdf}
\end{document}

Два

Компилируем файл с помощью программы pdflatex:

pdflatex booklet.tex

В результате получаем нужный нам документ booklet.pdf.

Три

Распечатываем документ, выбрав двухстороннюю печать по длинной стороне. Вот и все, брошюра готова.

А теперь поподробнее о директиве \includepdf: она служит для вставки в .tex файл страниц pdf-документа в нужном для формирования брошюры виде. Обязательным параметром является имя преобразуемого pdf-документа. В качестве необязательных параметров можно передать номера страниц, которые мы хотим преобразовать в брошюру (pages=- означает, что нужно преобразовать все страницы документа). Параметр booklet служит для расположения двух страниц на листе, landscape устанавливает альбомную ориентацию страницы.

]]>
http://blog.metrotek.spb.ru/2011/04/15/buklet-s-pomoshhyu-latex-na-raz-dva-tri/feed/ 2
LaTeX теперь есть в google docs http://blog.metrotek.spb.ru/2010/05/18/latex-teper-est-v-google-docs/ http://blog.metrotek.spb.ru/2010/05/18/latex-teper-est-v-google-docs/#comments Tue, 18 May 2010 07:38:43 +0000 http://blog.metrotek.spb.ru/?p=2066 Однако, товарищи из google не теряют времени даром и усилиями latexlab.org в Google Docs появилась поддержка LaTeX.

]]>
http://blog.metrotek.spb.ru/2010/05/18/latex-teper-est-v-google-docs/feed/ 2
Графика и LaTeX http://blog.metrotek.spb.ru/2010/04/20/grafika-i-latex/ Tue, 20 Apr 2010 11:48:23 +0000 http://blog.metrotek.spb.ru/?p=1955 Как оказалось, импортирование графических объектов в tex-документы вызывает много вопросов. Хотелось бы рассказать, как это организовано у нас.

1. В преамбуле tex-документа подключён пакет graphicx с опцией dvips:

\usepackage[dvips]{graphicx}

Драйвер dvips — программа, которая экспортирует dvi-файл в PostScript файл с расширением ps, что необходимо для последующего вывода печатного документа на принтер.

2. Исходными форматами картинок для наших руководств являются svg и png. Наиболее рациональным для LaTeX’а является использование формата eps. Многие графические приложения позволяют создать файл в данном формате, у нас для преобразования исходных файлов с расширением svg и png в формат eps используются следующие команды, прописанные в Makefile:

%.eps: %.png
convert    $< $@

%.eps: %.svg
inkscape -z -E $@ $<

3. В преамбуле tex-документа опрделяем команду \image:

\newcommand{\image}[4][размер_картинки]{%
\begin{figure}[H]%
\noindent\centering\includegraphics[width=#1]{#2}%
\caption{#3}%
\label{fig:#4}%
\end{figure}}

4. В самом tex-документе там, где необходимо вставить рисунок, пишем:

\image[размер_картинки]{путь к файлу с картинкой}{подрисуночная подпись}{метка}

Например:

\image[50mm]{pics/picture}{Картинка}{pic}

Размер картинки имеет смысл указывать в том случае, если он отличается от размера, заданного командой \image в преамбуле.

Расширение файла указывать не нужно,  по умолчанию оно .eps.

]]>
LaTeX. Пакет Pgf/TikZ http://blog.metrotek.spb.ru/2010/04/12/latex-paket-pgftikz/ http://blog.metrotek.spb.ru/2010/04/12/latex-paket-pgftikz/#comments Mon, 12 Apr 2010 02:33:09 +0000 http://blog.metrotek.spb.ru/?p=1915
Часто встречая на форумах восторженные отзывы о пакете для LaTeX Pgf (макропакет для создания графических объектов) и его расширении TikZ, решила почитать документацию.
Как оказалось, PGF и на самом деле умеет многое: позволяет рисовать диаграммы, структурные и электрические схемы, 3D-объекты, строить сложные графики… но лучше один раз увидеть: примеры.

Думаю, что некоторые возможности этого пакета будут использоваться при создании иллюстраций к нашим руководствам пользователя.

Подробная документация на английском языке — здесь.

]]>
http://blog.metrotek.spb.ru/2010/04/12/latex-paket-pgftikz/feed/ 2