TEX

Документация TEX, в объеме,которуюя использую для своих задач

Введение

% A small font and close interline spacing make this work
\smallskip\font\sixrm=cmr6 \sixrm \baselineskip=7pt
\dimen0=\fontdimen3\font \dimen2=\fontdimen4\font
\fontdimen3\font=1.8pt \fontdimen4\font=.9pt
\noindent \hfuzz=.1pt
\parshape 30 0pt 120pt 1pt 118pt 2pt 116pt 4pt 112pt 6pt
108pt 9pt 102pt 12pt 96pt 15pt 90pt 19pt 84pt 23pt 77pt
27pt 68pt 30.5pt 60pt 35pt 52pt 39pt 45pt 43pt 36pt 48pt
27pt 51.5pt 21pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt
16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt 53pt 16.75pt
53pt 14.6pt 48pt 24pt 45pt 30.67pt 36.5pt 51pt 23pt 76.3pt
The wines of France and California may be the best known,
but they are not the only fine wines. Spanish wines are
often underestimated, and quite old ones may be available at
reasonable prices. For Spanish wines the vintage is not so
critical, but the climate of the Bordeaux region varies
greatly from year to year. Some vintages are not as good as
others, so these years ought to be s\kern -.1pt p\kern -.1pt
e\kern -.1pt c\hfil ially n\kern .1pt o\kern .1pt
t\kern .1pt e\kern .1pt d\hfil: 1962, 1964, 1966. 1958,
1959, 1960, 1961, 1964, 1966 are also good California
vintages. Good luck finding them!
\fontdimen3\font=\dimen0 \fontdimen4\font=\dimen2

wine

Первый шаг Создать файл.

Я это делаю в своем любимом Emacs

Here is my first \TeX\ sentence. 
\bye

и сохранил с именем test.tex

Второй шаг выполнить tex

tex test.tex

Получилось два файла на выходе: test.dvi и test.log

В test.log

This is TeX, Version 3.141592653 (TeX Live 2024) (preloaded format=tex 2024.10.2)  5 JAN 2025 20:03
**test.tex
(./test.tex [1] )
Output written on test.dvi (1 page, 292 bytes).

А файл dvi вполне себе просматривается emacs, в том виде, как и должно быть.

Специальные символы в Tex

символназначениекак вывести в tex
\спец символ и инструкции$\backslash$
{открывает группу${$
}закрывает группу$}$
%комментарии%
&разграничение колонок в таблице&
~неразрываемый пробел~{}
$начало и окончание математической моды$
^надстрочник^{}
_подстрочник_{}
#определение заменяемого символа#

Набор текста с акцентом

Акцент — это надстрочники и подстрочники над и под буквами

Акцент за которым следует буква

наименованиеTex inputTex outputCompose
grave\`oòcmp+` o
acute\’oócmp+’ o
circumflex\^oôcmp+^ o
umlaut/dieresis/tr ́emat\“oöcmp+” o
tilde\~oõcmp+~ o
macron\=oőcmp+= o
dot\.oȯcmp+. o

Продолжение для символов требующих пробела

наименованиеTex inputTex outputCompose
cedilla\c oǫcmp+, o
underdot\d ocmp+! o
underbar\b oo᤻o C-x 8 RET 193b
h ́acˇek\v oǒcmp+v o
breve\u oŏcmp+u o
tie\t ooo͡oo C-x 8 RET 0361 o
Hungarian umlaut\H oőcmp+= o
ơcmp++ o
°cmp+o o
§cmp+s o
øcmp+? o

По этой ссылке весь unicode а в Emacs C-x 8 RET в помощь. ⤖ https://www.compart.com/en/unicode/

Но и это еще не всё!

Это нужно при оформлении HTML документации просто пишем имя через &Rarrtl и получаем результат.

Можно создать собственную комбинацию клавиш

Создайте пустой ~/.XCompose и включите в него содержимое стандартного файла, используя директиву include “%L”, например:

# ~/.XCompose
include "%L"

<Multi_key> <g> <a> : "α"
<Multi_key> <g> <b> : "β"
<Multi_key> <g> <g> : "γ"

Определение шрифта

В Tex по умолчанию доступны 16 шрифтов

Наименованиекоманда
Roman\rm
Boldface\bf
Italic\it
Slanted\sl
Typewriter\tt
Math symbol5\cal

Масштабирование шрифта

используем команду \magstep 0...5 или \magstephalf

\font\bigrm = cmr10 scaled \magstep 5 %объявим свой шрифт crm10 и смасштабируем 5 magstep
\font\bigbigrm = cmr14 scaled \magstep 3

Имена стандартных шрифтов TEX

CMBSY10CMBXSL10CMBXTI10CMBX10CMBX12CMBX5
CMBX6CMBX7CMBX8CMBX9CMB10CMCSC10
CMDUNH10CMEX10CMFF10CMFIB8CMFI10CMITT10
CMMIB10CMMI10CMMI12CMMI5CMMI6CMMI7
CMMI8CMMI9CMR10CMR12CMR17CMR5
CMR6CMR7CMR8CMR9CMSLTT10CMSL10
CMSL12CMSL8CMSL9CMSSBX10CMSSDC10CMSSI10
CMSSI12CMSSI17CMSSI8CMSSI9CMSSQI8CMSSQ8
CMSS10CMSS12CMSS17CMSS8CMSS9CMSY10
CMSY5CMSY6CMSY7CMSY8CMSY9CMTCSC10
CMTEX10CMTEX8CMTEX9CMTI10CMTI12CMTI7
CMTI8CMTI9CMTT10CMTT12CMTT8CMTT9
CMU10CMVTT10
  • CM — Computer Modern
  • B — Bold
  • R — roman
  • I — italic
  • CSC — small caps
  • SL — наклонный
  • SS — sans serif
  • SY — symbols
  • TT — моноширинный

Форма выводимого текста

Tex понимает различные единицы измерения:

  • in
  • cm
  • pt
  • pc

и другие

  • ex — высота маленькой x
  • em — ширина большой M

Форма страницы

Три части:

  • header
  • body
  • footer
наименованиекомандазначение
ширина\hsize6.5in
высота\vsize8.9in
горизонтальный отступ\hoffset0
вертикальный отступ\voffset0

\vfill \eject — оборвет страницу и начнет новую

\hsize = 4in — определяет горизонтальный размер текста в текущем абзаце

0.75\hsize установит размер \hsize 0.75 от последнего значения

\vsize — задает вертикальный размер страницы

\hoffset \voffset — задают смещение текста относительно левого верхнего угла страницы. По умолчанию они равны 1in.

Для \hoffset и \voffset нет пределов страницы. Спокойно выведет текст за его пределами

\magnification = \magstep 3

Ставится в самом начале документа до начала первого символа и увеличивает весь документ, вместе с \hsize и \vsize

чтобы сохранить неизменными \hsize и \vsize используем true

\hsize = 5 true in

Форма параграфа

На размер абзаца влияет \hsize

Tex всегда читает весь абзац целиком и применяет последние настройки.

функциякомандазначение
ширина\hsize6.5in
отступ первой линии\parindent20pt
расстояние между линиями\baselineskip12pt
расстояние между абзацами\parskip0pt

команда \noindent убирает первый отступ линии, тоже,что и \parindent= 0pt

\rightskip \leftskip

это команды margin отступов слева и справа от обзаца

\narrower — изменяет оба значения сразу значением равным \parindent

\hangindent=2.5 in \hangafter=2

первую строку заполняет полностью на всю ширину, а следующую с отступом. Если положительное, то слева, если отрицательное, то справа.

\hangafter указывает после какой строки начинать отступ.

По умолчанию равно 1. Если поставлю 0, то отступ начнется с первой строки. Если отрицательное, то первые строки будут с отступом, а следующие на полную ширину.

еще есть команда \hang — которая сделает отступ абзаца на длину \parindent

\parshape

Создает абзацы любой формы

\item

Начинает абзац с отступом \parindent и вначале указывает значение, которое в {}

Команда \itemitem сделает двойной отступ

\parskip = 0pt \parindent = 30 pt \noindent 
Answer all the following questions: 
\item{(1)} What is question 1? 
\item{(2)} What is question 2? 
\item{(3)} What is question 3? 
\itemitem{(3a)} What is question 3a? 
\itemitem{(3b)} What is question 3b?

\parskip

расстояние между параграфами

и его друг \vskip 1 in — задают интервал между абзацами (у него нет знака равно)

\vglue 1 in — вставляет 1 in куда угодно, даже в начале страницы.

\topinsert \vskip -2 in \centerline{Figure 1} \endinsert

Эта команда поставит на текущей странице все, что находится между командами \topinsert и \endinsert

Я умышленно поставил \vskip -2 in и весь текстстраницы улетел вверх.

\smallskip, \medskip, \bigskip

Для смещений между абзацами. Действует только на текущий абзац.

Форма строки

\hfill \break — разорвет строку

\hfill — заполнит пространство

\line{} — выведет строку

\liftline{} \rightline{} \centerline{} выравнивает строку

\hfil — заполняет пространство для выравнивания

\raggedrigth — обрыв правого выравнивания

\hskip 1 in — горизонтальный отступ

Сноски

\footnote{}{}

в первой части {} могут быть знаки \dag, \ddag, \S, \P или номер ссылки в формате Tex {${}^{21}$} но сейчас работает {$^{21}$}

в Latex немного измененный формат \footnote{}

определяется командами

\headline{} — header

\footline{} — footer

аналогично как при заполнении \line{}

\headline={\hfil \tenrm Page \the\pageno}

\tenrm — это шрифт roman 10pt

\the\pageno — номер страницы

\folio — тоже номер страницы, но выводит римские буквы когда \pageno отрицательный

\pageno=-1 может быть любого значения

Четные и нечетные заголовки

\headline={\ifodd \pageno {...}\else {...}\fi}

Переполнение или недобор в боксах

При переполнении или недоборе в строках появляется slug — слизень █ который показывает проблему в этой строке.

vbox hbox

Так Tex делит на блоки всю страницу и заполняет ее

vbox — вертикальные блоки абзацев

hbox — горизонтальные блоки строк

\hbadness

Это параметр плохости строки — по умолчанию 1000

Накапливается от количества пробелов, вставленных в строку для ее выравнивания.

Увеличения параметра до 10000 подавляет все сообщения о плохости блока.

\tolerance

Это параметр устанавливает на сколько строка может превышать допустимый размер

По умолчанию = 200. 10000 также стирает все предупреждения.

\hfuzz

Параметр, который определяет, на сколько может выступать переполнение строки \hfuzz = 0.1 pt

\overfullrule

это толщина слизняка slug, появляющегося на полях.

Если установить его 0pt то маркеры будут незаметны

\hyphenation{data-base}

установка переносов для лучшего форматирования боксов

\vbadness

параметры для вертикального наполнения текста на странице

Группы

При наборе текст можно упаковать в группы {}

При выходе из группы, все настройки возвращаются к тем, которые были до входа в группу.

{  \hsize = 4 in \parindent = 0 pt \leftskip = 1 in will produce a paragraph that is four  ...  (this is an easy mistake to make). \par }

Математичесский режим

Третий режим Tex математический. Задается $…$ в строке и $$…$$ для многострочного блока.

Теоремы — это тоже почти математика.

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

\proclaim Theorem 1 (H.~G.~Wells). In the country of the blind, the one-eyed man is king.

Матрицы

Это мне всегда больше нравилось.

$$\pmatrix{ 
a & b & c & d \cr 
b & a & c+d & c-d \cr 
0 & 0 & a+b & a-b \cr 
0 & 0 & ab & cd \cr 
}.$$

создаст матрицу с круглыми скобками

\hfill — выравнивают значения в матрице

\matrix

удаляет разделители круглые скобки и их можно задать явно с помощью команд: \left и \right

$$ \left | 
\matrix{ 
a & b & c & d \cr 
b & a & c+d & c-d \cr 
0 & 0 & a+b & a-b \cr 
0 & 0 & ab & cd \cr 
}  
\right | $$

типы скобок: (){}[]||

еще можно значения замещать многоточием: \cdots, \vdots, \ddots

Выравнивание по знаку =

$$\eqalign{ 
a+b &= c+d \cr 
x &= w + y + z \cr 
m + n + o + p &= q \cr 
}$$

Можно нумеровать уравнения тоже через знак &

$$\eqalignno{ 
a+b &= c+d & (1) \cr 
x &= w + y + z \cr 
m + n + o + p &= q & * \cr 
}$$

Таблицы и tabbing

\settabs — команда создать tabbing

\settabs 4 \columns %установить 4 равных столбца
\+ British Columbia & Alberta & Saskatchewan & Manitoba \cr 
\+ Ontario & Quebec & New Brunswick & Nova Scotia \cr 
\+ & Prince Edward Island & Newfoundland \cr

+ — начало строки

\cr — завершение строки

\hfil, \hfill выравнивают текст в ячейках

\settabs \+ \hskip 1 in & \hskip 2 in & \hskip 1.5 in & \cr — это более жизненный пример таблицы с установленными значениями ширины столбцов

или так: \settabs \+ ---------- & ------------------ & ----------------------- & \cr

черточки не выводятся, так же как и любой текст

\hrule — начертит линию под строкой

+\strut — сделает отступ вокруг строки

$$\vbox{
\settabs \+ ----------------&-----&----\cr
\+Plums&\hfill \$1&.22\hfill \cr 
\+Coffee&\hfill 1&.78\hfill \cr 
\+Granola&\hfill 1&.98\hfill \cr 
\+Mushrooms&\hfill &.63\hfill \cr 
\+Kiwi fruit&\hfill&  .39\hfill \cr 
\+Orange juice&\hfill 1&.09\hfill \cr 
\+Tuna&\hfill 1&.29\hfill \cr 
\+Zucchini&\hfill 0&.64\hfill \cr 
\+Grapes&\hfill 1&.69\hfill \cr 
\+Smoked beef&\hfill &.75\hfill \cr 
\+Broccoli&\hfill\underbar{\ \ 1}&\underbar{.09}\hfill \cr
\+Total&\hfill \$12&.55\hfill \cr
}$$

Горизонтальное выравнивание и шаблон \halign

\halign{шаблон} \cr

\halign{\hskip 2 in $#$& \hfil \quad # \hfil & \qquad $#$ & \hfil \quad # \hfil \cr

вместо # будет подставлено значение из строки

\halign{\hskip 2 in $#$& \hfil \quad # \hfil & \qquad $#$ & \hfil \quad # \hfil \cr \alpha & alpha & \beta & beta \cr 
\gamma & gamma & \delta & delta \cr 
\epsilon & epsilon & \zeta & zeta \cr 
}

\hrule — горизонтальная линия

\vrule — вертикальная линия

\offinterlineskip — позволяет зафиксировать раздвижение строк в таблице

\moveright 2 in 
\vbox{\offinterlineskip 
\halign{\strut \vrule \quad $#$\quad &\vrule \hfil \quad #\quad \hfil &\vrule \quad $#$\quad &\vrule \hfil \quad #\quad \hfil \vrule \cr 
\noalign{\hrule}
\alpha & alpha & \beta & beta \cr 
\noalign{\hrule} \gamma & gamma & \delta & delta \cr 
\noalign{\hrule} \epsilon & epsilon & \zeta & zeta \cr 
\noalign{\hrule} 
}}

финальный вариант. \moveright сдвинет box на два In вправо

но для этого также исправно работают \centrline, а также \rightline и \leftline

Создание своих макросов

\def\name{}

name — только буквы или одна не буква

Задать переменные #1

\def\name#1#2{#1...#2}

Задать синоним команде \let

\let \newname = \oldname

работать будут оба имени

Протокол ошибок Tex

обязательно в конце ввода поставить \bye

! Undefined control sequence. %название ошибки
l.1 \line{ The left side \hfli %успешно прочитанная строка
	the right side} % продолжение строки после ошибки
? %что делать?

варианты ответа:

Ответбукварезультат
helphпричина указана на терминале
insertiпоказать следующую строку
exitxзавершить tex
scrollsпрокрутить ошибки
runrпродолжить работу
quietqподавляет вывод в терминал
carry onпродолжить лучше как можно

Большие файлы

\input filename

добавит маленькие файлы в большой

Линии rule

\hrule \vrule — имеют параметры width height depth

\vrule height 0 pt depth 0.4 pt width 3 in

Boxes

\vbox и \hbox — основные кирпичи в tex.

Вкладывая их друг в друга можно получить любой результат.

Задать размер \hbox to 5cm{}

у \vbox есть брат \vtop — будет выравнивать по верхнему краю boxes

\vbox{ \hrule 
\hbox{\vrule{} The text to be boxed \vrule} 
\hrule }

А это будет текст в рамочке, а с ключевым слово \strut — оно будет с отступами

Перемещение box по странице

\moveright \moveleft — переместит вертикальный бокс

\raise \lower — переместит горизонтальный бокс

Линии в боксе

\hbox to 5 in{Getting Started\hrulefill 1} и еще есть \dotfill — полезно для оглавления