TEX
Categories:
Введение
% 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
Первый шаг Создать файл.
Я это делаю в своем любимом 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{}
header и footer
определяется командами
\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 — полезно для оглавления