Введение
К использованию LaTeX меня подтолкнул тот факт, что однажды при попытке добавить подписи к картинкам Word просто испортил файл: файл открывался, текст отображался, однако отредактировать что-то было невозможно. Файл был успешно восстановлен из резервной копии, но осадочек, как говорится, остался. После этого момента я и вспомнил о LaTeX, о котором когда-то слышал. Далее последовал стандартный путь изучения: гугл, книги, stackexchange, метод проб и ошибок, etc.
Я не претендую на какую-либо полноту или правильность моего решения, я описываю те задачи, которые я решил в процессе подготовки текста диплома. Некоторые из них мне показались достаточно общими, чтобы описать способы их решения в отдельной статье.
Статья подразумевает некоторые знания в LaTeX, примерно на уровне написать простую преамбулу, вставить картинку и сверстать таблицу.
Общие настройки
Я использую движок XeLaTeX и biber для обработки библиографической информации.
Общие идеи преамбулы я взял у Amet13 и дополнил необходимыми мне пакетами.
Из непосредственно химических пакетов:
- chemmacros — дает возможность выводить длинные названия веществ с адекватными переносами, и форматировать всяческие экспериментальные данные (спектры, температуры плавления)
- mhchem — форматирует простые (строчные) формулы и реакции
- chemscheme — добавляет плавающее окружение для схем реакций со своим названием и нумерацией
- chemnum — нумерация соединений
\usepackage{chemmacros}
\usepackage[version=4]{mhchem}
\mhchemoptions{layout=stacked}
\chemsetup{formula = mhchem}
\chemsetup{modules=all}
\usepackage{chemscheme}
\renewcommand{\schemename}{Схема}
\usepackage{chemnum}
\setchemnum{format=\bfseries}
Дополнительные пакеты:
- placeins — вместе с модификатором h! из пакета float не позволяет плавающим рисункам уплывать куда-нибудь не туда
- todonotes — позволяет оставлять заметки на полях и в тексте
- threeparttable — добавляет возможность делать сноски к таблицам
- makecell — переносы в таблицах (очень удивился, когда узнал, что для этого требуется отдельный пакет)
Организация файлов
Мне показалось логичным создать корневой файл, в котором подключается все необходимое — преамбула, разделы, приложения. Для всего, что подключается один раз и навсегда — папка include, для разделов — папка sections, для приложений — appendix.
У каждого раздела в папке sections своя папка, где хранятся изображения в папке img и исходные файлы схем в папке ChemDraw.
.
+-- appendix
¦ L-- img
+-- include
L-- sections
+-- conclusion
¦ L-- img
+-- experimental
¦ L-- img
+-- introduction
¦ L-- img
+-- literature
¦ +-- ChemDraw
¦ L-- img
L-- results
+-- ChemDraw
L-- img
main.tex:
\documentclass[12pt, a4paper, final]{extarticle}
\input{include/preamble.tex}
\input{include/siunitx.tex}
\input{include/acronyms.tex}
\begin{document}
\includepdf{include/titul_bac.pdf}
\include{include/toc}
\include{include/loa}
\include{sections/introduction/introduction}
\include{sections/literature/literature}
\include{sections/results/results}
\include{sections/experimental/experimental}
\include{sections/conclusion/conclusion}
\include{include/bibliography}
\include{appendix/appendix}
\end{document}
Для файлов был создан git-репозиторий в основном для бэкапа и возможности фиксировать добавление тех или иных фрагментов диплома или правок.
Картинки
Мне было удобнее использовать EPS или векторный PDF, который умеет выводить любой химический редактор.
Для создания изображения из нескольких частей, подписанных буквами, служит пакет subfigure с настройкой:
\renewcommand{\thesubfigure}{\asbuk{subfigure})}
\begin{figure}
\centering
\subfigure[Подпись к рисунку 1]
{
\includegraphics[width = 0.45\textwidth]{рисунок1}
}
\subfigure[Подпись к рисунку 2]
{
\includegraphics[width = 0.45\textwidth]{рисунок2}
}
\caption{Подпись ко всему рисунку}
\end{figure}
Таблицы
Таблицы в целом стандартные, созданы в основном с помощью Excel и сайта Tables Generator. Для того, чтобы входило больше текста все таблицы обернуты в окружение small, для переносов в ячейках строк используется пакет makecell. Для более книжного вида используются линейки различной толщины из пакета booktabs, сноски к таблицам делаются пакетом threeparttable.
Цитаты
Для LaTeX существует несколько библиографических движков: biblatex, biber. Эти программы требуют наличие bib-файла. Для его подготовки существуют несколько подходов от ручного редактирования до специальных программ типа Mendeley и Zotero.
Я пользуюсь Mendeley, потому что там у меня есть коллекция отсортированных статей.
Единственная проблема — при поиске библиографической информации по doi Mendeley загружает также дату выхода статьи, а biblatex ее вставляет в документ, давая что-то типа:
Jakob F., Herdtweck E., Bach T. Synthesis and Properties of Chiral Pyrazolidines Derived from (+)Pulegone // Chemistry A European Journal. — 2010. — Июль. — Т. 16, No 25. — С. 7537—7546.вместо
Jakob F., Herdtweck E., Bach T. Synthesis and Properties of Chiral Pyrazolidines Derived from (+)Pulegone // Chemistry A European Journal. — 2010. — Т. 16, No 25. — С. 7537— 7546.Проблема решается двумя командами в преамбуле:
\AtEveryBibitem{\clearfield{month}}
\AtEveryCitekey{\clearfield{month}}
Также в процессе общения с рецензентом выявились следующие недостатки списка литературы: для русскоязычных статей слова «Том», «Номер» и «Страницы» следует сокращать как «Т.», "№" и «С.» соответственно, а для англоязычных как «V.», "№" и «P.»; в случае, если авторов больше трех, то следует выводить первых трех (а не одного, как сделано по умолчанию) и далее [и др.] или [et al.] с учетом языка источника.
К моему счастью, biblatex позволяет настраивать вывод библиографических записей непосредственно в преамбуле. Проблема крылась в том, что Mendeley не умеет работать с полем langid в bib-файле, которое требуется для biblatex. В итоге я решил прописать каждой статье поле language через Mendeley и заменить в bib-файле «language» на «langid». Далее через интерфейс biblatex для разных языков были заданы разные настройки:
\DefineBibliographyExtras{russian}{\renewcommand{\bibrangedash}{\,--\,}}
\DefineBibliographyExtras{english}{\renewcommand{\bibrangedash}{\,--\,}}
\DefineBibliographyStrings{english}{number = {№}, jourvol = {V. }}
Также по-умолчанию несколько ссылок подряд разделяются не запятой, как это требуется по ГОСТу, а точкой с запятой. Это легко решается одной командой:
\renewcommand{\multicitedelim}{, }
Непосредственно химия
Формулы
Поскольку диплом у меня по органической химии, и все структурные формулы вставляются как изображения, то и от пакета мне требуются только простейшие формулы типа CO2, H2O и прочих, что прекрасно делается пакетом mhchem.
(\ce{Mg(ClO4)2}, \ce{Mg(NTf2)2}, \ce{TiCl4}, \ce{SnCl4}, \ce{Yb(OTf)3})
превращется в
Нумерация соединений
В органической химии принято присваивать соединениям номера, ибо иногда название вещества по системе ИЮПАК, призванной (по идее) обеспечивать однозначное соответствие между структурной формулой и названием, может растянуться строчки на две-три:
2-(1-(3,5-bis((perfluorophenyl)methoxy)benzoyl)-3-cyano-4-((E)-2-(5-((E)-4-(dibutylamino)styryl)thiophen-2-yl)vinyl)-5-oxo-1,5-dihydro-2H-pyrrol-2-ylidene)malononitrile
Современные редакторы химических структур умеют генерировать их автоматически, но на английском, и приведение их к русскоязычном нормам требует некоторых усилий, помимо перевода.
Возвращаясь к нумерации, передо мной встали две задачи: вести эту нумерацию в LaTeX и каким-то образом выводить ее на схемах в документе.
Первая задача прекрасно решается с помощью пакета chemnum, который позволяет вести нумерацию соединений в порядке их упоминания в тексте, в том числе и структур с разными заместителями, обозначающимися буквами рядом с номером, и настраивать формат этой нумерации.
Вторая же проблема имеет несколько вариантов решения. Во-первых существует изрядно устаревший подход с заменой строки текста в eps-файле с помощью специального пакета в момент компиляции документа. Способ малоприменимый на практике в моем случае: эти пакеты совместимы только с оригинальным LaTeX (а с некоторыми костылями и с pdfTeX), а новые версии ChemDraw хранят текст в eps-файле побуквенно.
Вариант номер два — отрисовывать структурные формулы средствами LaTeX, для чего служат такие пакеты как XyMTeX и chemfig. Вариант не лишенный достоинств, но требующий перевода структур в формат пакета вручную или почти вручную. В случае chemfig, существует скрипт на Python под названием mol2chemfig (который я так и не смог у себя запустить), который позволяет из стандартного формата mol получать код для отрисовки структурной формулы в LaTeX. Однако этот подход требует ручного создания схем в документе, что мне не понравилось.
В итоге я остановился на пакете overpic, который позволяет вывести любой текст поверх любого изображения в любом месте. Из недостатков — необходимость этот текст вручную выставлять, пересобирая в процессе документ несколько раз. Зато это позволяет рисовать схемы в WYSIWYG редакторе по типу ChemDraw, пользуясь всеми его графическими возможностями.
И в коде:
\begin{overpic}{sections/literature/img/azomethine_generation.eps}
\put(6, 44){\textbf{\cmpd{hydrazone}}}
\put(56, 44){\textbf{\cmpd{enhydrazine}}}
\put(6, 29){\textbf{\cmpd{carbene}}}
\put(62, 29){\textbf{\cmpd{silyl}}}
\put(6, 15){\textbf{\cmpd{oxidation}}}
\put(49, 16){\textbf{\cmpd{diazo}}}
\put(65, 16){\textbf{\cmpd{azo}}}
\put(22, 0){\textbf{\cmpd{metathezis}}}
\end{overpic}
Экспериментальные данные
В отличие от основной части работы, в экспериментальной части принято приводить полные названия соединений по ИЮПАК, а не номера. Проблема заключается в том, что LaTeX в каждом слове допускает только один перенос, а команда \iupac{} из пакета chemmacros позволяет своему аргументу переноситься несколько раз и добавляет макросы \E, \Z и подобные для использования в названиях соединений.
Также принято приводить экспериментальные характеристики полученных соединений — температуру плавления, спектры и прочие подобные вещи.
\data*{Т\textsubscript*{пл.}} 147--\SI{150}{\celsius}.
будет выведено как:
Приложения
Неотъемлемая часть любого диплома — приложения. Обычно туда выносят все, что имеет слишком большой объем для основного текста, но может быть полезно. Для этого я использовал пакет appendix с некоторыми костылями.
Стандарты оформления моего ВУЗа требуют не нумеровать страницы в приложениях и давать их заголовки с выравниванием вправо.
\pagenumbering{gobble}
\titleformat*{\section}{\raggedleft\large\bfseries}
Из оглавления я также решил их убрать.
\addtocontents{toc}{\protect\setcounter{tocdepth}{0}}
По-умолчанию пакет appendix нумерует приложения латинским буквами, я изменил нумерацию на арабскую в соответствии со стандартами оформления (опять с помощью костыля)
\makeatletter
\renewcommand{\thesection}{\@arabic\c@section}
\makeatother
В приложениях у меня живут в основном ЯМР-спектры в виде картинок, которые из программы для их обработки выходят в виде PDF формата A4 альбомной ориентации. К сожалению, у меня так и не получилось в одном документе совместить книжную и альбомную ориентацию (я подозреваю, что это вообще невозможно), поэтому пришлось изобретать свой велосипед с использованием пакета rotating.
\begin{figure}[h!]
\rotatebox{90}{
\begin{minipage}{0.82\textheight}
\includegraphics[width=\linewidth]{appendix/img/1.pdf}
\caption{Спектр 1}
\end{minipage}
}
\end{figure}
Список сокращений
Список сокращений я делал с использованием пакета acro. Он позволяет создать отдельно список сокращений, вывести его в необходимом месте и вставлять сами сокращения по тексту в нужном формате. Большего мне не требовалось.
\DeclareAcronym{bz}
{
short={Bz},
long={Бензоил},
first-style=short
}
при упоминании в тексте как
\ac{bz}
будет выведено в виде «Bz» а в списке сокращений будет приведено с расшифровкой.Часть списка сокращений выглядит так:
Презентация
На презентации к защите останавливаться не буду, поскольку решил ее делать по-старинке — в PowerPoint. На мой взгляд, «смотрибельность» для презентации важнее, а WYSIWYG-подход этому более способствует.
Вместо заключения
Главный вопрос: стоило ли оно того? К окончательному выводу я так и не пришел, поскольку при всех его достоинствах LaTeX выдает PDF-файл, в который невозможно вносить исправления. Из-за этого моему руководителю приходилось каждый раз присылать список правок в виде файла в Word'e. Также мне сильно повезло с тем, что в моем ВУЗе отстутствует такое мероприятие как нормоконтроль, и в большинстве вопросов оформления я был ограничен только своим чувством прекрасного и здравым смыслом.
В итоге я решил для себя, что связываться с LaTeX имеет смысл только для довольно больших документов, иначе создание всех файлов и организация папок занимает больше усилий, чем содержательная часть работы.
Основными источниками информации для статьи послужили:
- Серия статей «Каталог классов и стилей LaTeX» за авторством Евгения Балдина, в особенности, пятая часть
- Раздел chemistry на CTAN
- Документация упомянутых в статье пакетов
AADogov
Моя первая статья на хабре (тогда еще был Geegtimes) была про вёрстку документов, дипломов и диссертаций в Word тогда мне все доказывали что в Word невозможно нормально сверстать что либо сложнее письма или реферата. И нужно использовать LaTex.
Чем мне не нравится LaTex так это высоким порогом входа по сравнению с Word. Постоянно приходится искать как реализовать ту или иную фичу. Нормального учебника я не нашел, очень хотел пойти на курсы по LaTex, но их видел только одни раз, а сейчас с этим совсем трудно.
roma28 Автор
Смотря что считать версткой, моей основной задачей было сделать так, чтобы у меня правильно и автоматически работали все перекрестные ссылки, ссылки на литературу и номера соединений. В Word это как-то делают, даже диссертации пишут, но у меня в документе с большим количеством картинок и ссылок плавность прокрутки пропадает, начиная примерно с 20 страниц.
AADogov
Я с вами согласен что Word быстро начинает тормозить с увеличением размера. Мой личный рекорд это отчет о НИИР сверстанный по госту 7.32-2017. На 1010 страниц, 530 рисунков, 20 таблиц, плюс формулы и источников больше сотни, на все были перекрёстные ссылки. Все это с трудом «шевелилось» на моем не слабом компе. Это я считаю почти предел возможностей Word.
unclegluk
Мне как-то принесли вордовский файл на 250 мегабайт. Компьютер его открывал долго, но потом работал с ним нормально, без тормозов. Пока я не закрыл его.
port443
В древнем седьмом была такая штука как «мастер-документ». Этого уже нет?
В конце 90-х позволило на впонле средних машинках подготовить 200+ странчный документ со вставленным всяким (формулы, изображения и т.п.).
lz961
Так это знать надо Word.
Evgeniy_Bond
Да, когда учишься/работаешь в сфере STEM (в том числе и программировании), где и так время летит чересчур быстро, то приходится выбирать: если не требуется везде или строго — пока нет смысла учить. Вот если на работе скажут, что надо это или это, тогда это становится сигналом, что пора. Так например произошло в моей универской практике, где в фирме используется GitLab (вместо GitHub), а там записи надо было вести с применением Markdown. Тут-то я поразился тому, насколько некоторые вещи были неочевидны (нюансы). Если с Markdown местами было тяжеловато (хотя в принципе там легко, если исключить некоторые приколы), то что же там в ЛаТексе!??
Такой вот неоднозначный опыт почти у всех, кто очень долго сидел на Word. Всё-таки после такого опыта тыканье мышкой или пальцем на кнопку в интерфейсе Word происходит гораздо быстрее, чем если набирать это словами в том же Markdown.
P.S. Только щас заметил, что в Хабре тоже можно так комментить с применением Markdown, как же давно я здесь не был!
Shkaff
Но в целом можно использовать WYSIWYG редакторы, которые с большей частью латеха справляются на ура, и порог входа минимальный.
lz961
Потом такое ''счастье'' работать с документами, созданными таким образом.
Shkaff
Интересно, а что там получается? Я потому что никогда не работал с этим, только пробовал любопытства ради, и там все ок получалось.
lz961
и это далеко не все формула.
Но согласитесь, хорошо ведь. Сразу структура выражения видна.
Shkaff
Ну так себе, да, согласен. Но если в код не лезть, то оно и норм, наверное. Зависит от целей, конечно.
Zenitchik
А если в код не лезть, то нафига связываться с латехом? ИМХО, главная фишка латеха как раз в том, что можно видеть и править код.
Shkaff
Я имел в виду, что не обязательно править код уравнений, если работать в WYSIWYG. Можно править стиль или другие общие настройки и получить все бонусы хорошей типографии.
qbertych
Есть известный пост про гит, которая начинается со слов
На мой взгляд это идеальное описание latex'а, и автору этих строк очень повезло, что он с ним никогда не сталкивался. По сравнению с бессмысленностью и беспощадностью происходящего в latex'е гит — это так, мелкие неурядицы.
GeMir