tgoop.com/cxx95/116
Last Update:
#opensource
Обзор на TeX
Ist doch so gut gewürzt und so schön flambiert
Так хорошо приправлено и красиво обжарено
Und so liebevoll auf Porzellan serviert
И с любовью подано на фарфоре
Dazu ein guter Wein und zarter Kerzenschein
Под хорошее вино и нежный свет свечей
Ja, da lass ich mir Zeit, etwas Kultur muss sein
Да, я не тороплюсь, капля культуры должна быть!
В опенсорсе самым 𝓪𝓮𝓼𝓽𝓱𝓮𝓽𝓲𝓬𝓪𝓵 проектом является скорее всего TeX от Дональда Кнута. Это система для создания красивых документов, особенно для научных работ и технических книг
Про него есть много информации, но почти вся поверхностная. Стало интересно, что там внутри.
Можно смотреть "снизу вверх":
Векторные изображения переводятся в пиксельные на мониторе с приколами наподобии хинтинга и ClearType.
Многие стандартные шрифты имеют разное начертание для разных размеров, чтобы выглядело красивее. То есть буквы в 10м кегле (10pt) это не то же самое, что увеличенные в два раза буквы из 5pt
Есть шрифты, где записаны математические значки или другие символы в векторном виде, например знак ⚠️, это удобнее чем вставлять картинки.
Это обширная тема, в линуксе даже есть мемчик "шрифты говно" set_char_a
как бы "печатает" в текущем месте один символ a
и сдвигает курсор вправо на ширину символа a
.
Этот файл не содержит в себе шрифтов, а только "ссылается" на них, и знает из шрифта высоту/длину/глубину символов. На картинки он тоже только ссылается, и дефолтные DVI-просмотрщики не показывают их.
Смысл этого формата - получать один и тот же документ на любом компьютере
Самая подробная информация есть в книге от автора The TeXbook в 400+ страниц, можно пропускать слишком подробные куски
В других книгах как обычно выкинут 80% информации и еще неправильно переведут (например, "инкапсуляцию" как "защиту").
У ванильного TeX примерно 900 команд, но только ~300 команд являются базовыми. Например, команда \TeX
для вывода лого TeX является макросом для такой последовательности:
T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emXТо есть печатается символ
T
, потом печатается E
со сдвигом от изначального места немного вниз и влево, потом печатается X
со сдвигом влево В The TeXbook описано, как текст из .tex-файла переводится в токены, какие есть категории токенов (глава 8)
В отличие от WYSIWYG-редакторов, TeX работает на уровне абзаца, а не строки, и распределяет слова по отдельным строкам так, чтобы минимизировать метрику badness.
В TeX есть понятие "клей" (glue) - это объект-отступ между разными сущностями TeX
!
/знака ?
соответственно в 3 раза больше."Клей" может быть бесконечно растяжимым/сжимаемым, например команда
\centerline
это макрос\line {\hss #1\hss }Команда hss ставит бесконечный "клей", и TeX располагает параметр макроса (то есть
#1
) ровно в центр строки.Есть огромная куча костылей, чтобы менять любое правило.
Например, чтобы написать в документе
Mr. Evil
с отступом как между соседними словами (а не с х3 отступом как для нового предложения) надо писать Mr.\ Evil
.Чтобы было нельзя перенести
Evil
на следующую строку без Mr.
, надо писать Mr.~Evil
(~
это тот же пробел).Можно поставить одинаковый glue stretching (после слов, запятых и точек) командой
\frenchspacing
.Можно сформировать длины строк в форме полукруга (в The TeXbook есть примеры) командой
\parshape
, и так далее...ПРОДОЛЖЕНИЕ В КОММЕНТАРИИ