XML в TeX или как получить красивый PDF из XHTML-подобного источника

поверхностно, простой вопрос: как я могу получить отличный PDF-файл из моего XML-документа? Фактически, мой вход-это подмножество XHTML с добавлением нескольких пользовательских атрибутов (для сохранения некоторой информации об источниках цитирования и т. д.). Я изучал некоторые маршруты и хотел бы получить некоторую обратную связь, если кто-то пробовал некоторые из них раньше.

Примечание: я рассмотрел XSL-FO для создания PDF-файлов, но слышал, что типографское качество инструментов с открытым исходным кодом все еще сильно отстает от TeX. Догадка самый продвинутый из них Apache FOP. Но меня действительно интересуют красивые PDF-файлы (в противном случае я мог бы использовать диалог печати моего браузера). Какие мысли на это?

поэтому я думал об использовании XSLT для преобразования моего настроенного диалекта XML/XHTML в DocBook и оттуда (DocBook через XSLT для правильного HTML, кажется, работает довольно хорошо, поэтому я мог бы использовать его для этого). Но как мне перейти от DocBook к TeX? Я столкнулся с рядом решения.

  • dblatex набор таблиц стилей XSLT, которые выводят LaTeX.
  • db2latex начал как клон dblatex, но теперь обеспечивает более тесную интеграцию с пакетами LaTex и предоставляет один скрипт для вывода PDF, что довольно приятно.
  • passiveTex вместо XSLT он использует синтаксический анализатор XML, написанный в TeX.
  • TeXML по существу является XML-сериализацией LaTeX язык, который может использоваться как промежуточный формат и сопровождающий инструмент python, который преобразуется из этого формата XML в LaTeX/ConTeXt. Они!--26-->заявленное это позволяет избежать проблем существующих решений со специальными символами, потеряв некоторые фигурные скобки или пробелы и поддержку только кодировки latin-1. (Это все еще так?)

поскольку мой входной XML может содержать довольно много специальных символов, представленных в Unicode, последний момент особенно важен для меня. Я также думал об использовании XeTeX вместо pdfTeX, чтобы обойти эту проблему. (Я могу потерять некоторое типографское качество, но, возможно, все же лучше, чем текущие процессоры с открытым исходным кодом XSL-FO?) Так db2latex и TeXML кажутся фаворитами. Так может кто-нибудь прокомментировать надежность этих?

в качестве альтернативы, я мог бы иметь больше удачи, используя контекст напрямую, так как кажется, что есть довольно некоторые интерес к контекстному сообществу в XML. Особенно, я мог бы взять более глубокий взгляд на "мой путь: получение веб-контента и pdf-вывода из одного источника" и "работа с XML в контексте MkIV". Оба документа описывают подход с использованием контекста в сочетании с LuaTeX. (DocBook В Контексте кажется, примерно то же самое, но последняя версия с 2003 года.) Второй документ отмечает:

вы можете задаться вопросом, почему мы делаем эти манипуляции в TEX и не используем xslt вместо этого. Этот преимущество интегрированного подход заключается в том, что он упрощает использование. Подумайте не только о обработке a документ, но также с использованием xml для управления ресурсами в том же запуске. язык XSLT подход так же многословен (в конце концов, вам все равно нужно создать код TEX) и, вероятно менее читабельно. В случае MkIV комплексный подход также быстрее и дает нам возможность манипулировать содержимым во время выполнения с помощью Lua.

Что вы думаете об этом? Пожалуйста, имейте в виду, что у меня есть некоторый опыт с XSLT и TeX, но никогда не заходили слишком глубоко в любой из них. Никогда не пробовал много разных пакетов LaTeX или альтернатив, таких как ConTeXt (или XeTeX/LuaTeX вместо pdfTeX), но я готов узнать некоторые новые вещи, чтобы получить мои красивые PDF-файлы в конце ;)

кроме того, я споткнулась о Pandoc, но не смог найти никакой информации о том, как это сравнивается с другими подходами. И, наконец, ссылка на довольно обширную документацию по как использовать TeXML с контекстом.

3 ответов


Я делал что-то подобное в прошлом (то есть поддерживал основные версии документов в XML и хотел производить вывод LaTeX из них).

Я использовал PassiveTeX в прошлом, но я обнаружил, что создание таблиц стилей-тяжелая работа-обычный результат написания двух языков сразу. Я заставил его работать, и результат выглядел очень хорошо, но, вероятно, это было больше усилий, чем стоило. Тем не менее, если вам нужно добавить количество стилей, это маленький, тогда это может быть хороший путь, потому что это один шаг.

наиболее успешным маршрутом (читаемым, гибким и привлекательным) было использование XSLT для преобразования документа в структурный латекс, который соответствует предполагаемой структуре документа результата, но который не пытается сделать больше, чем минимальное форматирование. В зависимости от вашего документа это может быть обычный латекс, или он может иметь индивидуальные структуры. Затем напишите или адаптируйте файл таблицы стилей или класса LaTeX, который форматирует это выход во что-то привлекательное. Таким образом, вы используете XSLT для своих сильных сторон (и не выходите за их пределы, что быстро становится очень неприятным), используя LaTeX для его сильные стороны, и не запутаться.

то есть это более или менее соответствует подходу ваших первых двух альтернатив, и идете ли вы с ними, или пишете/настраиваете таблицу стилей LaTeX с заказным выходом, является функцией того, насколько комфортно вы себя чувствуете с таблицами стилей LaTeX, и сколько сложное или специализированное форматирование, которое вам нужно сделать.

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


вы, возможно, захотите, чтобы проверить вопросы, помеченные XML на TeX.sx, особенно этой один. Я предлагаю вам использовать контекст; текущая версия не имеет проблем с Unicode и может отлично обрабатывать OpenType - и она программируется в Lua. Наиболее часто используемая альтернатива с LaTeX -XMLTeX, но для этого нужно много TeX foo.

Если ваши документы могут обрабатываться pandoc, используйте это: у вас будет несколько вариантов вывода, больше, чем у любого Система на основе TeX.


В конце концов, я решил пойти с Pandoc, Кажется, очень полированная и твердая кодовая база. Одним из потенциальных недостатков является то, что вы должны ограничить себя количеством функций разметки, доступных во внутреннем представлении Pandoc, которое сопоставляет в основном один к одному его расширенные уценки.

потому что я не думал, что создание markdown из моего XHTML-подобного источника было хорошей идеей, мне удалось инициировать pandoc компонент, который читает С DocBook, который в настоящее время находится в главной ветви РЕПО развития Pandoc. Итак, теперь у меня есть простая таблица стилей XSLT, которая преобразуется из моего диалекта XHTML в DocBook (который также является XML), а затем я использую Pandoc для экспорта в подъемник других форматов, включая PDF через контекст.