Существуют ли ситуации, когда для написания документа предпочтительнее использовать TeX (или, возможно, простой TeX), а не LaTeX?
решение1
TeX полезен, когда вы хотите полностью понять, что происходит, или хотите иметь полный контроль. В принципе, это возможно и с LaTeX, но нужно понимать гораздо больше. (То есть, LaTeX — этолегкийно нетпростой, в то время как обычный TeX прост, но не легок.Сопутствующий доклад о проектировании программного обеспечения.)
TeX — это инструмент для набора текста; LaTeX — это система подготовки документов. По моему мнению, TeX полезен, когда вы хотите выступить в роли печатника/наборщика; LaTeX полезен, когда вы хотите выступить в роли автора.
Поясним второй пункт: когда-то книги изготавливались следующим образом:
Theавторписали свою рукопись (содержание книги) либо от руки (ручкой или карандашом на бумаге), либо на пишущей машинке, или чем-то подобным, а затем (после редактирования и корректуры и т. д.) отправляли ее в типографию (какому-то человеку).
Theпринтер(человек, а не машина!) должен был взять этот контент и превратить его в страницы: подобрать куски металлического шрифта (для каждой буквы), разбить их на строки одинаковой длины, добавить пробелы здесь и там и т. д. (Дословно, наборщик).
TeX изначально был написан для помощи в последней работе (у Кнута уже была большая часть контента; он только выпускал второе издание своей книги (TAOCP Vol 2)); позже Лесли Лэмпорт понял, что это слишком низкоуровнево для авторов, и придумал LaTeX. Поэтому трудно рекомендовать писать книгу с нуля на простом TeX; вы, вероятно, в конечном итоге получите свои собственные сложные макросы, такие же, как LaTeX. Но если у вас уже есть контент в другом формате и вы просто хотите решить проблему, очень специфичную для страниц определенного известного размера, возможно, это будет проще сделать с помощью простого TeX (используя как можно меньше макросов), чем с помощью LaTeX.
Приведем несколько тривиальный пример первого пункта: рассмотрим команды изменения шрифта. Plain TeX дает способ сказать «начать использовать следующий шрифт», что-то конкретное, например «Computer Modern italic в 9pt». Конечно, вы, вероятно, захотите переключиться обратно на прямой шрифт в конце, поэтому вам нужно быть осторожным, чтобы заключить эту команду в группу. Но не только это: вы, вероятно, используете курсив для выделения, и если внутри чего-то, что выделено, вы хотите подчеркнуть еще больше, то соглашение заключается в том, чтобы переключиться обратно на прямой шрифт. Кроме того, если вы хотите подчеркнуть что-то внутри жирного, вы должны переключиться не на обычный курсив, а на полужирный курсив. Аналогично, если ваш шрифт больше, то вы должны переключиться на более крупный курсивный шрифт. Все эти вещи LaTeX по умолчанию \emph
делает автоматически. Обычно это то, что вам нужно, если вы пишете документ. Но если по какой-то причине вы хотите явно контролировать, какой шрифт и где используется, то вы можете не знать, как это сделать с помощью LaTeX, а когда вы это поймете, то будете использовать что-то настолько далекое от типичного LaTeX, что это будет ближе к простому TeX.
Вот еще один пример, благодаря Бруно Ле Флокуunravel
пакет. Сравните, что происходит внутри при запуске LaTeX \newcommand
и обычного TeX \def
:
\documentclass{article}
\usepackage{unravel}
\begin{document}
\unravel{\newcommand*{\foo}[1]{bar(#1)}} % The LaTeX way
\unravel{\def\foo#1{bar(#1)}} % The plain-TeX way
\foo{3}
\end{document}
Как напечатано unravel
, первый занимает 126 шагов, а последний — 2 шага. Этот пример иллюстрирует довольно много других точек различия между LaTeX и простым TeX:
- Обычный способ TeX по-прежнему технически доступен в LaTeX, просто не рекомендуется.
- Простая разметка TeX часто может быть короче (за счет меньшего объема работы: см. следующий пункт).
- Метод LaTeX, вероятно, является тем, что нужно большинству авторов, поскольку он основан на опыте и обеспечивает дополнительную защиту (в данном случае от слишком распространенной возможности случайного переопределения существующей команды).
- Тем не менее, в целом, очень немногие люди, использующие LaTeX, знают обо всем, что
\newcommand
происходит за кулисами, поэтому это менее способствует точному пониманию происходящего.
В качестве еще одного примера (обещаю, последнего) сравните стандартный способ LaTeX для получения маркированного списка:
\documentclass{article}
\begin{document}
Some text.
\begin{itemize}
\item first
\item second
\end{itemize}
More text.
\end{document}
как это делает Кнут texbook.tex
(соответствует странице 10):
% TeXbook uses "\input manmac"; for this example just need the following from it.
\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
% These 3 are already in plain.tex, reproduced here as they may be less familiar.
\def\hang{\hangindent\parindent}
\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
\def\item{\par\hang\textindent}
Some text.
\nobreak\medskip
\item\bull first
\smallskip
\item\bull second
\medbreak\noindent
More text.
\bye
Если вы окружите "Some text... More text" \tracingmacros=1
и \tracingmacros=0
, то получите примерно в 25 раз больше строк в случае LaTeX. Что еще важнее, способ LaTeX, вероятно, ближе к сознанию автора, а способ TeX ясно показывает весь набор текста, который происходит.
решение2
На этот вопрос нет ответа, на самом деле он соответствует стандартной «основанной на мнении» причине. Но я все равно попытаюсь ответить.
TeX — это язык макрорасширения, и
LaTeX определяется как набор макросов, поэтому все, что вы пишете в LaTeX, в конечном итоге расширяется до некоторой последовательности примитивов TeX.
Напротив, TeX позволяет определять макросы, поэтому, начиная только с примитивов (initex) или с простого TeX, вы можете определять макросы, эквивалентные LaTeX.
Так что на каком-то уровне возможности идентичны. Для подавляющего большинства людей большую часть времени лучше всего использовать LaTeX, поскольку, какими бы ни были технические плюсы и минусы, LateX, по сути, формирует язык общения, который имеет смысл, отдельный от его реализации в наборщике TeX, и написание на общем языке с общим пониманием имеет свои применения. Если вы пишете собственные макросы TeX, даже если они набирают эквивалентные документы, эти документы будет сложнее понять другим людям и другим системам.
Помимо аспектов общего языка, макросы LaTeX не всегда являются реализацией, которую вы бы выбрали сейчас (они были разработаны для гораздо меньших машин), но они использовались миллионами пользователей в течение десятилетий, и есть вероятность, что большинство более серьезных ошибок либо исправлены, либо имеют известные обходные пути. Если вы «напишете свои собственные» макросы документов, хотя теоретически возможно, что они могут быть такими же надежными, это маловероятно, миллионы человеко-часов времени тестирования трудно превзойти.
Поскольку я уже более 25 лет вхожу в команду, поддерживающую LaTeX, это, возможно, не самое объективное и нейтральное сравнение, которое можно было бы получить, но все же...
Поскольку сейчас декабрь, то, вероятно, самое время отметить, что я иногда использую простой текст. Например, этот простой текст, который я написал некоторое время назад, использовался на протяжении многих лет.
\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye
решение3
Несколько лет назад я приложил усилия к изучению простого TeX. Я сделал это потому, что:
- Я считаю вывод LaTeX уродливым
- Я изучал ConTeXt, и в его документации часто предлагается перейти на обычный TeX, когда нужно сделать что-то сложное.
Конкретно с LaTeX, я часто обнаруживаю, что он принял какое-то решение, якобы, чтобы освободить вас от необходимости думать о чем-то, и вам не нравится принятое им решение. Ваши варианты будут такими: либо прочитать код LaTeX и выяснить, что и как происходит (что нелегко), либо найти пакет, который исправит эту мелочь (часто возможно, но иногда кажется отвратительным), либо страдать.
С простым TeX вы несете ответственность за любое поведение, которое видите, так что если вам что-то не нравится, это ваша вина, и вы можете понять, что вы сделали неправильно. Или, по крайней мере, спросить здесь, на tex.SE. :)
Кстати, если вы хотите изучить простой TeX, я бы рекомендовал вам начать с XeTeX или LuaTeX, поскольку в этих движках работа со шрифтами намного проще.
решение4
Я давний пользователь LaTeX (мне было трудно понять TeXbook), но я подхожу к этому с точки зрения компьютерного программирования. Моим первым знакомством с программированием был курс в местном техническом колледже о машинном коде (куча нулей и единиц) --- ужасно, особенно когда я узнал, что в колледже нет компьютера, а значит, нет возможности, кроме как вручную, проверить код, который мы отправили; после этого все стало просто, просто вводить последовательности случайных нулей и единиц! Но в основном компьютеры понимали машинный код.
Затем был код на ассемблере, который был хотя бы немного читаем, если не легко понимаем. И были программы, которые преобразовывали ассемблер в машинный код.
Затем появились языки программирования, такие как FORTRAN, C или Java, которые обеспечивали высокоуровневые способы обсуждения вещей --- гораздо более приспособленные к человеческому пониманию (при условии, что вы были программистом). Они шли с компиляторами, которые по сути преобразовывали язык в ассемблер, а затем он преобразовывался в машинный код, и затем компьютер делал замечательные вещи.
Мне кажется, что хотя TeX может делать то, что вы хотите, он похож на код на ассемблере, в то время как LaTeX похож на FORTRAN или Java, где гораздо проще описать то, что вы хотите. Так же, как языки программирования LaTeX "конвертируются" в TeX.
Хотите ли вы работать на высоком уровне выражения или на низком уровне? Более низкий уровень может быть более эффективным для процессора, но более высокий может быть более понятным в целом.
Документ TeX, вероятно, будет компилироваться быстрее, чем документ Latex, но мы говорим здесь о (долях) секунд. Сравните это со временем, которое вам придется потратить на создание документа TeX, соответствующего вашим потребностям, по сравнению с LaTeX, который предоставляет множество решений, которые вам могут понадобиться для кодирования с помощью TeX.