
Estoy convirtiendo grandes documentos matemáticos de látex a html + mathml. En algunas situaciones, he dado una forma incorrecta al archivo como salida. Un ejemplo es el siguiente.
El archivo principalprueba.texes:
\documentclass{article}
\begin{document}
\[
X \mbox{ is \emph{dense in $Y$}}
\]
\end{document}
La configuración minimalistamiconfig.cfgel archivo es:
\Preamble{mathml}
\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
\begin{document}
\EndPreamble
Ahora, ejecutando el comandohtlatex prueba.tex myconfig.cfgObtengo (después de eliminar el preámbulo y reorganizar el código):
<body>
<div class="par-math-display"><!--l. 5--><math
xmlns="http://www.w3.org/1998/Math/MathML"
display="block" >
<mrow>
<mi>X</mi>
<mstyle class="mbox">
<!--error--> <mtext> is 
<!--error--> <em>dense in 
<!--error--> </mtext>
<mstyle class="math">
<mi>Y</mi>
</mstyle>
<mtext>
<!--error--> </em>
</mtext></mstyle>
</mrow></math></div>
<!--l. 7--><p class="nopar" >
</body>
En esta salida, las etiquetas de apertura y cierre detextomyellosque he resaltado están intercalados en lugar de anidados.
Permítanme agregar que modificar el código de látex no es una opción (debido a los grandes fragmentos de código). Sin embargo, lo que es posible sería redefinir \emph (sin embargo, las diversas redefiniciones que probé no cambiaron el resultado).
Respuesta1
Editar:
Aquí hay una configuración actualizada que realmente produce <mtext>
un elemento cuando se usa el comando de formato:
\Preamble{xhtml,mathml,fonts}
\catcode`\:=11
\makeatletter
\newcommand\providemtextclass[1]{%
\Configure{@mtext}{#1}%
\HCode{</mtext>}\ht:special{t4ht@,}\HCode{<mtext \a:@mtext>}\ht:special{t4ht@,&\#x00A0;}%
}
\catcode`\:=12
\makeatother
\begin{document}
\Configure{emph} {\ifmathml\providemtextclass{class="emph" mathvariant="italic" }\else \HCode{<em>}\NoFonts\fi}{\ifmathml\else\EndNoFonts \HCode{</em>}\fi}
\EndPreamble
El \providemtextclass
comando es un poco complicado. Define atributos que deben usarse en los siguientes <mtext>
elementos. Necesita cerrar lo realmente abierto <mtext>
. Los \ht:special
comandos proporcionan instrucciones especiales para tex4ht
. Se \ht:special{t4ht@,&\#x00A0;}
utiliza para reemplazar espacios con espacios irrompibles. Es necesario en el texto MathML, porque de lo contrario las palabras colapsarían. Pero debe desactivarse cuando se imprimen etiquetas, porque produciría una estructura XML no válida. Se puede desactivar usando \ht:special{t4ht@,}
.
El resultado renderizado:
y MatemáticasML:
<math display='block' xmlns='http://www.w3.org/1998/Math/MathML'><mrow>
<mi>X</mi><mstyle class='mbox'><mtext> is </mtext><mtext class='emph' mathvariant='italic'>dense in </mtext><mstyle class='math'><mi>Y</mi> </mstyle><mtext class='emph' mathvariant='italic'></mtext></mstyle>
</mrow></math>
Respuesta original:
La configuración del \emph
comando debe tener en cuenta la situación cuando se usa dentro de matemáticas; de lo contrario, no será válido MathML
.
Aquí está la versión modificada de la configuración proporcionada en mathml.4ht
:
\Preamble{xhtml,mathml,fonts}
\Configure{emph}
{\ifmathml \Configure{@mtext}{ class="emph"
mathvariant="italic" }%
\else \HCode{<em>}\NoFonts\fi}
{\ifmathml\else\EndNoFonts \HCode{</em>}\fi}
\begin{document}
\EndPreamble
Los comandos de texto básicos producen <mtext>
elementos en MathML, es posible configurar sus atributos usando \Configure{@mtext}
. Esta configuración se utiliza dentro de entornos matemáticos gracias a \ifmathml
swich. En texto normal, <em>
se utiliza.
Esto produce el siguiente resultado:
<div class='par-math-display'><!-- l. 4 --><math xmlns='http://www.w3.org/1998/Math/MathML' display='block'><mrow>
<mi>X</mi><mstyle class='mbox'><mtext> is dense in </mtext><mstyle class='math'><mi>Y</mi> </mstyle><mtext class='emph' mathvariant='italic'></mtext></mstyle>
</mrow></math></div>
Puedes ver que hay un error <mtext class='emph' mathvariant='italic'></mtext>
. Es causada por incluirse $Y$
al \emph
mando. Esta versión funciona mejor:
X \mbox{ is \emph{dense in }$Y$}
Respecto a tu última pregunta. Tenemos un rastreador de errores y un repositorio de código fuente enPuszcza. El error se soluciona directamente en las fuentes y las actualizaciones van directamente a las distribuciones TeX.
Gran parte de las preguntas sobre TeX.sx en realidad no son errores, sino más preguntas sobre cómo modificar la salida según las necesidades particulares del usuario, por lo que realmente no tiene sentido proporcionarlas como un paquete. Sería bueno si proporcionáramos una lista de configuraciones y problemas comunes, el hecho es que también necesitamos actualizar la documentación. Empecé atrabajar en ello, pero el progreso es lento. Para mí es mucho más fácil escribir código que prosa, especialmente porque no soy un hablante nativo de inglés. También estoy ocupado con las nuevas versiones de make4ht y tex4ebooks, así que no encuentro tiempo para la documentación.