15 марта 2012

Публикуем LaTeX книгу в html формате в вебе с помощью tex4ht

Захотелось мне тут след в истории common lisp'а оставить и взялся я книгу Common Lisp The Language 2 edition переводить. Гай Стил исходный LaTeX код книги опубликовал и даже html версию выпустил. Однако html версия хоть и была сгенерирована, но еще вручную и доработана. А так как русскую html версию мне тоже надо было сделать, а руками работать не хотелось, начал я темой конвертации LaTeX в html и интересоваться.

Условно программы для преобразования можно разделить на два вида:

  • Модифицируют поведение TeX для вывода в html формат
  • Сюда можно отнести tex4ht и hyperlatex
  • Сами обрабатывают и преобразовывают исходный LaTeX/TeX код книги
  • Latex2Html, HeVeA и другие
После использования некоторых из них, я сделал вывод о том, что более всего мне подходит TeX4ht.

TeX4ht

TeX4ht примечателен тем, что не требует каких-либо вмешательств в итоговый html код, позволяя достаточно гибко и почти понятно конфигурировать процесс преобразования и достигать необходимого внешнего вида результата. А именно:

  • позволяет задавать окружающие html теги для tex заданных команд и окружений
  • редактировать css

TeX4ht понимает все команды определенные пользователем, потому что является драйвером для TeX'а (как например, pdflatex). Кроме того, TeX4ht умеет работать с такими модулями, как makeind, multind, hyperref и т.д.

Все модули можно просмотреть такой командой (подправьте для вашего дистрибутива):

ls -A /usr/share/texmf-dist/tex/generic/tex4ht/

Но программа не может состоять из одних только достоинств, поэтому TeX4ht отличает слегка нетривиальной настройкой. Я, честно говоря, не всегда представляю, что там твориться под капотом, поэтому некоторые вещи буду объяснять кратко или просто копировать текст из официальной документации.

Примеры которые здесь будут рассматриваться взяты из вышеназванной книги, исходники которой можно посмотреть здесь: http://github.com/filonenko-mikhail/cltl2-doc-ru. А результат здесь: http://filonenko-mikhail.github.com/cltl2-doc-ru.
Кроме того, есть пример попроще. Я когда-то распознал статью Лотфи Заде о нечетких множествах. https://github.com/filonenko-mikhail/lotfi-zadeh-fuzzy-sets/blob/master/Zadeh-1965.en.tex

Запуск TeX4ht

Источник на английском: http://tug.org/applications/tex4ht/mn-commands.html

Команда запуска имеет следующий шаблон:

htlatex filename "options1" "option2" "options3" "options4"

options1 содержит перечисление настроек через запятую. Обязательно начинается с команды html, xhtml или имени конфигурационного файла. Затем можно указать деление html файлов в соответствии с глубиной деления частей книги (главы, разделы).

options2 и options3 содержат перечисление настроек через пробел. Эти настройки указываются для постобработчиков tex4ht.c and t4ht.c,

options4 содержит настройки передающиеся компилятору LaTeX.

Можете просто для своего tex файла запустить процесс так:

htlatex filename.tex

и посмотреть готовый результат. Но для более тонкой настройки, я запускаю процесс так:

htlatex clm.tex 'cltl,3,next,charset=utf-8' ' -cunihtf -utf8' '' '-interaction=batchmode'

Это значит скомпилировать clm.tex. Использовать конфигурационный файл cltl.cfg. Разделить html файлы по трем уровням вложенности глав, разделов. Установить кодировку в utf-8. Затем в постобработчик также указывается кодировка utf8. А также параметр для latex, для игнорирования ошибок и работы в пакетном режиме.

Конфигурирование TeX4ht

Источник на английском: http://tug.org/applications/tex4ht/mn11.html

Как я уже сказал, конфигурационный файл устанавливается в первой позиции options1 (второй параметр для htlatex) без указания расширения файла. А расширение должно в свою очередь быть таким: cfg. Файл конфигурации содержит TeX команды и имеет следующий шаблон:

\Preamble{html}
\begin{document}
....
настроечные команды
....
\EndPreamble

В данном конфигурационном файле можно указать css для итогового документа. Для этого служат следующие команды:

\Css{content}
\Css content\EndCss
\CssFile[list-of-css-files]content\EndCssFile

Например,

 \Css{
    table.tabbing {
        border-width: 1px;
        border-spacing: 1px;
        border-style: none;
        border-collapse: collapse;
    }
    .centerline {
        text-align: left
    }
    tt {
        font-family: monospace,monospace;
    }
    div.lisp {
        color: olive;
        padding: 1em
    }
}

Можно конфигурировать html вывод для LaTeX окружений. Для этого используются функция вывода html тегов \HCode и команда конфигурации окружения \ConfigureEnv{environment-name} {before-environment} {after-environment} {before-list} {after-list}. Например:

\ConfigureEnv{lisp} {\Tg<div class=lisp>} {\Tg</div>} {} {}
\ConfigureEnv{defun} {\Tg<div class=defun>} {\Tg</div>} {} {}

Условное выполнение TeX4ht кода

Иногда необходимо выполнить некоторый TeX код только при условии использования TeX4ht. Например для TeX4ht необходимо явно указывать расширение графического файла. Это можно сделать определив две версии команды для включения илююстраций (\includefigure)

\ifx \HCode\Undef
\newcommand{\includefigure}[1]{\center{\includegraphics[width=1\linewidth]{#1}}}
\else
\newcommand{\includefigure}[1]{\center{\includegraphics[width=1\linewidth]{#1.png}}}
\fi

Строка \ifx \HCode\Undef просто проверяет наличие TeX4ht команды \HCode и выполняет одно из двух действий.

Создание предметного указателя

В результате выполнения команды htlatex, будет создан *.idx файл для генерации индекса. Следующая команда создаст *.ind файл, который и будет использован в итоговом документе.

tex '\def\filename{{FILENAME}{idx}{4dx}{ind}} \input  idxmake.4ht' 
makeindex -o FILENAME.ind FILENAME.4dx 

Библиография

Библиография и ссылки поддерживаются.

Иллюстрации

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

Комментариев нет:

Отправить комментарий