Orden incorrecto de etiquetas en mathml producido con htlatex

Orden incorrecto de etiquetas en mathml producido con htlatex

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>&#x00A0;is&#x00A0;
<!--error-->   <em>dense&#x00A0;in&#x00A0;
<!--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 \providemtextclasscomando es un poco complicado. Define atributos que deben usarse en los siguientes <mtext>elementos. Necesita cerrar lo realmente abierto <mtext>. Los \ht:specialcomandos 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:

ingrese la descripción de la imagen aquí

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 \emphcomando 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 \ifmathmlswich. 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 \emphmando. 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.

información relacionada