
Estou convertendo grandes documentos matemáticos de látex para html + mathml. Em algumas situações, formatou o arquivo incorretamente como saída. Um exemplo é o seguinte.
O arquivo principalteste.texé:
\documentclass{article}
\begin{document}
\[
X \mbox{ is \emph{dense in $Y$}}
\]
\end{document}
A configuração minimalistameuconfig.cfgarquivo é:
\Preamble{mathml}
\Configure{emph}{\ifvmode\ShowPar\fi\HCode{<em>}}{\HCode{</em>}}
\begin{document}
\EndPreamble
Agora, executando o comandohtlatex test.tex meuconfig.cfgRecebo (depois de remover o preâmbulo e reorganizar o 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>
Nesta saída, as tags de abertura e fechamento detexto meelesque destaquei são intercalados em vez de aninhados.
Deixe-me acrescentar que modificar o código látex não é uma opção (devido a grandes pedaços de código). No entanto, o que é possível seria redefinir \emph (no entanto, as várias redefinições que tentei não alteraram a saída).
Responder1
Editar:
Aqui está a configuração atualizada que realmente produz <mtext>
o elemento quando o comando de formatação é usado:
\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
O \providemtextclass
comando é um pouco complicado. Ele define atributos que devem ser usados nos seguintes <mtext>
elementos. Ele precisa fechar o arquivo <mtext>
. Os \ht:special
comandos fornecem instruções especiais para tex4ht
. O \ht:special{t4ht@,&\#x00A0;}
é usado para substituir espaços por espaços inquebráveis. É necessário em texto MathML, porque de outra forma as palavras entrariam em colapso. Mas deve ser desativado quando as tags forem impressas, pois produziria uma estrutura XML inválida. Ele pode ser desativado usando \ht:special{t4ht@,}
.
O resultado renderizado:
e MathML:
<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>
Resposta original:
A configuração do \emph
comando precisa levar em consideração a situação quando ele é usado dentro da matemática, caso contrário, será inválido MathML
.
Aqui está a versão modificada da configuração fornecida em 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
Os comandos básicos de texto produzem <mtext>
elementos em MathML, é possível definir seus atributos usando \Configure{@mtext}
. Esta configuração é usada em ambientes matemáticos graças ao \ifmathml
swich. No texto normal, <em>
é usado.
Isso produz o seguinte 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>
Você pode ver que há um espúrio <mtext class='emph' mathvariant='italic'></mtext>
. É causado pela inclusão $Y$
no \emph
comando. Esta versão funciona melhor:
X \mbox{ is \emph{dense in }$Y$}
Em relação à sua última pergunta. Temos um rastreador de bugs e um repositório de código-fonte emPuszcza. Os erros são corrigidos diretamente nas fontes e as atualizações vão diretamente para as distribuições TeX.
Grande parte das perguntas no TeX.sx não são realmente bugs, mas mais perguntas sobre como modificar a saída para necessidades específicas do usuário, então não faz sentido fornecê-las como um pacote. Seria bom se fornecêssemos uma lista de problemas e configurações comuns, o fato é que também precisamos atualizar a documentação. Eu comecei atrabalhe nisso, mas o progresso é lento. É muito mais fácil escrever código do que prosa para mim, especialmente porque não sou falante nativo de inglês. Também estou ocupado com as novas versões do make4ht e do tex4ebooks, então não consigo encontrar tempo para a documentação.