Для того, чтобы набрать с помощью LaTeX небольшой текст с малым количеством наворотов, самым простым вариантом я считаю работу в три этапа:
- включение минимальный преамбулы;
- черновой набор текста;
- оформление текста и дополнительное расширение преамбулы по необходимости.
При этом черновой набор текста можно выполнять где угодно, например в Word - у него возможности проверки орфографии и пунктуации всё-таки пошире, чем в редакторах кода LaTeX. Но людям, уверенным в своей грамотности и твёрдости руки (дабы не очепятаться), это не надо :)
Время назад: Д. Кнут, создавший ТеХ, - информатик, математик и вообще умный мужик. И его на момент разработки не сильно заморочила доступность и лёгкость ТеХ'а для не настолько умных людей. Но нас выручил Лесли Лэмпорт, который на языке ТеХ дописал вещей, которыми сделал его понятней и доступней простым смертным. Не меняя функционал ТеХ'а он упростил его, и получившееся чудо переназвал, дописав к старому имени первые буквы своей фамилии. Так получился LaTeX.
На этом работа по упрощению обращения с ТеХ'ом не остановилась, широкое мировое сообщество энтузиастов до сих пор пишет пакеты, внутри которых заключен тот или иной его функционал.
Например, стандартные команды управления полями с помощью пакета geometry заменяются на интуитивно понятные left, right, top, bottom.
То есть, пакет в LaTeX - это уже разработанный его функционал для решения конкретной задачи (порой, весьма заморочный), упакованный в более простой и компактный вид.
Площадка, на которой эти пакеты распространяются, это CTAN - основной оплот сообщества пользователей LaTeX в интернете. Там же лежат руководства к распространяемым пакетам.
Большая часть сообщества англоязычна, потому большинство руководств и написаны на английском языке, но существуют и русскоязычные описания пакетов.
Расширение преамбулы требуется тогда, когда возникает необходимость внести правки в оформление. Если возникает та или иная оформленческая задача, нужно подключить требующийся пакет в преамбуле, а потом средствами этого пакета решить задачу.
Для того, чтобы разобрать, как это происходит практически, я нашёл небольшую статью на канале Блокнот математика, и решил оформить её часть в LaTeX, подогнав оформление под Дзеновское.
Начнём с минимальной преамбулы:
\documentclass[a4paper,12pt]{article} %указали тип документа - article
%Настраиваем работу с русским языком
\usepackage{mathtext} % использование русских букв в формулах
\usepackage[english,russian]{babel} % локализация и переносы
\usepackage[utf8]{inputenc} % кодировка текста исходного кода
\usepackage[T2A]{fontenc} % внутренняя кодировка Latex
\usepackage{cmap} % поиск в PDF
Первая строка была разобрана в предыдущей статье. Далее идёт подключение пакетов с помощью команд \usepackage :
- mathtext - без него русские буквы в формулах будут игнорироваться. Включается самым первым, т.к. (по неведомым мне причинам, скрывающимся в коде пакета) если указать его в конце этой преамбулы, работать он не будет.
- babel - это наш главный бро. Он отвечает за расстановку переносов и прочую локализацию. Обязателен, если текст написан кириллицей. необязательным аргументом заданы два языка документа - английский и русский (да, в текущем тексте английский не используется, это я по привычке, можно убрать english из квадратных скобок, если вы педант).
- inputenc -подсказывает, в какой кодировке набирался исходный код (название, очевидно, пошло от слов input - ввод (типа, входной файл) и encoding - кодировка), нужен на случай, ежели исходный файл будет скормлен другому компилятору, чтоб последний не запутался. В необязательном аргументе сразу указали, какую кодировку используем. utf8 предпочтительнее прочих (имхо), но если есть желание, можно использовать unicode, или стандартную для винды кодировку cp-1252. Главное, чтоб указанная кодировка соответствовала действительности. Разные редакторы набирают текст в разных кодировках, это надо помнить.
- fontenc - указывает, в какой кодировке собирать символы в выходной файл (опять же font - шрифт, encoding - кодировка). При работе с кириллицей включаем кодировку T2A (хотя, вроде как и без этого babel её уже включает, так что, строго говоря, это лишняя строка. Но я её оставляю, так как это дело привычки, меня так научили).
- cmap - позволяет осуществлять поиск по русским символам в выходном pdf документе.
Далее пишем знакомое \begin{document} \end{document} и вставляем между ними текст статьи, учитывая следующие моменты:
- Кавычки в русской типографии приято писать « ёлочками », такие кавычки ставятся вот так : << >>. Заменяем все " в тексте на ёлочки.
- Тире, дефис, длинное тире и минус - это всё разные знаки в русской типографской традиции. Дефис ставится одним символом -, тире ставится двумя --, а длинное тире (как в начале диалогов обычно) ставится тремя символами ---. Минус ставится так же, как дефис, но в математическом режиме (чуть ниже разберём, что это).
- Все формулы заключаются в математический режим, способов перехода в него много, в нашем случае достаточно самого простого: знак $ осуществляет вход и выход из математического режима. То есть перед и после каждой формулы (и буквы, обозначающей элемент формулы) ставим знак $.
- Заголовок и подзаголовки обозначим командами \section{} \subsection{} (раздел и подраздел соответственно), в аргументах этих команд и напишем заголовки.
- Переход на новую строку (новый абзац) в исходном коде делается пустой строкой, то есть двойным нажатием на Enter. Одиночный переход на новую строку в исходном коде при компиляции интерпретируется так же, как пробел. (Кстати говоря, три, пять или 100500 пробелов при компиляции воспримутся как один пробел и никакого доп. эффекта иметь не будут)
Получаем что-то вот такое (после преамбулы):
После компиляции страница в целом выглядит как-то так:
Как видите, заголовок раздела (он же заголовок статьи) автоматически отформатировался с параметрами "по умолчанию" для класса article и пронумеровался. Первая строка раздела не имеет абзацного отступа - такова европейская типографская традиция. Довольно широкие поля, были установлены по умолчанию, как и позиция номера страницы. Все математические выражения (и буквы) не вырвались из строк, но оказались набраны отличительным шрифтом и изменили вид на более приятный глазу (индексы теперь видны как индексы без всяких служебных символов).
Большая моя удача в том, что в Дзене нет возможности набрать формулы красиво. Потому автор был вынужден сделать это по привычным правилам (нижний индекс пишется через _ , а верхний - через ^; если он состоит не из одного символа, то заключается в фигурные скобки). Это на моё счастье полностью совпадает с правилами набора формул в LaTeX, потому ничего перенабирать вообще не пришлось, только расставить символы $ в нужных местах. Подробнее о том, как набирать формулы я расскажу в следующей статье.
Чтобы соответствовать русской типографской традиции, следует отбивать первую строку раздела красной строкой. Можно это делать вручную везде , где нужен такой отступ, прописывая команду \indent (если есть тяга к мазохизму ;) ), а можно в преамбулу добавить строку \usepackage{indentfirst} (подключаем соответствующий пакет) и всё исправится.
Если захочется где-то подавить абзацный отступ, можно написать в этом месте \noindent и отступа не будет.
Вот теперь абзацные отступы есть в каждом абзаце, мы молодцы, сделали по-русски. только вот в Дзене отступов вообще нет. Так что теперь надо в начале каждого абзаца написать \noindent, чтоб этих отступов не стало. Шучу, конечно. Это сработает, но это мазохизм. Мы можем попросту задать длину абзацного отступа, в том числе и нулевую (только необходимо указать единицы измерения длины). Пишем в преамбулу \parindent=0pt , теперь все абзацные отступы имеют длину в ноль пунктов.
Кстати, между абзацами в Дзене тоже есть дополнительно пространство, а в нашем форматировании это не так. Исправить это можно, изменив величину параметра \parskip: \parskip=1em. Теперь величина расстояния между абзацами отличается от нуля и равна ширине заглавной буквы M.
Мне не очень нравятся такие широкие поля, для изменения полей я использую пакет geometry: в преамбулу пишу \usepackage[top=2cm,bottom=2cm,left=1.5cm,right=1.5cm]{geometry}, где в необязательном аргументе сразу указываю значения верхнего, нижнего, левого и правого полей соответственно в сантиметрах. Порядок указания полей значения не имеет.
Как вы могли заметить, в статье уже озвучены три разные единицы длины. Разберемся с этим подробнее.
Вообще, единицы измерения длины в LaTeX можно разбить на относительные и абсолютные. Абсолютные (сантиметр, пункт, миллиметр и др.) не зависят от текущего размера шрифта,а относительные (еm (ширина заглавной М), ex(ширина строчной x)) - зависят.
Ещё существуют команды, выполняющие роль единицы измерения, и равные длине строки (|linewidth), ширине или высоте текста (\textwidth и \textheight)( кстати, да: длина строки и ширина текста это не одно и то же). Например \parindent=0.5\linewidth задаст абзацный отступ в половину строки.
Теперь займёмся заголовками. В статье все заголовки выровнены влево, заголовок статьи написан жирным шрифтом, значительном большим, чем основной текст, а подзаголовки тоже имеют жирное начертание, но размер их соответствует обычному. Заголовки при этом не имеют номеров.
Для изменения форматов заголовков удобно использовать пакет titlesec. Подключаем сей пакет в преамбуле после чего используем следующую команду: \titleformat{заголовок}{формат}{метка}{отступ от метки}{код перед заголовком}[код после заголовка]. Содержимое аргументов команды указано в скобках.
- Заголовок - это как раз section, subsection или любой другой уровень рубрикации в документе (всего их семь).
- Формат - это формат начертания (жирный, курсив, наклонный, капитель, подчёркнутый и т.п.) сюда же относится и размер шрифта.
- Метка - это символ, который будет ставиться перед заголовком (значок параграфа, номер или т.п., всё, что будет напечатано здесь, будет печататься перед заголовком каждый раз)
- Отступ от метки - расстояние между меткой и заголовком
- код перед заголовком - это дополнительные нюансы, которые можно задать, чтоб они дублировались перед каждым заголовком
- код после заголовка - аналогично предыдущему пункту
Таким образом, в преамбуле переопределяем формат заголовков: \titleformat{\section}{\Large\bfseries}{}{0ex}{}
\titleformat{\subsection}{\normalsize\bfseries}{}{0ex}{}
Не заданные аргументы оставляем пустыми - отсутствие метки и кода до и после заголовка, величину отступа не задать нельзя даже если она нулевая (длина должна быть задана).
Остаётся оформить фрагменты текста, отчёркнутые слева линейкой. Её такой фрагмент будет выглядеть вот так:
\smallskip
\vrule width 3pt \quad\parbox{0.97\linewidth}{\textit{текст}}
\smallskip
Разбираем, что к чему:
- \smallskip делает небольшой вертикальный отступ
- \vrule создаёт вертикальную линейку, ширина её задаётся следующим после неё width 3pt (три пункта), а высота равна высоте строки (то есть высоте самого высокого элемента в строке)
- \quad делает горизонтальный отступ, равный 1 em
- \parbox{ширина}{текст} оформляет весь текст в блок заданной ширины (блок при этом считается одним символом), ширину подобрали так, чтоб граница текста (который окажется сдвинут из-за линейки) примерно совпала с границей основного текста, то есть ширина должна быть чуть короче строки в данном случае.
- \textit{текст} указывает, что текст будет набран курсивом
Таких фрагментов в тексте два (а могло быть и больше), потому, чтоб не набирать такую конструкцию много раз зададим команду, которая будет это делать:
\newcommand{название}[количество аргументов]{код, который будет выполняться этой командой; где надо вставить аргумент, ставится #1 (только оооооооооооооооочень длинный-текст заставляет Дзен перестать считать это тегом)}
То есть в нашем случае команда задаётся так:
Осталось сделать выравнивание по левому краю, для этого сразу после \begin{document} напишем команду \flushleft, выравнивающую текст влево.
Для смены начертания можно использовать два типа команд, один тип не имеет аргумента и применяется ко всему документу или, если команда набрана внутри группы (внутри фигурных скобок), ко всей группе; а другой тип команд имеют аргументы и влияют только на тот текст, что выступает в роли аргумента. Первый тип использован вот тут: \titleformat{\section}{\Large\bfseries}{}{0ex}{} а второй вот тут: \vrule width 3pt \quad\parbox{0.97\linewidth}{\textit{текст}} .
Размер шрифта меняется относительно основного в большую или меньшую сторону разными командами. Команды переключения начертания и размера приведены на слайдах ниже.
Весь файл исходного кода вы можете скачать здесь, напоминаю, (что он в кодировке utf8).
В заключение я приведу список полезных ресурсов и литературы, которые пригодятся при работе в LaTeX и поиске ответов на возникающие вопросы:
- www.ctan.org — большой архив материалов по LaTeX: каталог пакетов с краткими описаниями и подробной документацией, программное обеспечение
- detexify.kirelabs.org/classify.html — распознавание символов, нарисованных курсором (так же есть мобильное приложение Detexify), показывает какой командой вводится нарисованный символ, в каком режиме и в каком пакете такая команда есть.
- mathurl.com — онлайн-редактор формул LaTeX формата что пишу то и вижу: вводите код и сразу видите результат
- Львовский С. М. Набор и верстка в системе LaTeX
- Котельников И. А., Чеботаев П. З. LaTeX по-русски
Следующая статья будет посвящена набору сложных математических выкладок в LaTeX. Подписывайтесь, чтоб не пропустить! Лайки и комментарии приветствуются) Спасибо за уделённое время.
P.S. Планирую собрать видео о том, как этот файл собирался в TeXstudio (небольшой видеомануал о пользовании данным редактором). Если это вас интересует - пишите в комментариях)