Разделение структуры и стиля контента в LaTeX?

Разделение структуры и стиля контента в LaTeX?

В HTML за последнее десятилетие или около того наблюдался сильный толчок к полному разделению структуры и стиля контента. Большинство веб-сайтов теперь создаются с использованием HTML для структурной разметки и CSS для представления этой разметки. Это позволяет очень легко применять разные стили к одному и тому же контенту: Если вы не знаете, насколько это мощно, см., например,http://www.csszengarden.com/. Существует документ W3c, обосновывающий необходимостьразделение семантической и презентационной разметки.

Я относительно новичок в LaTeX, но я уже некоторое время занимаюсь разработкой веб-сайтов. Да, это разные области, но они пытаются делать одно и то же: хорошо представлять контент. Мой опыт работы с LaTeX за последние 6 месяцев оставляет у меня ощущение, что эта концепция разделения контента и стиля не очень-то продвинулась в мире TeX. Например, чтобы определить правила переноса ячейки таблицы в HTML+CSS, достаточно добавить класс к ячейке и добавить одну строку в ваш документ CSS. В LaTeX вам нужно сделатьчто-то ужасное вроде этого.

Так, я что-то упускаю или это LaTeX? Используется ли эта концепция разделения контента и стиля в дизайне LaTeX? Она просто плохо реализована? Вероятно ли, что она будет реализована лучше в будущих версиях (LaTeX3? ConTeXt?)?

Примечание: Я не хочу обидеть разработчиков LaTeX: система действительно хороша по многим другим причинам. Я просто вижу эту зияющую дыру и мало обсуждений вокруг нее, и мне интересно, почему.

решение1

История

Кнут написал TeX в конце 1970-х, потому что он хотел набирать материал настолько хорошо, насколько мог, учитывая ограничения собственных знаний и технологий, доступных в то время. По общему мнению, он проделал довольно хорошую работу, но то, чего он определенно не пытался сделать, так это разделить структуру и стиль.

Лампорт написал LaTeX в середине 1980-х, когда увидел необходимость в более четком разделении двух областей. LaTeX был пересмотрен в начале 1990-х, а текущее ядро ​​датируется 1994 годом (с исправлениями ошибок, конечно). Это на некоторое время предшествует модели HTML + CSS, и снова технологические ограничения означали, что дальнейшее усложнение LaTeX тогда было бы невозможным. (В 1994 году LaTeX был почти слишком большим для многих ПК, и команда работала очень усердно, чтобы ужать его.)

В мире HTML можно добавлять новые теги, которые будут игнорироваться рендерерами, которые их не знают. Это не относится к TeX: неизвестные управляющие последовательности являются ошибками. Поэтому мы не можем просто добавлять новые концепции и ожидать, что существующие документы будут работать: этоДействительноважно. Поэтому решения, принятые в 1994 году, по-прежнему важны для LaTeX сегодня.

ConTeXt новее и выделяет гораздо больше дизайна, чем LaTeX «из коробки». ConTeXt также использует другой подход к стабильности, чем LaTeX, с более активными перспективами разработки ядра. Однако подход ConTeXt в некотором смысле больше похож на обычный TeX, чем на LaTeX, в том смысле, что ConTeXt сохраняет дизайн «ближе к пользователю», чем LaTeX.

Ввод и вывод

В мире HTML документ полностью считывается в память для построения DOM для рендеринга. TeX так не работает, по крайней мере, если мы не программируем все это сами. Вместо этого TeX считывает строку и обрабатывает ее, прежде чем перейти к следующей строке. (LuaTeX может изменить это, но я думаю, что даже в ConTeXt модель TeX по-прежнему остается основной.) Таким образом, подходы, необходимые для изменения внешнего вида, очень разные.

Главное, что следует иметь в виду, думая об этой области, — это то, что люди хотят получить на выходе. В мире TeX мы сосредоточены на высококачественном наборе. Таким образом, почти всегда будет некоторая ручная корректировка дизайна, чтобы отразить реалии контента. Это не то, что происходит в «хорошо написанном» HTML, и хотя это можно выразить в XML, это, безусловно, нарушает строгое разделение. Я и другие утверждали бы, что это неплохо: вам действительно нужно ручное вмешательство, чтобы получить наилучшие результаты.

Таблицы

Таблицы конкретно упомянуты в вопросе, и я думаю, что они заслуживают рассмотрения сами по себе. В HTML таблицы использовались для различных целей. В TeX существует гораздо более ограниченный подход к таблицам. Таблицы — известные сложные звери в мире TeX, и Кнут действительно отметил, что удивительно, что они вообще работают! В большинстве набранных документов таблицы используются в основном для «формальных таблиц», и у них довольно ограниченный диапазон «хорошего» внешнего вида. Таким образом, меньше необходимости предоставлять полный спектр элементов управления в стиле CSS.

Как говорит в своем ответе canaaerus, мир TeX управляется не комитетом, а никем, и поэтому то, что будет реализовано, зависит от того, чего хотят отдельные пользователи. Существует ряд табличных пакетов для LaTeX, плюс подход ConTeXt и raw \halignв простом TeX. Однако они в основном пытаются решить другие проблемы, что говорит вам, где находится приоритет для пользователей.

Заглядывая вперед

Как участник проекта LaTeX3, я знаю, что мы, безусловно, обсуждаем лучшее разделение контента и дизайна. Одна проблема, которую стоит здесь иметь в виду, заключается в том, что модель HTML + CSS не всегда хорошо переводится в то, что мы хотим для набора текста. Между этими двумя областями есть некоторые существенные различия, и это означает, что все никогда не будет так просто.

Любой лучший подход должен работать с TeX, как в плане кода, так и в плане интерфейса. У нас естьэкспериментальный коддля работы с отношениями между объектами ('l3ldb'), а также идея«шаблоны» для дизайна, оба из которых находятся в этой области.

решение2

Хотя такое разделение контента и разметки — идея, безусловно, не чуждая разработчикам и пользователям TeX, существуют некоторые фундаментальные различия между тем, как работают TeX и HTML, а также их сообщества.

HTML, по сути, организован централизованно. Есть комитет (а именно W3C), который разрабатывает веб-стандарты. Затем все авторы HTML-документов должны писать в соответствии с этими стандартами, а разработчики HTML-интерпретаторов (т.е. в основном веб-браузеров) должны их реализовать.

С другой стороны, для TeX все происходит совсем по-другому. Нет никаких определенных стандартов. Конечно, большинство вещей основано на оригинальном TeX Кнута. Но многое было добавлено. Например, теперь есть разные пакеты макросов, ConTeXt и LaTeX. Там вы можете легко увидеть, как уже базовый синтаксис не фиксирован. Кто-нибудь может сказать, что он хочет использовать /для макросов вместо \того, как это делает LaTeX. Более того, очень много функциональности, используемой сегодня, добавляется в виде пакетов. Они делают TeX чрезвычайно расширяемым.

Это приводит нас к технической части разницы. TeX является полным по Тьюрингу! HTML же — это просто язык разметки. В HTML вы указываете содержимое, структуру и стиль вашего документа, в TeX вы пишете алгоритм того, как построить ваш документ.
Конечно, в самых простых случаях вам не нужно использовать сложные программные конструкции, и поэтому документ TeX выглядит не так, как будто он был написан на языке разметки. Но я бы сказал, что в отношении таких документов разделение содержимого и разметки применяется в TeX очень хорошо.

Если вы посмотрите напримеркак вы сказали, это именно тот момент, когда документы перестают быть похожими на разметку.

решение3

Используется ли эта концепция разделения содержания и стиля в дизайне LaTeX? Она просто плохо реализована?

Он используется, и это не обязательноплохореализовано (см. другие ответы для исторической перспективы). Скорее, это реализовано на довольнонизкий уровень.

Тыможетобязательно используйте строгое разделение контента и стиля в LaTeX (и на самом деле я настоятельно рекомендую это делать). Но для этого вам нужно воспользоваться возможностью LaTeX определять макросы.

LaTeX имеетнемногосемантические макросы, такие как \chapterи \emph(конечно, их гораздо больше). Существуют классы документов и пакеты, которые предоставляют вам гораздо больше возможностей. Например, классы KOMA-script предоставляют целый ряд макросов длянастроитьвнешний вид семантических макросов, предоставляемых LaTeX.

Но на практике, какая семантика вам нужна, во многом зависит от типа документа, который вы пишете. Поэтому существуют классы документов, scrlttr2которые предоставляют семантические макросы для конкретной задачи написания письма, но это исключение:Вместо того чтобы предоставлять множество узкоспециализированных семантических макросов, LaTeX предоставляет язык для создания узкоспециализированных макросов..

В конечном счете, ваш документ должен быть свободен от макросов физической компоновки и использовать исключительно семантические макросы. \textbf? Нет, используйте макрос, описывающийпочемувам нужен жирный текст.

Поскольку они настолько специфичны для домена, большинство макросов, которые вам понадобятся, вы, вероятно, напишете сами. Вот почему многие пакеты LaTeX предоставляют вам инструменты, чтобы сделать это максимально простым. Например, есть пакеты для настройки отображения рисунков (или для создания пользовательских типов рисунков; см. captionили float); есть пакеты, которые облегчают написание мощных макросов ( etoolboxи большую часть LaTeX3). И есть пакеты для многих специальных случаев использования, таких как подсветка исходного кода.

С ними в большинстве случаев относительно просто собрать простой набор семантических макросов, которые можно использовать по всему документу. Тем не менее, определения макросов моей магистерской диссертации занимают около одной шестой (в SLOC, комментарии удалены) всего документа.

решение4

Я, безусловно, согласен, что разделение структуры и стиля является одним из основных преимуществ LaTeX и ConTeXt. Тем не менее, на практике трудно полностью избежать их смешивания. Оказывается, только очень простые документы могут иметь полностью разделенные стиль и содержание. Реальный случай даже скромного размера книги почти всегда требует некоторой последней тонкой настройки, которая фактически уничтожает их разделение. Для меня как издателя наиболее практичным решением для достижения 100% разделения является всегда хранить содержимое в XML-файле, который определяет структуру документа, и иметь все инструкции, связанные со стилем, в файле ConTeXt. ConTeXt, как оказалось, является очень практичным XML-процессором. Конечно, вы можете легко создать файл LaTeX с помощью XSLT из вашего XML и использовать LaTeX, если предпочитаете. В этом случае вы должны поместить все инструкции, связанные со стилем, в ваш XSL-файл.

Связанный контент