<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version ="1.0"
xmlns:xsl ="http://www.w3.org/1999/XSL/Transform"
xmlns ="http://www.tei-c.org/ns/1.0"
xmlns:ltx ="http://dlmf.nist.gov/LaTeXML"
xmlns:str ="http://exslt.org/strings"
xmlns:m ="http://www.w3.org/1998/Math/MathML"
xmlns:xlink ="http://www.w3.org/1999/xlink"
extension-element-prefixes="str"
exclude-result-prefixes="ltx str m xlink">
<xsl:import href="LaTeXML-common.xsl"/>
<xsl:strip-space elements="*"/>
<xsl:output
method = "xml"
indent = "yes"
encoding = 'utf-8'/>
<xsl:variable name="footnotes" select="//ltx:note[@role='footnote']"/>
<xsl:template name="add_classes"/>
<xsl:param name="html_ns"></xsl:param>
<xsl:template match="*">
<xsl:message> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the main body.
</xsl:message>
<xsl:comment> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the main body.
</xsl:comment>
</xsl:template>
<xsl:template match="*" mode="math">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="math"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*" mode="math">
<xsl:attribute name="{local-name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<xsl:template match="*" mode="front">
<xsl:message> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the front matter.
</xsl:message>
<xsl:comment> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the front matter.
</xsl:comment>
</xsl:template>
<xsl:template match="*" mode="back">
<xsl:message> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the back matter.
</xsl:message>
<xsl:comment> The element <xsl:value-of select="name(.)"/> <xsl:if test="@*"> with attributes
<xsl:for-each select="./@*">
<xsl:value-of select="name(.)"/>=<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
is currently not supported for the back matter
</xsl:comment>
</xsl:template>
<xsl:template match="ltx:ERROR">
An error in the conversion from LaTeX to XML has occurred here.
</xsl:template>
<xsl:template match="ltx:ERROR" mode="front">
An error in the conversion from LaTeX to XML has occurred here.
</xsl:template>
<xsl:template match="ltx:ERROR" mode="back">
An error in the conversion from LaTeX to XML has occurred here.
</xsl:template>
<xsl:template match="ltx:document">
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<xsl:apply-templates select="ltx:title" mode="front"/>
</titleStmt>
<publicationStmt>
<publisher></publisher>
</publicationStmt>
<sourceDesc>
<biblStruct>
<analytic>
<!-- All authors are included here -->
<xsl:apply-templates select="ltx:creator[@role='author']" mode="front"/>
<!-- Title information related to the paper goes here -->
<xsl:apply-templates select="ltx:title" mode="front"/>
</analytic>
<monogr>
<imprint>
<xsl:apply-templates select="ltx:date"/>
</imprint>
</monogr>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc>
<xsl:apply-templates select="ltx:abstract" mode="front"/>
<xsl:apply-templates select="ltx:keywords" mode="front"/>
</profileDesc>
</teiHeader>
<text>
<body>
<xsl:apply-templates select="@*|node()"/>
</body>
<back>
<xsl:apply-templates select="@*|node()" mode="back"/>
</back>
</text>
</TEI>
</xsl:template>
<xsl:template match="ltx:para[not(ancestor::ltx:section or ancestor::ltx:appendix or ancestor::ltx:acknowledgements) and preceding::ltx:section]"> <!-- Is not allowed -->
<xsl:comment><xsl:for-each select=".//text()"><xsl:value-of select="."/></xsl:for-each></xsl:comment> <!-- trying to provide the maximal information here -->
</xsl:template>
<xsl:template match="text()">
<xsl:copy-of select="."/>
</xsl:template>
<!-- Front matter section -->
<xsl:template match="ltx:emph" mode="front">
<hi rend="italic">
<xsl:apply-templates mode="front" select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:creator[@role='author']" mode="front">
<author>
<xsl:apply-templates mode="front"/>
</author>
</xsl:template>
<xsl:template match="ltx:appendix" mode="app">
<app>
<xsl:apply-templates select="@*|node()"/>
</app>
</xsl:template>
<xsl:template match="ltx:appendix/ltx:title">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:date[@role='creation']" mode="front">
<date>
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</date>
</xsl:template>
<xsl:template match="ltx:date[@role='creation']">
<date type="published">
<xsl:attribute name="when">
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:attribute>
</date>
</xsl:template>
<xsl:template match="ltx:creator" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:contact[@role='affiliation']" mode="front">
<affiliation><xsl:apply-templates select="@*|node()" /></affiliation>
</xsl:template>
<xsl:template match="ltx:contact[@role='email']" mode="front">
<email><xsl:apply-templates select="@*|node()" /></email>
</xsl:template>
<xsl:template match="ltx:personname" mode="front">
<persName>
<surname>
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</surname>
<forename>
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()!=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</forename>
</persName>
</xsl:template>
<xsl:template match="ltx:text[@font='bold']" mode="front">
<hi rend="bold">
<xsl:apply-templates mode="front" select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:abstract" mode="front">
<abstract>
<xsl:apply-templates select="@*|node()" />
</abstract>
</xsl:template>
<xsl:template match="ltx:keywords" mode="front">
<kwd-group>
<xsl:for-each select="str:tokenize(./text(),',')">
<kwd><xsl:value-of select="."/></kwd>
</xsl:for-each>
</kwd-group>
</xsl:template>
<xsl:template match="ltx:document/ltx:title" mode="front">
<title level="a" type="main">
<xsl:apply-templates select="@*|node()" />
</title>
</xsl:template>
<xsl:template match="ltx:equationgroup" mode="front">
<p>
<xsl:apply-templates select="@*|node()" mode="front"/>
</p>
</xsl:template>
<xsl:template match="ltx:equationgroup/ltx:equation" mode="front">
<formula>
<xsl:apply-templates select="@*" mode="front"/>
<xsl:for-each select=".//m:math"><xsl:copy-of select="."/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:contact[@role='url']" mode="front">
<xsl:apply-templates select="@*|node()" mode="front"/>
</xsl:template>
<xsl:template match="ltx:equation" mode="front">
<p>
<formula>
<xsl:apply-templates select="@*|node()"/>
</formula>
</p>
</xsl:template>
<xsl:template match="ltx:Math[@mode='inline']" mode="front">
<formula>
<xsl:apply-templates select="@*"/>
<xsl:for-each select=".//m:math"><xsl:copy-of select="."/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:caption" mode="front">
<head>
<xsl:if test="./ltx:p">
<xsl:apply-templates select="@*|node()" mode="front"/>
</xsl:if>
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates select="@*|node()" mode="front"/>
</p>
</xsl:if>
</head>
</xsl:template>
<xsl:template match="ltx:caption" mode="back">
<head>
<xsl:if test="./ltx:p">
<xsl:apply-templates select="@*|node()" mode="back"/>
</xsl:if>
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates select="@*|node()" mode="back"/>
</p>
</xsl:if>
</head>
</xsl:template>
<xsl:template match="ltx:caption">
<head>
<xsl:if test="./ltx:p">
<xsl:apply-templates select="@*|node()"/>
</xsl:if>
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:if>
</head>
</xsl:template>
<xsl:template match="ltx:float" mode="front">
<boxed-text>
<xsl:apply-templates select="@*|node()" mode="front"/>
</boxed-text>
</xsl:template>
<xsl:template match="ltx:paragraph">
<boxed-text>
<xsl:apply-templates select="@*|node()"/>
</boxed-text>
</xsl:template>
<xsl:template match="ltx:paragraph/ltx:title">
<head>
<xsl:if test="./ltx:p">
<xsl:apply-templates select="@*|node()"/>
</xsl:if>
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:if>
</head>
</xsl:template>
<xsl:template match="ltx:text[@font='italic']">
<hi rend="italic">
<xsl:apply-templates select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:table" mode="front"/>
<xsl:template match="ltx:abstract//ltx:table" mode="front">
<xsl:message> There was a table in an abstract, deal with it </xsl:message> <!-- TODO if this actually happens, then deal with it -->
</xsl:template>
<!-- End front matter section -->
<!-- Start back section -->
<!-- This is essentially for bibliography and acknowledgements-->
<!-- However I still need stuff to handle various other subcases that could come up in for example appendices or acknowledgements -->
<xsl:template match="ltx:equationgroup" mode="back">
<p>
<xsl:apply-templates select="@*|node()" mode="back"/>
</p>
</xsl:template>
<xsl:template match="ltx:equationgroup/ltx:equation" mode="back">
<formula>
<xsl:for-each select=".//m:math"><xsl:copy-of select="."/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:equation" mode="back">
<p>
<formula>
<xsl:for-each select=".//m:math"><xsl:copy-of select="."/></xsl:for-each>
</formula>
</p>
</xsl:template>
<xsl:template match="ltx:Math[@mode='inline']" mode="back">
<formula>
<xsl:for-each select=".//m:math"><xsl:copy-of select="."/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:bibliography" mode="back">
<div type="references">
<listBibl>
<xsl:apply-templates mode="back"/>
</listBibl>
</div>
</xsl:template>
<xsl:template match="ltx:bibliography/ltx:title" mode="back">
<head>
<xsl:apply-templates select="@*|node()" />
</head>
</xsl:template>
<xsl:template match="ltx:biblist" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibitem" mode="back">
<bibl>
<xsl:if test="./@xml:id">
<xsl:attribute name="xml:id"><xsl:value-of select="./@xml:id"/></xsl:attribute>
</xsl:if>
<!-- Getting the reference type into the reference, if possible -->
<xsl:if test="./ltx:tags/ltx:tag[@class='ltx_bib_type']">
<xsl:attribute name="type"> <xsl:value-of select="./ltx:tags/ltx:tag[@class='ltx_bib_type']/text()"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates select="node()" mode="back"/>
</bibl>
</xsl:template>
<xsl:template match="ltx:tags" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@class='ltx_bib_type']" mode="back"/>
<xsl:template match="ltx:tags/ltx:tag[@role='key']" mode="back"/>
<xsl:template match="ltx:bibblock//ltx:bib-part[@role='publisher']" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-note[@role='publication']" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-part[@role='series']" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-publisher" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-edition" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@role='year']" mode="back">
<year>
<xsl:apply-templates mode="back"/>
</year>
</xsl:template>
<xsl:template match="ltx:bib-part[@role='volume']" mode="back">
<volume>
<xsl:apply-templates mode="back"/>
</volume>
</xsl:template>
<xsl:template match="ltx:bib-part[@role='pages']" mode="back">
<page-range>
<xsl:apply-templates/>
</page-range>
</xsl:template>
<xsl:template match="ltx:bibblock" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@role='title']" mode="back">
<article-title>
<xsl:apply-templates mode="back"/>
</article-title>
</xsl:template>
<xsl:template match="ltx:bib-date[@role='publication']" mode="back"> <!-- We are making the assumption that this contains only the year of publication -->
<date>
<year>
<xsl:apply-templates mode="back"/>
</year>
</date>
</xsl:template>
<xsl:template match="ltx:bib-note[@role='annotation']" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-organization" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-title" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-type" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bibblock//ltx:bib-place" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:bib-part[@role='number']" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:emph" mode="back">
<hi rend="italic">
<xsl:apply-templates mode="back" select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:acknowledgements" mode="back">
<div type="acknowledgements">
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates mode="back" select="@*|node()"/>
</p>
</xsl:if>
<xsl:if test="./ltx:p">
<xsl:apply-templates mode="back" select="@*|node()"/>
</xsl:if>
</div>
</xsl:template>
<xsl:template match="ltx:text[@font='italic']" mode="back">
<hi rend="italic">
<xsl:apply-templates select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:rule" mode="back">
<hr/>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@role='authors']" mode="back">
<person-group person-group-type="author">
<name>
<!-- I will not do sophisticated handling trying to split this into several authors etc. -->
<surname>
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()=last()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</surname>
<xsl:if test="contains(./text(),' ')">
<given-names>
<xsl:for-each select="str:tokenize(./text(),' ')">
<xsl:if test="position()!=last()">
<xsl:value-of select="."/> 
</xsl:if>
</xsl:for-each>
</given-names>
</xsl:if>
</name>
</person-group>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@role='fullauthors']" mode="back"/>
<xsl:template match="ltx:text[@font='bold']" mode="back">
<hi rend="bold">
<xsl:apply-templates mode="back" select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:tags/ltx:tag[@role='refnum']" mode="back"/>
<xsl:template match="ltx:tags/ltx:tag[@role='number']" mode="back"/>
<xsl:template match="ltx:table" mode="back"/>
<xsl:template match="ltx:acknowledgements//ltx:table">
<xsl:message> There's a table in the acknowledgements. Deal with it </xsl:message> <!-- TODO, actually do this if you ever see this -->
</xsl:template>
<!-- End back section -->
<!-- Start main section -->
<xsl:template match="ltx:text[@font='bold']">
<hi rend="bold">
<xsl:apply-templates select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:note[@role='institutetext']" mode="back"/>
<xsl:template match="ltx:note[@role='institutetext']"/>
<xsl:template match="ltx:note[@role='institutetext']" mode="front"/>
<xsl:template match="ltx:text[@font='italic']">
<hi rend="italic">
<xsl:apply-templates select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:emph">
<hi rend="italic">
<xsl:apply-templates select="@*|node()"/>
</hi>
</xsl:template>
<xsl:template match="ltx:note[@role='footnote']">
<note place="bottom">
<xsl:if test="not(./ltx:p)">
<p>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:if>
<xsl:if test="./ltx:p">
<xsl:apply-templates select="@*|node()"/>
</xsl:if>
</note>
</xsl:template>
<xsl:template match="ltx:para">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="ltx:equationgroup">
<p>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:template>
<xsl:template match="ltx:equation">
<p>
<formula>
<xsl:apply-templates select="@*"/>
<xsl:for-each select=".//m:math"><xsl:apply-templates select="." mode="math"/></xsl:for-each>
</formula>
</p>
</xsl:template>
<xsl:template match="ltx:equationgroup/ltx:equation">
<formula>
<xsl:apply-templates select="@*"/>
<xsl:for-each select=".//m:math"><xsl:apply-templates select="." mode="math"/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:Math[@mode='inline']">
<formula>
<xsl:apply-templates select="@*"/>
<xsl:for-each select=".//m:math"><xsl:apply-templates select="." mode="math"/></xsl:for-each>
</formula>
</xsl:template>
<xsl:template match="ltx:inline-block">
<figure>
<xsl:apply-templates select="@*|node()"/>
</figure>
</xsl:template>
<xsl:template match="ltx:p">
<p>
<xsl:apply-templates select="@*|node()" />
</p>
</xsl:template>
<xsl:template match="ltx:itemize">
<p>
<list rend="bulleted">
<xsl:apply-templates select="@*|node()"/>
</list>
</p>
</xsl:template>
<xsl:template match="ltx:enumerate">
<p>
<list rend="numbered">
<xsl:apply-templates select="@*|node()"/>
</list>
</p>
</xsl:template>
<xsl:template match="ltx:item">
<item>
<xsl:apply-templates select="@*|node()"/>
</item>
</xsl:template>
<xsl:template match="ltx:section">
<div>
<xsl:apply-templates select="@*|node()" />
</div>
</xsl:template>
<xsl:template match="ltx:theorem">
<note>
<xsl:apply-templates select="@*|node()"/>
</note>
</xsl:template>
<xsl:template match="ltx:theorem/ltx:title">
<title>
<xsl:apply-templates select="@*|node()"/>
</title>
</xsl:template>
<xsl:template match="ltx:proof">
<note>
<xsl:apply-templates select="@*|node()"/>
</note>
</xsl:template>
<xsl:template match="ltx:proof/ltx:title">
<title>
<xsl:apply-templates select="@*|node()"/>
</title>
</xsl:template>
<xsl:template match="ltx:contact[@role='address']" mode="front">
<address>
<addrLine>
<xsl:apply-templates select="@*|node()" mode="front"/>
</addrLine>
</address>
</xsl:template>
<xsl:template match="ltx:text[@class='ltx_phantom']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:subsubsection">
<div>
<xsl:apply-templates select="@*|node()"/>
</div>
</xsl:template>
<xsl:template match="ltx:quote">
<disp-quote>
<xsl:apply-templates select="@*|node()"/>
</disp-quote>
</xsl:template>
<xsl:template match="ltx:section/ltx:title">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:float">
<boxed-text>
<xsl:apply-templates select="@*|node()"/>
</boxed-text>
</xsl:template>
<xsl:template match="ltx:subsection/ltx:title">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:subsubsection/ltx:title">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:subsection">
<div>
<xsl:apply-templates select="@*|node()"/>
</div>
</xsl:template>
<xsl:template match="ltx:figure/ltx:caption">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:figure">
<figure>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="ltx:caption"/>
<xsl:apply-templates select="*[not(self::ltx:caption)]"/>
</figure>
</xsl:template>
<xsl:template match="ltx:table">
<table>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="@*|node()"/>
</table>
</xsl:template>
<xsl:template match="ltx:tabular/*">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:tbody">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:tr">
<row>
<xsl:apply-templates select="@*|node()"/>
</row>
</xsl:template>
<xsl:template match="ltx:td">
<cell>
<xsl:apply-templates select="@*|node()"/>
</cell>
</xsl:template>
<xsl:template match="ltx:tabular">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:table/ltx:caption">
<head>
<xsl:apply-templates select="@*|node()"/>
</head>
</xsl:template>
<xsl:template match="ltx:graphics">
<graphic url="{./@graphic}"> <!-- Probably could have made this an empty element, but I just wanted to go sure -->
<xsl:apply-templates select="@*|node()"/>
</graphic>
</xsl:template>
<xsl:template match="ltx:text[@class='ltx_ref_tag']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:note[@role='thanks']">
<p>
<xsl:apply-templates select="@*|node()" />
</p>
</xsl:template>
<xsl:template match="ltx:p/ltx:note[@role='thanks']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='italic']">
<hi rend="italic">
<xsl:apply-templates select="@*|node()" />
</hi>
</xsl:template>
<xsl:template match="ltx:section/ltx:title">
<head>
<xsl:apply-templates select="@*|node()" />
</head>
</xsl:template>
<xsl:template match="ltx:cite">
<xsl:if test="./ltx:ref/@idref">
<ref type="bibr" target="{./ltx:ref/@idref}"><xsl:apply-templates select="@*|node()" /></ref>
</xsl:if>
<xsl:if test="./ltx:bibref/@bibrefs">
<xsl:for-each select="str:tokenize(./ltx:bibref/@bibrefs,./ltx:bibref/@yyseparator)">
<ref type="bibr" target="{.}"><xsl:apply-templates select="@*|node()"/></ref>
</xsl:for-each>
</xsl:if>
</xsl:template>
<xsl:template match="ltx:bibref">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:ref[@idref]">
<ref target="{./@idref}">
<xsl:apply-templates select="@*|node()"/>
</ref>
</xsl:template>
<xsl:template match="ltx:ref[@idref and ancestor::ltx:cite]">
<xsl:apply-templates select="@*|node()" />
</xsl:template>
<xsl:template match="ltx:ref[@labelref and not(@idref)]">
<ref target="{./@labelref}">
<xsl:apply-templates select="@*|node()"/>
</ref>
</xsl:template>
<xsl:template match="ltx:ref[@class='ltx_url']">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[@class='ltx_url']" mode="front">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()" mode="front"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[@class='ltx_url']" mode="back">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()" mode="back"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[not(./@idref or ./@labelref) and ./@href]">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[not(./@idref or ./@labelref) and ./@href]" mode="front">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[not(./@idref or ./@labelref) and ./@href]" mode="back">
<ext-link xlink:href="{./href}">
<xsl:apply-templates select="@*|node()"/>
</ext-link>
</xsl:template>
<xsl:template match="ltx:ref[@idref]" mode="back">
<ref target="{./@idref}">
<xsl:apply-templates mode="back"/>
</ref>
</xsl:template>
<xsl:template match="ltx:ref[ancestor::ltx:bibblock]" mode="back">
<xsl:apply-templates mode="back"/>
</xsl:template>
<xsl:template match="ltx:ref[@idref]" mode="front">
<ref target="{./@idref}">
<xsl:apply-templates mode="front"/>
</ref>
</xsl:template>
<xsl:template match="ltx:float" mode="back">
<boxed-text>
<xsl:apply-templates select="@*|node()" mode="back"/>
</boxed-text>
</xsl:template>
<xsl:template match="ltx:titlepage">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:description">
<list>
<xsl:apply-templates select="@*|node()"/>
</list>
</xsl:template>
<xsl:template match="ltx:verbatim">
<preformat>
<xsl:apply-templates select="@*|node()"/>
</preformat>
</xsl:template>
<!-- End body section -->
<xsl:template match="ltx:document/ltx:title"/>
<!-- This section is for elements that we aren't doing anything with and just removing from the document -->
<xsl:template match="ltx:resource[@type='text/css']"/>
<xsl:template match="ltx:creator[@role='author']"/>
<xsl:template match="ltx:resource[@type='text/css']" mode="front"/>
<xsl:template match="ltx:abstract"/>
<xsl:template match="ltx:keywords"/>
<xsl:template match="ltx:note[@role='thanks']" mode="front"/>
<xsl:template match="ltx:contact[@role='thanks']" mode="front"/>
<xsl:template match="ltx:section" mode="front"/>
<xsl:template match="ltx:acknowledgements"/>
<xsl:template match="ltx:acknowledgements" mode="front"/>
<xsl:template match="ltx:bibliography"/>
<xsl:template match="ltx:bibliography" mode="front"/>
<xsl:template match="ltx:date[@role='creation']"/>
<xsl:template match="ltx:tag"/>
<xsl:template match="ltx:break"/> <!-- Break isn't really supposed to be used -->
<xsl:template match="ltx:resource[@type='text/css']" mode="back"/>
<xsl:template match="ltx:creator[@role='author']" mode="back"/>
<xsl:template match="ltx:abstract" mode="back"/>
<xsl:template match="ltx:keywords" mode="back"/>
<xsl:template match="ltx:note[@role='thanks']" mode="back"/>
<xsl:template match="ltx:section" mode="back"/>
<xsl:template match="ltx:date[@role='creation']" mode="back"/>
<xsl:template match="ltx:document/ltx:title" mode="back"/>
<xsl:template match="ltx:para" mode="front"/>
<xsl:template match="ltx:para" mode="back"/>
<xsl:template match="ltx:toccaption"/>
<xsl:template match="ltx:classification"/>
<xsl:template match="ltx:classification" mode="back"/>
<xsl:template match="ltx:classification" mode="front"/>
<xsl:template match="ltx:note[@role='slugcomment']"/>
<xsl:template match="ltx:note[@role='slugcomment']" mode="front"/>
<xsl:template match="ltx:note[@role='slugcomment']" mode="back"/>
<xsl:template match="ltx:pagination"/>
<xsl:template match="ltx:pagination" mode="front"/>
<xsl:template match="ltx:pagination" mode="back"/>
<xsl:template match="ltx:toctitle"/>
<xsl:template match="ltx:toctitle" mode="front"/>
<xsl:template match="ltx:toctitle" mode="back"/>
<xsl:template match="ltx:appendix" mode="front"/>
<xsl:template match="ltx:appendix" mode="back"/>
<xsl:template match="ltx:appendix"/>
<xsl:template match="ltx:contact[@role='emailmark']" mode="front"/>
<xsl:template match="ltx:contact[@role='emailmark']" mode="back"/>
<xsl:template match="ltx:contact[@role='emailmark']"/>
<xsl:template match="ltx:contact[@role='institutemark']" mode="front"/>
<xsl:template match="ltx:contact[@role='institutemark']" mode="back"/>
<xsl:template match="ltx:contact[@role='institutemark']"/>
<xsl:template match="ltx:creator" mode="back"/>
<xsl:template match="ltx:creator"/>
<xsl:template match="ltx:contact[@role='affiliation']"/>
<xsl:template match="ltx:titlepage" mode="front"/>
<xsl:template match="ltx:titlepage" mode="back"/>
<xsl:template match="ltx:break" mode="front"/>
<xsl:template match="ltx:figure" mode="front"/>
<xsl:template match="ltx:figure" mode="back"/>
<xsl:template match="ltx:break" mode="back"/>
<xsl:template match="ltx:contact[@role='dedicatory']" mode="front"/>
<xsl:template match="ltx:contact[@role='dedicatory']" mode="back"/>
<xsl:template match="ltx:contact[@role='dedicatory']"/>
<xsl:template match="ltx:TOC"/>
<xsl:template match="ltx:TOC" mode="front"/>
<xsl:template match="ltx:TOC" mode="back"/>
<xsl:template match="ltx:abstract/ltx:figure" mode="front">
<xsl:message>figure in an abstract, fix this </xsl:message> <!-- TODO actualy fix it if it happens -->
</xsl:template>
<!-- hackish stuff for references -->
<xsl:template match="ltx:para/@xml:id"/>
<xsl:template match="ltx:para[@xml:id]/ltx:p">
<xsl:choose>
<xsl:when test="not(preceding-sibling::ltx:p)">
<p>
<xsl:attribute name="xml:id"><xsl:value-of select="../@xml:id"/></xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:when>
<xsl:otherwise>
<p>
<xsl:apply-templates select="@*|node()"/>
</p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="ltx:document/@xml:id"/>
<xsl:template match="ltx:document/@xml:id" mode="front"/>
<xsl:template match="ltx:document/@xml:id" mode="back"/>
<xsl:template match="ltx:document/@labels"/>
<xsl:template match="ltx:para/@xml:id" mode="front"/>
<xsl:template match="ltx:para[@xml:id]/ltx:p" mode="front">
<p>
<xsl:apply-templates select="@*|node()" mode="back"/>
</p>
</xsl:template>
<xsl:template match="@xml:id" mode="front">
<xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<xsl:template match="ltx:para/@xml:id" mode="back"/>
<xsl:template match="ltx:para[@xml:id]/ltx:p" mode="back">
<p>
<xsl:apply-templates select="@*|node()" mode="back"/>
</p>
</xsl:template>
<xsl:template match="@xml:id" mode="back">
<xsl:attribute name="id"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
<xsl:template match="@*"/>
<xsl:template match="@*" mode="back"/>
<xsl:template match="@*" mode="front"/>
<!-- end of hackish references stuff -->
<!-- font section -->
<xsl:template match="ltx:text[@font='medium']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='medium']" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='medium']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@fontsize='90%']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@fontsize='80%']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='upright']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='smallcaps']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='smallcaps']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='smallcaps']" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@class='ltx_markedasmath']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='sansserif']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='sansserif']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='sansserif']" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='serif']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='serif']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='serif']" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='typewriter']">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='typewriter']" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@font='typewriter']" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@xml:lang]">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@xml:lang]" mode="front">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@xml:lang]" mode="back">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@framed='underline']">
<underline>
<xsl:apply-templates select="@*|node()"/>
</underline>
</xsl:template>
<xsl:template match="ltx:text[@framed='underline']" mode="front">
<underline>
<xsl:apply-templates select="@*|node()" mode="front"/>
</underline>
</xsl:template>
<xsl:template match="ltx:text[@framed='underline']" mode="back">
<underline>
<xsl:apply-templates select="@*|node()" mode="back"/>
</underline>
</xsl:template>
<xsl:template match="ltx:text[@class]">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text[@class]" mode="front">
<xsl:apply-templates select="@*|node()" mode="front"/>
</xsl:template>
<xsl:template match="ltx:text[@class]" mode="back">
<xsl:apply-templates select="@*|node()" mode="back"/>
</xsl:template>
<xsl:template match="ltx:text">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text" mode="back">
<xsl:apply-templates mode="back" select="@*|node()"/>
</xsl:template>
<xsl:template match="ltx:text" mode="front">
<xsl:apply-templates mode="back" select="@*|node()"/>
</xsl:template>
<!-- Templates to make things more convenient -->
</xsl:stylesheet>