\documentclass[a4paper]{article}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{url}
\newcommand\city[1]{\begin{center}#1\end{center}}
\newcommand\project[1]{\begin{center}#1\end{center}}
\newcommand\organization[1]{\begin{center}#1\end{center}}

\begin{document}

\title{\TeX ML: XML-нотация для \TeX}
\author{Паращенко Олег}
\maketitle
\project{TeXML}
\city{Санкт-Петербург}
\organization{xmlhack.ru}
\begin{abstract}
В работе описывается один из способов преобразования XML-доку\-ментов в формат \LaTeX. Для этого предлагается использовать \TeX ML, промежуточное представление нотации \TeX{} в виде XML.
\end{abstract}

% =========================================================

\section{Зачем нужен \TeX ML}

\TeX ML\cite{texml}~--- это промежуточный формат для представления нотации \TeX{} в виде XML. Он упрощает создание печатных версий документов, когда выполнены следующие условия:
\begin{itemize}
\item исходные документы представлены в виде XML,
\item для создания печатной версии используется \LaTeX,
\item XSLT~--- лучший способ преобразования XML-данных.
\end{itemize}

Известны несколько проектов, в которых XML преобразуется в \LaTeX{} с помощью XSLT. Все они сталкивались с тем, что XSLT неэффективен, если результат трансформации~--- не XML.

Эту проблему можно обойти, используя промежуточный этап. Вначале XSLT эффективно преобразует XML в \TeX ML, а затем полученный \TeX ML сериализуется в \TeX.

% =========================================================

\section{Краткое описание \TeX ML}

Основные конструкции языка \TeX ML видны на примере:
\begin{verbatim}
<TeXML>
 <cmd name="documentclass">
  <opt>a4paper</opt>
  <parm>minimal</parm>
 </cmd>
 <env name="document">
  Это&nbsp;&mdash; пример.
 </env>
</TeXML>
\end{verbatim}

Результат сериализации:
\begin{verbatim}
\documentclass[a4paper]{minimal}
\begin{document}
Это~\textemdash{} пример.
\end{document}
\end{verbatim}

Главные задачи сериализатора:
\begin{itemize}
\item замена специальных символов (например, <<\texttt{\textless}>> на~<<\texttt{\textbackslash{}textless}>>),
\item обработка unicode (например, вывод <<\texttt{д}>> или <<\texttt{\textbackslash cyrchar\textbackslash cyrd\{\}}>>),
\item разбиение лигатур (например, вместо <<\texttt{-{}-{}-}~>>~--- <<\texttt{-\{\}-\{\}-}>>).
\end{itemize}

Помимо этих существенных преобразований, \TeX ML предоставляет также расширенные возможности.

\begin{itemize}
\item В язык встроена поддержка структурных конструкций \LaTeX: окружений, групп, команд с параметрами.
\item Благодаря автоматическому форматированию создаваемого кода, итоговые документы хорошо выглядят.
\end{itemize}

% =========================================================

\section{Преимущества \TeX ML}

Простой код на \TeX ML
\begin{verbatim}
<group><cmd name="it" gr="0"/>\пример</group>
\end{verbatim}

соответствует такому \TeX-фрагменту:
\begin{verbatim}
{\it \textbackslash{}пример}
\end{verbatim}

Если изучить историю проектов tbook\cite{tbook}, xsltml\cite{xsltml}, dblatex\cite{dblatex}, db2latex\cite{db2latex} и других, создающих \TeX-код с помощью XSLT, то выяснится, что во всех них были подобные проблемы:
\begin{itemize}
\item не всегда экранируются специальные символы,
\item иногда забывается пробел после команды и получается <<\texttt{\textbackslash it\textit{текст}}>> вместо <<\texttt{\textbackslash it \textit{текст}}>>,
\item может теряться открывающая или закрывающая фигурная скобка,
\item из-за объективных сложностей, системы ориентированы на западноевропейскую кодировку.
\end{itemize}

Эти и другие проблемы не возникают при использовании \TeX ML.

% =========================================================

\section{Другие версии \TeX ML}

При поиске решения для публикации XML через \LaTeX{} выяснилось, что Douglas Lovell предложил\cite{lovell} подход \TeX ML ещё в 1999-м году, и была даже реализация на языке Java. Этот проект, \TeX MLatt\'e\cite{texmlatte}, был заброшен несколько лет назад, но от него осталась описание, которое послужило основой для новой версии \TeX ML.

Существует также \TeX MLapis\cite{texmlapis}, обработчик подмножества \TeX ML на языке Perl, но его возможности ограничены.

% =========================================================

\begin{thebibliography}{99}

\bibitem{texml} TeXML: an XML vocabulary for TeX \url{http://getfo.org/texml/}

\bibitem{tbook} The tbook system for XML Authoring \url{http://tbookdtd.sourceforge.net/}

\bibitem{xsltml} XSLT MathML Library \url{http://xsltml.sourceforge.net/}

\bibitem{dblatex} DocBook to LaTeX/ConTeXt Publishing \url{http://dblatex.sourceforge.net/}

\bibitem{db2latex} DB2LaTeX XSL Stylesheets \url{http://db2latex.sourceforge.net/}

\bibitem{lovell} Douglas Lovell, TeXML: Typesetting XML with TeX \url{http://www.tug.org/TUG99-web/pdf/lovell.pdf}

\bibitem{texmlatte} \TeX MLatt\'e \url{http://www.alphaworks.ibm.com/tech/texml}

\bibitem{texmlapis} \TeX MLapis \url{http://www.bluweb.com/us/chouser/proj/texmlapis/}

\end{thebibliography}

\end{document}


