TEX for the Impatient

Обзор документации TEX по книге TEX for the Impatient

Некоторые команды

\null

Ставится после большой буквы,чтобы Tex мог понять, что точку нужно воспринимать не как после большой буквы.

Двойные кавычки

Поставить две одинарные, а чтобы разделить одинарную от двойной между ними поставить команду ’text’\thinspace"

Объявление \def

\def\xmpheader#1/#2{% Now here’s the title. 
\leftline{\xmplbx Example #1:\quad\xmplbxti #2}%
\vglue .5\baselineskip % skip an extra half line
}

Какие особенности?

при объявлении между параметрами указывается разделитель,которым будут отделяться параметры, это может быть пробел или как у меня #1/#2. Сложные данные передаются просто в группе {}.

Но определению \def я еще посвящу отдельную главу.

Управляем отступами

  • \parindent = 0pt — отступ первой строки
  • \noindent — подавить отступ
  • \parskip = 6pt — отступ между абзацев
  • \par — новый абзац
  • \smallskip — маленький разрыв абзацев
  • \medskip
  • \bigskip
  • \narrower — отступ слева и справа на ширину \parindent
  • \vskip 1pc — вертикальный отступ
  • \leftskip .5in — отступ слева
  • \rightskip .5in — отступ справа
  • \baselineskip = 7pt — межстрочный интервал
  • \raggedright — отключить выравнивание по правому краю
  • \leftline{} — строку выравнивает по левому краю
  • \rightline{}
  • \centerline{}

Определение символов

\chardef \\ = `\\ — определили \\ как backslash

\char `\^ — выводит символ по его коду

Акценты и диакритические знаки

\`
\'
\"
\^
...

через backslash ставим знак и дальше нужную букву.

Дроби

Макрос дробилка. На вход две цифири через слеш.

\def\frac#1/#2{\leavevmode 
                           \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}% 
                           \kern-.1em $/$% 
                           \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}% 
}%
`\kern` --- сдвигает символ вправо или влево
`\raise` --- сдвигает вверх
`\lower` --- сдвигает вниз
`\leavevmode` --- переключается из вертикальной моды

Определение измеряемых величин \newdimen

Нужно для правильной разметки пространства

\newdimen\descindent 
\descindent = 8pc

llap начинает печатать влево от текущей позиции курсора

rlap — делает тоже, но вправо. Позицию курсора при этом не меняет.

\llap{\hbox to \descindent{\bf Queen of Hearts\hfil}}%

замечательный прием:

  • создать hbox длиной \descindent и поместить текст, выровненный по левому краю с помощью \hfil

\hbox \vbox

У этих замечательных box-ов есть переменные:

  • to — которая задает размер
  • spread — которая задает отступ текста, это установка для \hfil и \vfil
\hbox spread 8pt{\hfil\vbox spread 8pt{\vfil 

\leaders заполняет окна символами

Для различных строк с подчеркиванием или точками, а также любые пространства для заполнения однообразным элементом

\line{\hfil\hbox to 3in{\leaders\hbox{ * }\hfil}\hfil}

Заполнит 3in звездочками и выровняет их по центру

У него есть 2 брата: \cleaders и \xleaders — которые заполняют не выравнивая элементы заполнения относительно разных строк.

\proclaim теорема

Печатает первое предложение выделенным жирным, а остальной абзац курсивом.

\footline \headline

footer и header

Таблицы

{\xmpheader 8/{A ruled table}% see p. 21 
\bigskip \offinterlineskip % So the vertical rules are connected. 
% \tablerule constructs a thin rule across the table. 
\def\tablerule{\noalign{\hrule}} 
% \tableskip creates 9pt of space between entries. 
\def\tableskip{\omit&height 9pt&&&\omit\cr} 
% & separates templates for each column. TeX substitutes 
% the text of the entries for #. We must have a strut 
% present in every row of the table; otherwise, the boxes 
% won’t butt together properly, and the rules won’t join.
\halign{\tabskip = .7em plus 1em % glue between columns 
% Use \vtop for whole paragraphs in the first column. 
% Typeset the lines ragged right, without hyphenation. 
  \vtop{\hsize=6pc\pretolerance = 10000\hbadness = 10000        
       \normalbaselines\noindent\it#\strut}% 
  &\vrule #&#\hfil &\vrule #% the rules and middle column 
% Use \vtop for whole paragraphs in the last column. 
  &\vtop{\hsize=11pc \parindent=0pt \normalbaselineskip=12pt 
       \normalbaselines \rightskip=3pt plus2em #}\cr
  • \offinterlineskip — не дает масштабироваться вертикальным отступам в таблице
  • \def\tablerule{\noalign{\hrule}} — для правильного отображения горизонтальных линий
  • \def\tableskip{\omit&height 9pt&&&\omit\cr} — расстояние между строками в таблице
  • \halign — определяет параметры колонок таблицы
  • \vtop — выравнивает вертикальный бокс по верху
  • \pretolerance = 10000\hbadness = 10000 — не показывает ошибки
  • \vrule — рисует вертикальные линии
  • \omit — отменяет действие шаблона в ячейке или строке и заменяет его обычным #
  • \vtop{\hsize=11pc \parindent=0pt \normalbaselineskip=12pt \normalbaselines \rightskip=3pt plus2em #}\cr — чтобы задать в ячейке многострочный текст, а ячейку размером 11pc

Формулы математика

Очень большой раздел и пока им не интересуюсь

  • eqno — выведет номер формулы справа
  • leqno — выведет номер формулы слева

Концепция TEX

Активный символ \active

Это символ, которому будет назначено действие в TEX

  1. Символ нужно определить в \catcode назначить ему категорию 13 (\active)
  2. Определить действия через \def \let \chardef

Если символ не будет \active до определения, назначить ему команду не удастся

Например: \catcode ‘~ = \active \def~{\penalty10000\ }

alignment — выравнивание

Выравнивание TAB

  • \settabs
  • \+
  • &
  • \cr
{\hsize = 1.7 in \settabs 2 \columns 
\+cattle&herd\cr 
\+fish&school\cr 
\+lions&pride\cr}

Выравнивание \haling

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

\halign{\hfil#\hfil &\hfil#\hfil &\hfil#\hfil \cr

  • \tabskip =2pc — клей между колонками
  • \noalign — вертикально выровнять строки
  • \strut — увеличивает отступ между строк
  • \valign — вертикальное выравнивание (это таблица на боку)
{\hsize=0.6in \parindent=0pt 
\valign{#\strut&#\strut&#\strut\cr 
one&two&three\cr 
four&five&six\cr 
seven&eight&nine\cr 
ten&eleven\cr}}

Анатомия TEX

Текс расширяет макросы слева направо, но команда \expandafter может изменить порядокраскрытия макросов

Блоки в TEX

boxes

  • reference point
  • height
  • width
  • depth
  • baseline

Коды категорий символов

Code Назначение
0 \
1 {
2 }
3 $
4 &
5 ^^M=
6 #
7 ^ и ^^K
8 _ и ^^A
9 ^^@ (ignored)
10 пробел ^^I
11 a..z A..Z
12 другие символы
13 ~ и ^^L активный
14 %
15 ^^? ошибка

Символы

Категория 11 и 12

команда (напечатать символ) \char `h тоже самое, что \char104 напечатает h

Классы символов

Используется в математической моде и влияет на выделение места для каждого символа

Команды TEX

Все, что должен выполнить TEX:

  • активный символ
  • последовательность управляющих символов
  • сам символ

Сравнение

\ifα〈true text〉\else〈false text〉\fi или \ifα〈true text〉\fi

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

Управляющая последовательность

Обычно начинаетяс с \ и имя последовательности, определенное в \def

Заканчивается, когда TEX видит небукву. Или когда заканчивается управляющий символ.

Управляющий символ

состоит из \ и символа

Разделители — delimeters

обычно скобки в математической моде

dimention

код значение
pt point (72.27 points = 1 inch)
pc pica (1 pica = 12 points)
bp big point (72 big points = 1 inch)
in inch
cm centimeter (2.54 centimeters = 1 inch)
mm millimeter (10 millimeters = 1 centimeter)
dd didˆot point (1157 didˆot points = 1238 points)
cc cicero (1 cicero = 12 didoˆt points)
sp scaled point (65536 scaled points = 1 point)
em ширина M
ex высота x

бесконечность: fil, fill, filll

Множитель перед размерами f/1000

\kern 8 true pt — сделает неизменным размер при масштабировании

Шрифты

\font\имя=шрифт в системе

\font\twelvebf=cmbx12

Глобальное определение \globaldefs

распространяется на весь документ

или сокращенный вариант: \gdef или \xdef вместо \global\def и \global\edef

Клей \hskip

есть вертикальный и горизонтальный

\hskip 6pt plus 2pt minus 3pt — клей может растягиваться и сжиматься

у клея есть свойства stretch — plus и shrink — minus

Межстрочный клей

определяет расстояние между строк и определяется параметрами: \baselineskip, \lineskip, \lineskiplimit

item

текст с отступом

выравнивание

\leftskip, \rightskip, \raggedright — установит размеры горизонтального бокса

kern

смещает символы горизонтально

leaders

заполнит пространство символами (нужно для оглавления)

Метка MARK

\topmark, \firstmark, \botmark размещаются на странице и используются командой \mark

\def\section#1{\medskip{\bf#1}\smallskip\mark{#1}} % #1 is the name of the section

Определение section устанавливает метку с именем секции

Числа

  • 52 — десятичное число
  • ‘14 — восьмеричное число
  • “FF — шестнадцатиричное число
  • `с или `\с — ASCII последовательность, но лучше второй вариант, хотя они идентичны. Со вторым вариантом можно использовать `\\, `\%, `\^^M

Но нежелательно при использовании команды \edef и \write

78 +078 "4E '116 `N `\N — это один и тот же код

число печатается командой \number78 или \romannumeral78 — получим 78lxxviii

box255

в этот box помещается готовая страница

готовый box255 отправляется командой \shipout в файл .dvi

Разрыв страницы

В Tex разрывом страницы управляет штраф:

\penalty 10000 = \nobreak

\penalty -10000 = \break

Размер страницы

  • \voffset — отступ сверху
  • \hoffset — отступ слева
  • hsize — ширина текста
  • vsize — высота текста

Регистры

тип контент
box a box
count a number
dimen a dimension
muskip muglue
skip glue
toks a token list

Все регистры имеют нумерацию от 0 до 255

Вызов регистра \box0 или \box100, \skip0 или \skip20

setbox3 = \hbox{text} — присвоит значение регистру box3

count255 = -1 — присвоит -1

для резервирования регистров используются команды:

  • \newbox,
  • \newcount,
  • \newdimen,
  • \newmuskip,
  • \newskip,
  • \newtoks

Просмотреть содержимое регистра можно с помощью команды \showthe\dimen0

\whatsit

действия для TeX когда, что-то пошло не так

  • команды \openout, \closeout, \write — откладывает запись в выходной файл до следующей команды
  • \special — вставить текс в выходной файл
  • при смене языка поместит информацию