latex
Вообще LaTeX и TeX - большие, сложные и страшные. Но если не заморачиваться, а понять немногие простые вещи, и пользоваться ограниченным количеством простых же «фраз из разговорника», то вполне юзабельно получается.
lualatex или xelatex. У обоих неплохо с юникодом и ttf-шрифтами. Lualatex имеет то преимущество, что он же даёт кириллицу и при экспорте в html через htlatex. В остальном для меня разницы практически нет.
Писала исходно в латехе же, но вот мигрирую. Были неудобства что там, что тут. Часть текста пришлось выделять в подстраницы не потому, что так удобнее читать, а потому, что разметка переставала распознаваться. При этом с корректностью достаточно ок, чтобы при вырезании исчезали проблемы как в вырезанном, так и в оставшемся. Такие вот ограничения.
Почему LaTeX?
- LaTeX - это текст. Позволяет использовать git или другую систему управления версиями для хранения истории правок, и для хранения актуальной копии и текста, и истории, вне своего компа. На гитлабе, например. Иногда история позволяла найти очень зря удалённые фрагменты )) При этом рабочие файлы от истории не толстеют )
- Все обычные плюсы логической разметки и возможности разом менять отображение однотипных элементов во всём документе, равно как и возможность не пользоваться этим. Правда, не пользоваться - это для весьма неленивых ))
- Разметка - видимый и редактируемый текст, не превращается в кашу закрытых и сразу же снова открытых элементов оформления при правке документа (что утяжеляет офисные документы без видимого изменения содержания, и фиг устранишь).
- Есть возможность разбить документ на много файлов, но при этом обозревать и структуру целого - это ещё и заслуга auctex-а в моём случае.
- Возможность собирать отдельные файлы из большого набора в отдельные документы и группы файлов в отдельные документы. Пакет standalone латеха + python-doit (или что-то другое похожее, или руками).
- Текстовый редактор вообще обычно шевелится лучше, чем офисный текстовый процессор. А если это редактор с небольшим файлом против офиса с мегадокументом (см выше про разбиение), так несравненно лучше! Удобно работать с реально большими объемами текста.
- Ссылки. Можно переносить ссылки и метки, на которые ссылаешься, между рабочими файлами сколько угодно и куда угодно, ничего в них не меняя - связность не теряется.
- Возможность держать в тексте то, что не пойдёт в итоговый результат - комментарии, iffalse. Любые свои примечания, мысли о возможном развитии темы, ассоциативное и прочая. Для меня ценное удобство.
- Возможность держать в одном тексте несколько вариантов текста и при сборке получать конкретный по желанию. if с разными условиями. Редкое удобство )
- Возможность держать при тексте то, что пойдёт в результат по мере использования - библиографические ссылки, глоссарий. На что есть ссылка из текста, то в результате будет, остальное не мешает. Можно спокойно собирать большие файлы со всем, что только не лень в них было засунуть. ))
- Богатые возможности оформления. Я их практически не использую, но маргиналии - заметки на полях - люблю. Другой что-то своё найдёт. Причём при изменении текста можно не особо задумываться о том, как к этому приспособится оформление - почти всегда неплохо. (Ну, тут таки можно накосячить, я убедилась :))
Мелкоразное
\relax
- ничего не делать- /usr/share/doc/texlive-doc/latex/lshort-russian/lshortru.pdf - один из туториалов. На русском, живёт вот в составе доков техлива.
- Правильный апостроф:
\'
.
- http://www.tex.ac.uk/FAQ-nopagebrk.html - как запретить разрыв страницы.
- lacheck - проверялка. Вполне небессмысленная. Просто lacheck hypomnemata.tex например.
- chktex - тож проверялка.
- latexmk - Неплохая собиралка, норм запускать из doit.
- latexdiff - типа, специализированный дифф. А нужен ли он мне?
- Из tex-extra-utils
- texcount - подсчёт словей в latex-овом документе.
- texdef - определения латеховых команд.
fc-list :lang=ru
- узнать, какие шрифты с поддержкой русского есть в системе.- Чтоб регулировать развесистость оглавления в emacs (вызываемого по С-с =), использовать 0-9 - t. 0 - t даёт оглавление только с названиями частей, 1 - t - c названиями глав, и т.д. до 9 - всё мыслимое )
latex в html
Пока кривовато, но уже лучше, чем pandoc, хотя бы тем, что читает условия (pandoc, в принципе, сам условия умеет, но по крайней мере тогда в латехе их не понимал).
make4ht -uls -f html5-common_filters-common_domfilters -d html computer.tex
На основе tex4ht.
- -l - lualatex
- Так и именно так отображается кириллица. (Если хочется делать pdf луалатехом, то запускать надо именно lualatex, не luatex. Тоже неплохо, и я пока знаю только одно несущественное расхождение с xelatex по используемым пакетам.)
- -s,–shell-escape
- Enables running external programs from LaTeX - мне нужен minted как минимум.
- -u,–utf8
- For output documents in utf8 encoding
- Фильтр staticsite
- похоже, просто прибавляет дату к имени файла.
- d
- каталог, куда переносить готовые файлы
Прочее:
- https://github.com/michal-h21/make4ht
- https://github.com/michal-h21/helpers4ht/ - может пригодиться в будущем.
- https://github.com/michal-h21/tex4ebook - сразу делает epub, либо epub3, либо mobi.
- https://tex.stackexchange.com/questions/237566/best-workflows-or-tools-to-generate-an-html-web-page-from-a-complex-latex-docume/ - про некоторые дополнительные фишки
tex4ebook --output-dir dir --shell-escape --lua
В случае, если label, на который ссылка, отсутствует в этом документе, то получается не слово без ссылки, а ?? и всё. Съедает часть символов или заменяет на что-то своё. Но для бесхитростной художки, например, должно быть ок.
- tth - latex 2 html конвертер.
- latex2html и gnuhtml2latex - вроде бы в обе стороны. Но как-то не особо верится.
- http://tiarno.github.io/plastex/plastex/index.html и https://github.com/tiarno/plastex. Похоже, не дружит со standalone, как минимум. Возможно, и с minted.
Устройство документа
Команды LATEX
Команды LATEX чувствительны к регистру и принимают одну из следующих двух форм:
- начинаются с символа backslash «\(\backslash\)» и продолжаются именем, состоящим только из букв. Имена команд завершаются пробелом, цифрой или любой другой «не-буквой».
- состоят из «\(\backslash\)» и ровно одного специального символа.
LATEX игнорирует пробелы после команд. Если вы хотите получить пробел после команды, вы должны поместить или «\{\}» и пробел, или специальную команду пробела после имени команды. «\{\}» не дает LATEX игнорировать все пробелы после имени команды.
Я слышал, что Кнут разделяет людей, работающих с \TeX{} на \TeX{}ников и \TeX пертов.\\ Сегодня~--- \today
Некоторые команды нуждаются в параметре, который должен быть задан между фигурными скобками { }
после имени команды. Некоторые команды поддерживают необязательные параметры, которые добавляются после имени команды в квадратных скобках [ ]
. Следующий пример использует некоторые команды LATEX.
Вы можете \textsl{положиться} на меня! Пожалуйста, начните новую строчку прямо тут!\newline Спасибо!
Определить, примитив ли команда
\show\команда
.
Примитив \input
даст \input=\input
Макрос \thinspace
даст
\thinspace=macro: \kern=.16667em
, то бишь - что там спрятано применение \kern
с определённым значением.
Результат \show
кладётся в логи, и если тех запущен интерактивненько - в терминал.
Спецсимволы
Следующие символы являются зарезервированными символами, которые имеют в LATEX специальное значение. Если вы введете их в текст напрямую, то они обычно не напечатаются, а заставят LATEX сделать что-нибудь.
{ } $ & # % _ ^ ~ \ % - комментарий \ - экранирование $ - граница формулы {} - группы < > | _ и ^ - части формул ~ - неразрывный пробел
Эти символы можно использовать в ваших документах, добавляя к ним префикс \
: $ & % # _ { }
.
Знак \ нельзя вводить, добавляя перед ним еще один, так как эта команда \\
используется для разрыва строки. Вместо этого пользуйтесь командой $\backslash$
. Она дает \
.
Структура входного файла
Когда LATEX2e обрабатывает входной файл, он ожидает от него следования определенной структуре. Так, каждый входной файл должен начитаться с команды
\documentclass{...}
Она указывает, документ какого типа я собираюсь писать.
После этого в «преамбулу» документа можно включать команды, влияющие на стиль документа в целом, или загружать пакеты, добавляющие новые возможности в систему LATEX. Для загрузки такого пакета используется команда \usepackage{...}
.
Когда вся настройка закончена, тело текста начинается командой \begin{document}
.
Далее идёт текст с командами LATEX. В конце документа нужна команда \end{document}
Все, что следует после нее, LATEX игнорирует.
Минимальный файл LATEX (% в начале строк убрать).
%\documentclass{article} %\begin{document} %\Краткость — сестра таланта. %\end{document}
Кириллица в нём, вероятно, даже не отобразится.
Классы документов
\documentclass[опции]{класс}
Класс определяет тип создаваемого документа. Параметр опции изменяет поведение класса документа. Опции должны разделяться запятыми.
Область между documentclass и begin{document} называется преамбулой.
Популярные классы:
- article - для статей в научных журналах, презентаций, коротких отчетов, программной документации, приглашений…
- report - для более длинных отчетов, содержащих несколько глав, небольших книжек, диссертаций…
- book - для настоящих книг
- slides - для слайдов. Использует большие буквы без засечек. Вместо этого можно использовать FoilTEX6.
- proc - доклады
- letters - письма
- memoir - мегакнига, которая может включать в себя несколько книг
А вообще их есть и можно создавать свои.
Опции классов
В принципе, определяются в самом классе, и к классам как правило есть доки. Но некоторые варианты:
- Размер бумаги: a4paper – 210 на 297 мм; a5paper – 148 на 210 мм; b5paper – 176 на 250 мм; legalpaper – 8.5 на 14 дюймов (1 дюйм=2,54 см); executivepaper – 7.25 на 10.5 дюймов. По умолчанию размер бумаги 8.5 на 11 дюймов (класс letter). В классе proc использовать опции a5paper и b5paper нельзя.
- Размер шрифта: 10pt, 11pt, 12pt. По умолчанию - 10.
- Опция landskape задает оформление альбомного листа.
- Опция oneside задает оформление текста с одинаковыми полями для четных и нечетных страниц (в отличие от twoside). Опция twoside по умолчанию стоит в классе book, oneside – по умолчанию в article и report, в классе proc поля страницы всегда одинаковые.
- Для классов article, report и book существует опция twocolumn – печать в две колонки (по умолчанию стоит onecolumn). В proc печать осуществляется всегда в две колонки.
- Опция raggedbottom позволяет верстать страницы с разной высотой, по умолчанию стоит в классах article и report (если не указана двусторонняя печать), в классе proc изменить эту опцию невозможно.
- Для классов report и book предусмотрена опция openright (по умолчанию в book), позволяющая печатать каждую главу с нечетной страницы. Если использовать опцию openany, то главы будут начинаться как с четных, так и с нечетных страниц (по умолчанию в report).
- Опция draft для любого класса будет графически помечать каждую overfull-строку на печати.
- В классе proc внизу каждой страницы будет написано page №. Если написать в преамбуле документов:
\renewcommand{\pagename}{с.}
или\renewcommand{\pagename}{стр.}
или\renewcommand{\pagename}{страница}
, то вместо Page № внизу страницы будет написано с., стр. или страница соответственно. - titlepage, notitlepage Указывает, должна начинаться новая страница после заголовка документа или нет. По умолчанию класс article не начинает новую страницу, а report и book — начинают.
Пример: Входной файл для документа LATEX может начинаться строкой
\documentclass[11pt,twoside,a4paper]{article}
она заставляет LATEX набирать документ как статью, с базовым размером шрифта одиннадцать пунктов и форматировать документ для двусторонней печати на бумаге формата A4.
Пакеты
Пакеты активизируются командой \usepackage[опции]{пакет}
Аргумент этой команды — это список (через запятую) стилевых пакетов, подключаемых к нашему документу. То бишь, пакетов одной командой можно подключить несколько.
Некоторые стилевые пакеты допускают задание своих личных стилевых опций (каких именно — зависит от пакета). Список стилевых опций пакета задается в необязательном аргументе команды \usepackage
(тоже через запятую, если опций несколько, и не уверена, как оно будет обрабатываться в случае списка пакетов).
Стиль страницы
LATEX поддерживает три предопределенных комбинации верхнего колонтитула и нижнего колонтитула — так называемые стили страницы. Параметр стиль команды pagestyle{стиль}
определяет, какой из них использовать.
- plain - печатает номера страниц внизу страницы в середине нижнего колонтитула. Этот стиль установлен по умолчанию.
- headings - печатает название текущей главы и номер страницы в верхнем колонтитуле каждой страницы, а нижний колонтитул остается пустым.
- empty делает и верхние, и нижние колонтитулы пустыми.
Возможно сменить стиль текущей страницы командой thispagestyle{стиль}
.
Составной документ
\include{файл}
- можно использовать в теле документа, чтобы включить в него содержимое другого файла.
\includeonly{filename,filename ,...{}}
может использоваться только в преамбуле. Она указывает LATEX читать только некоторые из включенных (\include
) файлов. После выполнения в преамбуле документа этой команды будут выполняться только те команды include, чьи имена файлов перечислены в аргументе команды includeonly.
Команда \include
начинает верстку включаемого текста на новой странице. Это удобно при использовании \includeonly
, потому что границы страниц не будут двигаться, даже когда некоторые включаемые файлы пропускаются.
Команду \include
нельзя употреблять в файле, который сам включается в текст с помощью \include
. Для \input
такого запрета нет.
Если в тексте написать \input{имя_файла}
, то TEX будет работать так, как если бы вместо строки с командой \input
стоял текст файла, имя которого вы указали.
Если в тексте присутствуют команды \input
, то в процессе трансляции при начале чтения соответствующего файла на экран выдается его имя, чтобы было понятно, к какому из файлов будут относиться дальнейшие сообщения TEX’а (если таковые будут).
Если нужно, чтобы TEX прочитал только часть вашего файла, можно воспользоваться командой без параметров \endinput
. Если она присутствует в файле, то файл будет прочитан только до строчки, в которой написано \endinput
, после чего его чтение прекратится.
Для того, чтоб включать в документ другие документы, а не просто разбивать текст на фрагменты, есть пакеты subfile, standalone (использую), docmute (для импорта ровно того, что между begin и end document), класс combine, про который я ничего не знаю. К сожалению, reftex емакса не умеет понимать import
.
Титульный лист
Титульный лист документа в целом генерируется при помощи команды \maketitle
Его содержимое должно быть определено командами \title{...}
, \author{...}
и \date{...}
до момента вызова \maketitle
. Аргумент команды \author
может содержать несколько имен, разделенных командами \and
.
Можно при желании вообще не использовать стиль оформления титульного листа, диктуемый LATEX’ом. Тогда надо воспользоваться окружением titlepage. Точнее, надо посмотреть в доках, какое именно окружение для этой задачи предоставляет класс документа, и что делает (здесь могут быть драконы ;)). В memoir это titlingpage. А titlepage - это, вроде бы в article, report, book.
Текст между \begin{titlepage}
и \end{titlepage}
составит титульный лист, за оформление которого целиком отвечает тот, кто текст готовит. Сам LATEX внутри этого окружения делает только три вещи:
- устанавливает печать в одну колонку (даже если сам документ будет печататься в две колонки);
- начинает новую страницу и устанавливает счетчик числа страниц в нуль;
- устанавливает странице стиль оформления empty (без колонтитула и номера).
Что и как разместить на этой странице — дело авторское.
Некоторые примеры обложек и титульных листов.
- http://www.latextemplates.com/cat/books - шаблоны оформления. Правда, не для memoir.
- https://tex.stackexchange.com/questions/85904/showcase-of-beautiful-title-page-done-in-tex отсюда.
- https://www.ctan.org/tex-archive/info/latex-samples/TitlePages
- https://tex.stackexchange.com/questions/209993/how-to-customize-my-titlepage
- https://tex.stackexchange.com/questions/122119/making-a-title-page-with-a-subtitle-in-memoir
Заголовки, главы и разделы
LATEX поддерживает это специальными командами, принимающими в качестве аргумента заголовок раздела.
Класс article включает следующие команды секционирования:
\section{...}
** ...}
\subsubsection{...}
\paragraph{...}
\subparagraph{...}
В классах report и book есть \chapter{...}
. В memoir есть еще уровень book.
Так как глав (chapter) в классе article нет, то статьи довольно легко добавлять в книгу в качестве глав. Интервалы между разделами, нумерация и размер шрифта заголовков устанавливаются LATEX автоматически.
Две из команд секционирования — особенные:
- Команда
\part
не влияет на последовательность нумерования глав. - Команда
\appendix
аргумента не имеет. Она просто начинает нумеровать главы (или разделы в article) буквами вместо цифр.
Все вышеперечисленные команды секционирования существуют также в вариантах со звездочкой. Они создают заголовки разделов, которые не нумеруются и не включаются в оглавление. Например, section{Справка}
становится section*{Справка}.
и никуда не включается.
Если хочется, чтоб такой ненумерованный заголовок всё же оказался в оглавлении, используется \addcontentsline
. И нужна ещё «phantom section», чтоб закладка в pdf указывала на правильное место документа. Команда \phantomsection
есть в пакете hyperref
. Выглядит всё в итоге примерно так:
\phantomsection\addcontentsline{toc}{section}{Introduction} \section*{Introduction}
И да, полагаться на надёжность латехового verbatim-а, увы, не приходится. Из строчек выше в латеховой версии пришлось убрать слэши, чтоб перестала выдаваться ошибка.
Оглавление
LATEX создает оглавление, беря заголовки разделов и номера страниц из предыдущего цикла компиляции документа. Команда \tableofcontents
вставляет оглавление в то место, где она вызвана. Чтобы получить правильное оглавление, новый документ должен быть обработан LATEX дважды. Иногда может понадобиться и третий проход, тогда Latex предупредит.
Глубина оглавления
\setcounter{tocdepth}{4}
Число, разумеется, можно менять. Чем больше - тем больше уровней. 0-9, кажется…
Обычно заголовки разделов появляются в оглавлении точно в том же виде, в каком они вводятся в тексте. Иногда это невозможно из-за того, что заголовок слишком длинен для оглавления. Элемент оглавления может в этом случае указываться необязательным аргументом перед собственно заголовком.
\chapter[Заголовок для оглавления]{Длинный-длинный, подробный и очень художественный заголовок, появляющийся в тексте}
Управление абзацами в Latex
Каждый абзац в системе Latex должен заканчиваться пустой строкой. Также в качестве команды “закончить абзац” можно использовать команду \par
. Несколько записанных подряд команд \par
, также как и несколько подряд пустых строк будут равносильны одной команде \par
и одной пустой строке. Команда \\
может иметь необязательный аргумент [n]
, значение которого, указанное в определенных единицах длины, будет равно размеру дополнительного вертикального промежутка.
\\
(разрыв строки без растяжений)\linebreak
– разрыв строки с выравниванием по правому краю. Необязательный аргумент[ ]
этой команды может содержать цифры от 0 до 4, которые показывают степень желательности перехода на новую строку:- 0 – разрыв не нужен (в данном случае можно использовать команду
\nolinebreak
, котрая запрещает делать разрыв); - 1-3 – разрыв желателен;
- 4 – разрыв обязателен.
- 0 – разрыв не нужен (в данном случае можно использовать команду
\raggedright
и\raggedleft
– абзацы с использованием этих команд будут иметь неровную правую, либо левую границу соответственно. Ставятся в конце абзаца, на который должны действовать.\parindent
– устанавливает значение абзацного отступа.\noindent
- используется для единичного подавления абзацного отступа.\looseness=n
– используется для уменьшения или увеличения абзаца на определенное количество строк. К примеру,\looseness=1
сделает абзац на одну строку длиннее за счет растяжения слов, а\looseness=-1
– короче за счет сжатия. По умолчанию looseness=0, новое значение должно присваиваться для каждого абзаца заново.\parfillskip=0pt
– эта команда с нулевым значением может помочь в том случае, если длина последней строки абзаца немногим короче ширины страницы.\parfillskip
постарается растянуть последнюю строку, увеличивая промежутки между словами в строках абзаца.\clubpenalty
– отвечает за нежелательность разрыва страницы после первой строки абзаца.\widowpenalty
– отвечает за нежелательность разрыва страницы перед последней строкой абзаца.
Чем выше значение этих параметров, тем реже происходят разрывы. По умолчанию значение \clubpenalty
и \widowpenalty
= 150. Максимальное значение этих команд (полный запрет разрывов) = 10000.
Выравнивание абзацев
- Окружение center – выравнивание абзацев по центру.
- Окружение flushleft – выравнивание абзацев по левому краю.
- Окружение flushright – выравнивание абзацев по правому краю.
Окружение — это \begin{окружение} Содержимое \end{окружение}
.
Нестандартные абзацы
\hangindent=n
– задает величину отступа от полей во всех строках, кроме первой. Может принимать как положительные (отступ от левого края), так и отрицательные значения (отступ от правого края).\hangafter=n
– задает номер строки, после которой начинается дополнительный отступ. С отрицательным значением задает количество первых строк, в которых будет дополнительный отступ.\parshape=n
– задет количество строк, имеющих нестандартную длину.
Пример использования parshape (% в начале строк убрать):
%\parshape=14 % %0cm 6cm .1cm 5.8cm .17cm 5.66cm .5cm 5cm % %.9cm 4.2cm 1.05cm 3.9cm 1.1cm 3.8cm 1.1cm 3.8cm % %1.05cm 3.9cm .9cm 4.2cm .5cm 5cm .17cm 5.66cm % %.1cm 5.8cm 0cm 6cm % %\noindent \small
Здесь:
- 14 – количество строк, имеющих нестандартные длину и/или отступ от левого поля.
- Далее через пробел перечислены отступы от левого поля и длины строк:
- 0cm – отступ первой строки от левого поля,
- 6cm – ее длина,
- 0.1cm – отступ второй строки от левого поля,
- 5.8cm – ее длина
- и т.д.
- 0cm – отступ первой строки от левого поля,
После пустой строки или команды \par
действие параметров команды \parshape
прекращается.
Разметка элементов
Размеры шрифта
\Huge Это какой-то текст \huge Это какой-то текст \LARGE Это какой-то текст \Large Это какой-то текст \large Это какой-то текст \normalsize (размер по умолчанию) Это какой-то текст \small Это какой-то текст \footnotesize Это какой-то текст \scriptsize Это какой-то текст \tiny Это какой-то текст
Картинки
Папки, где могут лежать картинки, указываются примерно так: \graphicspath{{images-overview/}{images-deconv/}{images-linearization/}{images-noiseincoding/}{images-linearization/imagemotion/}{images-opticalcoding/}}
Чтобы вставить изображение, используем команду \includegraphics
. Синтаксис команды таков: \includegraphics[keyval-list]{file}
, где file — имя файла, а keyval-list — список ключей, которые задаются в виде key=value через запятую.
Расширение файла с рисунком в команде \includegraphics
можно не указывать, поскольку драйвер сам знает, какие типы файлов он может обработать, а какие нет. Для драйвера dvips это файлы с расширением eps, ps, eps.gz, ps.gz, eps.Z, а для драйвера pdftex — png, pdf, jpg, mps, tif. Когда расширение файла в команде не указано, драйвер последовательно добавляет к имени файла все известные ему расширения, пока не найдёт первый подходящий файл.
Можно задавать размеры в опциях. В том числе - «по местности», например \includegraphics[height=0.8\textheight,keepaspectratio]{./images/japan/dvorniki.png}
, textheight - это высота текста на странице. Textwidth или linewidth - ширина текста или конкретной строки.
width=length — устанавливает в любых TeX’овских единицах длины ширину области, выделяемой для рисунка. height=length — устанавливает высоту рисунка. Примеры:
\includegraphics[width=1in]{01}
\includegraphics[width=1in,height=10mm]{01}
- totalheight=length — полная высота. Интересно, что туда включается
- keepaspectratio — сохраняет пропорцию рисунка при заданном одном измерении. Пример:
\includegraphics[width=1in,keepaspectratio]{01}
- scale=scale — масштабирование рисунка в scale раз. Пример:
\includegraphics[scale=0.5]{01}
viewport=llx lly urx ury, trim=dl db dr du
— эти ключи задают так называемую видимую область рисунка. Здесь llx lly urx ury — это x- и y-координаты левого нижнего и правого верхнего углов видимой области рисунка относительно точки отсчёта, а dl db dr du — это расстояния между левыми, нижними, правыми и верхними границами видимой области рисунка и самого рисунка. Пример:\includegraphics[viewport=-5 -5 50 50]{01}
- clip=boolean — если значение равно true, то данный ключ отсекает часть рисунка, выходящую за границы видимой области. Пример:
\includegraphics[viewport=-5 -5 50 50,clip]{01}
- angle=angle — этот ключ поворачивает рисунок на angle градусов против часовой стрелки. Ось вращения проходит через точку отсчёта бокса. Пример:
\includegraphics[scale=0.3,angle=30]{01}
- draft — на стадии подготовки документа можно использовать этот ключ. Он указывает, что вместо рисунка надо начертить рамку и напечатать внутри неё имя файла. Пример:
\includegraphics[scale=0.5,draft]{01}
Выравнивание картинок
For general text you can use \raggedright
and \raggedleft
to align the material to the left and right, respectively. To align images inside a figure easily you can use the adjustbox package which allows you to add alignment keys to \includegraphics
.
https://tex.stackexchange.com/questions/91566/syntax-similar-to-centering-for-right-and-left
Картинка с подписью и якорьком для ссылок
(% в начале строк убрать)
%\begin{figure}[h] %\center{\includegraphics[width=1\linewidth]{image}} %\caption{Зависимость сигнала от шума для данных.} %\label{ris:image} %\end{figure}
определить место рисунка в тексте - разрешить алгоритмам ТеХа принять решение исходя из заполненности страницы. Опция h - "хотелось бы картинку здесь", настойчиво просить разместить после текста, h! - "очень хочу картинку здесь", и ударить кулаком по столу - картинку тут и точка H "ХОЧУ картинку здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ картинку отдельно на страницу так: \begin{figure}[pH].
. Задать размер изображения и расположить по центру. Вставить подпись под рисунком caption. Вставить якорёк на рисунок label.
Ещё некоторые варианты описаны тут: http://mydebianblog.blogspot.ru/2008/12/latex%5C_15.html
Как избежать картинок на отдельных страницах
Preventing figures from appearing on a page by themselves.
LaTeX's figure placement algorithm is quite biased in favor of putting figures on a page by themselves, instead of on the top of a page with some text below it. Often, I find the result esthetically unappealing (to be polite). Fortunately, the parameters of the algorithm can be changed. The main problem is that LaTeX per default only allows a part of the top of a text-page (70%) to contain figures, and requires at least 20% of a page to be text when text and figures share a page. These parameters should be set to more reasonable values, for example 85% and 10%.
\renewcommand{\topfraction}{0.85} \renewcommand{\textfraction}{0.1}
This helps, but sometimes LaTeX puts a figure on a page by itself, although it would fit perfectly well on the top of a page. This happens when the figure will not fit on the page where it was defined. LaTeX then attempts to put it on a figures-only page before it attempts to put it at the top of the next page. A page may contain figures alone if the figure(s) use at least half the page. To prevent half-empty pages this limit should probably be increased to around 75%.
\renewcommand{\floatpagefraction}{0.75}
Be careful not to make \floatpagefraction
larger than \topfraction
, then you risk to produce a figure that can neither go on the top of a text page, nor on a page by itself. If that happens, the figure and all later figures will be postponed until next time a \clearpage
is executed (typically at the end of a chapter or the end of the document). This will also happen if a figure is too large to fit on a page.
Redefining the label used in captions
Do you want "Fig. 1" instead of "Figure 1" in all the captions? This is easy, just use
\renewcommand{\figurename}{Fig.}
For tables, redefine \tablename
.
Гиперссылки
Внутренние
Поставить метку: \label{label_name}
Метка - любая последовательность букв и цифр, но без пробелов.
Ссылка на страницу, на которой расположена метка, производится с помощью команды \pageref
. У нее также один обязательный аргумент — та самая метка, на которую вы хотите сослаться. Укажет страницу.
Обязательно мойте руки\label{wash} перед едой, чтобы не заболеть. Как известно (см. с.~\pageref{wash}), руки надо мыть.
Можно сослаться с помощью команды \ref
, а не \pageref
— тогда на печати получится не номер страницы, а номер раздела документа, в котором находится метка, или номер рисунка, или номер элемента в нумерованном перечне и т. п. — пометить с возможностью ссылки можно почти любой элемент документа.
И наконец, \hyperref[label_name]{link text}
. Получается ссылка, на которую можно нажать, на указанном тексте.
Есть пакет \texttt{refcheck} для поиска неиспользованных меток.
Внешние
Спрятанная под описание: \href{<my_url>}{<description>}
.
Как есть: \url{<my_url>}
Multiple defined labels
RefTeX can find duplicate labels with the function reftex-find-duplicate-labels which produce a list of all duplicate labels in the document. To use it simply do M-x reftex-find-duplicate-labels.
Конкретные места мне удобно искать при помощи \texttt{ag-project-files}.
И да, можно просто поискать в логе, где там multiple defined label.
Undefined labels
Примерно так же в логе ищется по undefined.
Сноски в заголовке
\section[Section title]{Section title\footnote{A footnote}}
или
% in the document preamble \usepackage[stable]{footmisc} ... % in the body of the document
\verb%\section{title\footnote{title ftnt}}%
Индекс
% Подключили пакет в заголовке \usepackage{makeidx} \makeindex % в тексте же: \index{key} \index{hello} \index{hello!Peter} % Иерархия. \index{hello!Sam@\textsl{Sam}} % шрифт + иерархия % \index{Sam@\textsl{Sam}} % \index{Lin@\textbf{Lin}} % \index{Jenny|textbf} % \index{Joe|textit} % \index{ecole@\'ecole} % как печатать слово % \index{Peter|see {hello}} % \index{Jen|seealso{Jenny}}
Для компиляции использовать texindy где-то между запусками \LaTeX.
Линия-разделитель
(% убрать)
% \begin{center}\rule{0.5\linewidth}{\linethickness}\end{center}
Цитаты
Про подкрашенные цитаты.
\usepackage{framed} \usepackage{color} \newenvironment{shadequote}% {\begin{snugshade}\begin{quote}} {\hfill\end{quote}\end{snugshade}} \definecolor{shadecolor}{rgb}{0.9,0.9,0.9}
Маргиналии
To insert a margin note use
\marginpar{margin text}
For one-sided layout (simplex), the text will be placed in the right margin, starting from the line where it is defined. For two-sided layout (duplex), it will be placed in the outside margin and for two-column layout it will be placed in the nearest margin.
To swap the default side, use \reversemarginpar
and margin notes will then be placed on the opposite side, which would be the inside margin for two-sided layout.
If the text of your marginpar depends on which margin it is put in (say it includes an arrow pointing at the text or refers to a direction as in "as seen to the left…"), you can use \marginpar[left text]{right text}
to specify the variants.
To insert a margin note in an area that \marginpar
can't handle, such as footnotes or equation environments, use the package marginnote.
Жаль, что при копировании каша получается из абзаца и маргиналии. Это раз. И два - маргиналии не переносятся автоматом на следующую страницу, надо следить и за этим тоже.
Класс memoir предлагает ещё
\sidebar и \sidepar
Причём sidebar, кажется, умеет несколько страниц. sidepar - короткий.
Про настройку их внешнего вида: https://tex.stackexchange.com/questions/13222/how-to-change-looks-of-margin-notes-using-memoir/
Многоточие и номер
\ldots{}
В книге многоточие занимает очень мало места и верстается очень близко к предшествующей букве. Некрасво просто печатать три точки — расстояние между ними и до букв будет неправильным.
Чтоб \No
превращалась в символ номера: \def\No{\textnumero}
Стихи
(% убрать)
%\begin{verse} %Стихи\\ %Стихи\\ %Стихи %\end{verse}
http://tex.stackexchange.com/questions/160560/package-to-typeset-poems - некоторые более развесистые примеры.
Списки
Простой
\begin{itemize} \item Пункт \itemy Пункт \end{itemize}
Нумерованный
\begin{enumerate} \item Пункт \end{enumerate}
Определений
\begin{description} \item[Определяемое] Определение \end{description}
Подсветка кода, minted
Вообще, код - то, что не должно преобразовываться - через окружение verbatim. В строке - verb и символ-ограничитель, любой, которого не будет в ограниченном фрагменте.
Дальше про minted. Он с подсветкой. При запуске latex требует –shell-escape.
\begin{minted}[fontsize=\footnotesize]{c++} ... \end{minted}
или нечто подобное, можно ввести собственное название для макросов вставки кода на заданном языке с заданными настройками. Делается это при помощи команды \newminted
:
\newminted[имя_макроса]{язык}{настройки отображения кода}
Например, указав в преамбуле документа
\newminted[mycode]{c++}{fontsize=\footnotesize}
мы сможем использовать для вставки кода новое окружение mycode
\begin{mycode} ... \end{mycode}
Заметим, что даже если вы не задаете никаких настроек, а просто хотите переопределить имя макроса, пустые скобки, обозначающие место вставки настроек, должны присутствовать
\newminted[mycode]{c++}{}
Код внутри строки текста
Чтобы вставить код прямо в строку текста, используем команду \mintinline
\mintinline{perl}{my $foo = $bar;}
Действует она подобно \verb||
Для настройки \mintinline
есть своя команда \newmintinline
, аналогичная \newminted
:
\newmintinline[имя_макроса]{язык}{настройки отображения кода}
Например, создадим новое окружение для вставки Perl-кода:
\newmintinline[perl]{perl}{}
Вот как это работает:
Текст \perl/my $foo = $bar;/
снова текст.
Узнать, какие языки поддерживает minted можно, набрав в командной строке
pygmentize -L lexers
Переносы
LATEX переносит слова, когда это необходимо. Если алгоритм переносов не находит правильных точек переноса, вы можете исправить положение, сказав TEX об исключении при помощи следующих команд.
Команда \hyphenation{список слов}
вызывает перенос слов, перечисленных в ее аргументе, только в местах, отмеченных -
. Эта команда должна даваться в преамбуле входного файла, и должна содержать только слова, состоящие из обычных букв. Регистр букв игнорируется. Следующий пример разрешает переносы в слове hyphenation
, так же, как и в слове Hyphenation
, и запрещает переносы в словах FORTRAN
, Fortran
и fortran
.
Пример: \hyphenation{FORTRAN Hy-phen-a-tion}
Команда \-
вставляет в слово выборочный перенос. Он также становится единственной разрешенной точкой переноса в этом слове. Эта команда в особенности полезна для слов, содержащих специальные символы (например, символы с акцентами), потому что LATEX не переносит такие слова автоматически.
I think this is: su\-per\-cal\-% i\-frag\-i\-lis\-tic\-ex\-pi\-% al\-i\-do\-cious I think this is: supercalifragilisticexpialidocious
Несколько слов можно удержать вместе на одной строке командой \mbox{текст}
Она будет в любом случае сохранять свой аргумент вместе.
Номер моего телефона скоро сменится. Он будет \mbox{0116 291 2319}. Параметр \mbox{\emph{имя файла}} должен содержать имя файла.
Если хочется уменьшить количество переносов в тексте в целом.
When TeX splits your text into lines it tries to do it the "least ugly" way, by assigning penalties to things that don't look nice (such as words split over two lines). The penalty for splitting a word is rather low, so you may want to increase it when writing texts where split words look bad (in particular posters and viewgraphs). This will produce lines with a little more extra spacing between words, and you should therefore increase TeX's tolerance for such lines. I have found the following values to be useful (put it in the preamble).
\hyphenpenalty=5000 \tolerance=1000
You may have to experiment a bit (adjusting \tolerance
appears to be most promising). A \hyphenpenalty
of 10000 (almost) prevents hyphenation, but produces overlong and/or ugly lines.
Про лабелы к табличкам и ссылки на них
\begin{table} stuff \caption{This is a table.}\label{mytable} \end{table} As Table~\ref{mytable} shows, the SMDB is awesome.
Линейки
\hrule
- линейки между абзацами
Горизонтальная черта: http://tex.stackexchange.com/questions/19579/horizontal-line-spanning-the-entire-document-in-latex%5C#19582
\rule{\textwidth}{1pt}
gray horizontal line: \textcolor[RGB]{220,220,220}{\rule{\linewidth}{0.2pt}}
I used the \line
command: \line(x slope, y slope){length}
.
\begin{center} \line(1,0){450} \end{center}
Псевдорисунки
LaTeX, в отличии от TeX, позволяет использовать примитивные рисунки, состоящие из прямых, наклонных линий, стрелок и окружностей.
Для псевдорисунков используем окружение {picture}:
\begin{picture}(110,50) ... \end{picture}
В скобках задаётся размер канвы — ширина, высота (напоминаю, что по умолчанию размеры измеряются в пунктах, поменять можно в преамбуле документа командой \unitlength
).
Чтобы поместить что-либо на канву, используем команду \put(x,y){<объект>}. (x,y)
— координаты объекта (началом координат считается левый нижний угол канвы!) В фигурных скобках — тот объект, который нужно нанести. Возможные объекты:
- Надпись. Любой текст, например,
\put(10,15){Пример текста}
- Линия. Пример:
\line(1,-2){20}
. Здесь 1/-2 — угловой коэффициент отрезка, 20 — длина проекции на ось абсцисс. - Стрелка. Стрелка задаётся командой
\vector
. Параметры те же, что и у линии. - Окружность. Команда:
\circle{радиус}
. - Круг. Команда:
\circle*{радиус}
. - Овал — прямоугольник с закруглёнными краями:
\oval(<ширина>,<высота>)
. - Кривые Безье. Пример:
\qbezier(22,2)(120,20)(20,77)
— в скобках координаты опорных точек.
Для повторяющихся объектов удобно пользоваться командой \multiput(x, y)(dx,dy){n}{<объект>}
. Здесь (x, y) — координаты первого объекта, (dx,dy) — приращение координат, n — количество объектов. Небольшой примерчик:
\begin{picture}(100,80) \multiput(10,70)(8,-6){8}% {\circle*{3}} \end{picture}
Кстати, знак процента нужен для переноса строки — окружение picture не допускает пустых строк, т.е. либо весь код должен идти одной строкой, либо в конце каждой ставится процент.
XY-pic
XY-pic — это пакет для создания графов и диаграмм. Графы строятся в виде матрицы, где каждый элемент матрицы соответствует вершине графа. Рёбра графа строятся с помощью специальных команд. Подключение пакета XY-pic
В преамбуле документа пишем:
\input xy \xyoption{all}
либо \usepackage[all]{xy}
.
Построение графа
Используем команду \xymatrix{ ... }
. Внутри окружения описывается матрица. Элементы матрицы в строке разделены символом «~&~». Строки разделены «~\\~». Пример:
\xymatrix{ U \ar@/_/[ddr]_y \ar@/^/[drr]^x \ar@{.>}[dr]|-{(x,y)} \\ & X \times_Z Y \ar[d]^q \ar[r]_p & X \ar[d]_f \\ & Y \ar[r]^g & Z }
Из примера видно, что стрелки строятся командой \ar
. У команды много модификаций:
В квадратных скобках можно задать направление стрелки — \ar[hop]. Варианты u, d, l, r, ur, ul, dl, dr, drr и так далее. Пример: \ar[ur] Можно задать стиль стрелки — \ar@style[hop]. Некоторые варианты: @{=>}, @{.>}, @{:>}, @{~>}, @{-->}, @{-}, @{}. Прошу не путать со смайлами)) Над стрелками (или под ними) можно размещать текст или другие объекты. «^» — метка сверху, «_» — снизу, «|» — разорвёт стрелку. Пример: $\xymatrix@1{ X\ar[r]^a_b & Y & Z\ar[l]^A_B }$ Дуги: @/^/, @/_/, @/_1pc/ и т.п.
Несколько примеров:
$\xymatrix{ {\bullet} \ar@{-}[r] & {\bullet} \ar@{.}[d] \\ {\bullet} \ar@{--}[u] & {\bullet} \ar@{->}[l] \ar@{=}[ul] }$ $\xymatrix@1{ A \ar[r]^f \ar[dr]_{f;g} & B \ar[d]^g \ar[dr]^{g;h} \\ & C \ar[r]_h & D }$ $\xymatrix{ A \ar[d]_f \ar[r]^f & B \ar[d]^g \ar[dl]|{iB} \\ B \ar[r]_g & C }$ $\xymatrix{ x \ar@(ul,dl)[]|{id} \ar@/^/[rr]|f && f(x) \ar@/^/[ll]|{f^{-1}} } $ $\xymatrix{ 1 \ar[rr] ^-{1000000x} \ar[dr]_(.2){2000x}|!{[d];[rr]}\hole && 1000000 \\ 1000 \ar[r] _{2x} \ar[urr] _>>>>{x^2} & 2000 }$
Буквица
пакет lettrine, возможности которого даже больше (особенно в плане обтекания буквицы с наклонным краем). Хитрость в том, что нужно использовать не только пакет lettrine, но и масштабируемый шрифт (например, Type 1, TrueType или OpenType). Работает и в pdfLaTEX, и в X∃LaTEX.
Пример:
\lettrine[lines=3,slope=-8pt,nindent=-2pt]{У}{}
http://s.arboreus.com/2009/01/drop-caps-in-latex.html - источник
Tikz mindmap
Перестало работать.
\iffalse \begin{tikzpicture}[mindmap,concept color=blue!80, every annotation/.style={fill=red!20}, level 1 concept/.append style={sibling angle=45, concept color=green!20,minimum size=1cm}] \node [concept] (root) {Root concept} [clockwise from=45] child { node[concept] (c1) {child}} child { node[concept] (c2) {child}} child { node[concept] (c3) {child}}; \node [extra concept] at (10,0) {extra concept}; \draw [concept connection] (c1) edge (c2) edge (c3) (c2) edge (c3); \node [annotation,right] at (root.east){The root concept is, in general, the most important concept.}; \end{tikzpicture} \fi
Расположение на листе
Цвет
цвет в latex, цельнотыренное из https://habr.com/ru/post/52166/ или https://alex.kotomanov.com/2009/02/16/graph_in_latex_3/ (ссылка была нерабочая, когда я проверяла).
Ссылки по теме
- https://www.miskatonic.org/2023/11/15/minted/ - из орг-мода в латех, подсветка блоков кода при помощи minted.
- https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D1%88%D1%80%D0%B8%D1%84%D1%82%D1%8B_%D0%9F%D0%A2 - где взять честные кириллические шрифты. Спасибо stargrave. Кстати, впечатлений от: http://blog.stargrave.org/russian/310e64361530df51f83e26951e9adb281d749a7f.
- https://tex.stackexchange.com/questions/4736/what-is-the-difference-between-fragile-and-robust-commands - малопонятное про то, где годятся свои команды, где нет, и что делать.
- https://tex.stackexchange.com/questions/1319/showcase-of-beautiful-typography-done-in-tex-friends - красивые примеры
- Рамка не по госту https://www.linux.org.ru/forum/general/11004304
- https://www.overleaf.com/ - сайтег, где можно совместно работать с латеховыми и не только документами. Как и ауторея.
- http://tex.stackexchange.com/ - вопросы и ответы про \LaTeX, Welcome to TeX.SX! - TeX - LaTeX Meta Stack Exchange http://meta.tex.stackexchange.com/questions/1436/welcome-to-tex-sx - как себя там вести.
- table of contents - How to get two tableofcontents (general and detailled)? - TeX - LaTeX Stack Exchange http://tex.stackexchange.com/questions/66796/how-to-get-two-tableofcontents-general-and-detailled
- LaTeX conditional expression - TeX - LaTeX Stack Exchange http://tex.stackexchange.com/questions/5894/latex-conditional-expression
- «input» and absolute paths - TeX - LaTeX Stack Exchange http://tex.stackexchange.com/questions/21904/input-and-absolute-paths
- Commenting out large sections - TeX - LaTeX Stack Exchange http://tex.stackexchange.com/questions/17816/commenting-out-large-sections/17818#17818
- http://tex.stackexchange.com/questions/68525/using-latex-to-keep-a-diary - интересное оформление + про класс, связанный с именем Tufte (Тафтэ) - который крут во внятном представлении инфы, если верить virens-у. http://mydebianblog.blogspot.ru/2014/06/latex.html - тож про интересное оформление, и немного про Тафтэ. https://en.wikipedia.org/wiki/Edward_Tufte)). https://edwardtufte.github.io/tufte-css/ - css в связи с тем же деятелем.
- http://www.latex-project.org/ - главный латеховый сайт
- http://alexott.net/ru/writings/emacs-tex/ - Статьи AlexOtt про \LaTeX в Emacs
- https://en.wikibooks.org/wiki/LaTeX/ - удобная книжечка
- https://ru.wikibooks.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:LaTeX
- https://www.linux.org.ru/gallery/screenshots/2345620 - \LaTeX и ноты
- http://martin-thoma.com/how-to-write-music-with-latex/ - How to write music with \LaTeX
- http://iopscience.iop.org/article/10.1088/1749-4699/8/1/014010 - интересно про PythonTex
- User Martin Scharrer - TeX - LaTeX Stack Exchange http://tex.stackexchange.com/users/2975/martin-scharrer?tab=answers - автор пакета standalone
- Диссертация и LaTeX, a может наоборот …. : TeXнические обсуждения http://dxdy.ru/topic3366.html
- http://ru-tex.livejournal.com/
- https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template - неслабо люди поработали.
- Реализация Getting Things Done в Linux с помощью LaTeX - Записки дебианщика http://mydebianblog.blogspot.ru/2011/04/getting-things-done-linux-latex.html
- Как оформить исходный код программ в LaTeX без адских страданий - Записки дебианщика http://mydebianblog.blogspot.ru/2012/12/latex.html
- http://mydebianblog.blogspot.ru/2008/12/latex.html - всё тот же блог. Начала и минимумы.
- CTAN: Topic calendar http://www.ctan.org/topic/calendar
- http://www.ibm.com/developerworks/ru/library/latex_styles_10/index.html
- https://habrahabr.ru/search/page2/?q=%5Blatex%5D&target_type=posts&flow=&order_by=relevance
- https://dxdy.ru/texnicheskie-obsuzhdeniya-f33.html
- https://www.reddit.com/r/LaTeX/
- https://gist.github.com/ptrv/4576213 - настроечный файл для ctags, чтоб тежить латех. Правда, я не уверена, что оно мне надо.