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 input Tex output Compose
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 input Tex output Compose
cedilla \c o ǫ cmp+, o
underdot \d o cmp+! o
underbar \b o o᤻ o C-x 8 RET 193b
h ́acˇek \v o ǒ cmp+v o
breve \u o ŏ cmp+u o
tie \t oo o͡o o 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

CMBSY10 CMBXSL10 CMBXTI10 CMBX10 CMBX12 CMBX5
CMBX6 CMBX7 CMBX8 CMBX9 CMB10 CMCSC10
CMDUNH10 CMEX10 CMFF10 CMFIB8 CMFI10 CMITT10
CMMIB10 CMMI10 CMMI12 CMMI5 CMMI6 CMMI7
CMMI8 CMMI9 CMR10 CMR12 CMR17 CMR5
CMR6 CMR7 CMR8 CMR9 CMSLTT10 CMSL10
CMSL12 CMSL8 CMSL9 CMSSBX10 CMSSDC10 CMSSI10
CMSSI12 CMSSI17 CMSSI8 CMSSI9 CMSSQI8 CMSSQ8
CMSS10 CMSS12 CMSS17 CMSS8 CMSS9 CMSY10
CMSY5 CMSY6 CMSY7 CMSY8 CMSY9 CMTCSC10
CMTEX10 CMTEX8 CMTEX9 CMTI10 CMTI12 CMTI7
CMTI8 CMTI9 CMTT10 CMTT12 CMTT8 CMTT9
CMU10 CMVTT10
  • 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
наименование команда значение
ширина \hsize 6.5in
высота \vsize 8.9in
горизонтальный отступ \hoffset 0
вертикальный отступ \voffset 0

\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 всегда читает весь абзац целиком и применяет последние настройки.

функция команда значение
ширина \hsize 6.5in
отступ первой линии \parindent 20pt
расстояние между линиями \baselineskip 12pt
расстояние между абзацами \parskip 0pt

команда \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} % продолжение строки после ошибки
? %что делать?

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

Ответ буква результат
help h причина указана на терминале
insert i показать следующую строку
exit x завершить tex
scroll s прокрутить ошибки
run r продолжить работу
quiet q подавляет вывод в терминал
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 — полезно для оглавления