Quiero redefinir alignat
el entorno para etiquetar automáticamente las fórmulas e insertar como texto real de la etiqueta P estas fórmulas. Funciona bien, pero ¿por qué si activo expl3
la sintaxis obtengo el texto real xs_StrFindGrou
? La segunda pregunta, ¿cómo puedo eliminar todos los comandos adicionales para configurar la fórmula como texto real del párrafo sin usar xstring
el paquete sino solo expl3
las funciones? Gracias a todos por su ayuda.
\documentclass{article}
\usepackage{tagpdf,amsmath,xstring}
\tagpdfsetup{tabsorder=structure,uncompress,activate-all,interwordspace=true,tagunmarked=false}
\tagpdfifpdftexT
{
\pdfcompresslevel=0
%set language / can also be done with hyperref
\pdfcatalog{/Lang (en-US)}
\usepackage[T1]{fontenc}
\input glyphtounicode
\pdfgentounicode=1
}
\tagpdfifluatexT
{
%set language / can also be done with hyperref
\pdfextension catalog{/Lang (en-US)}
\usepackage{fontspec}
\newfontface\zerowidthfont{freeserif}
}
\pagestyle{empty}
\ExplSyntaxOn
\makeatletter
\long\def\doactualtext#1{
\def\@mltext{\detokenize\expandafter{#1}}
\def\@mltexttmp{}
\StrBehind[5]{\@mltext}{ }[\@mltexttmp]
\StrGobbleRight{\@mltexttmp}{1}[\@mltext]
\tagstructbegin{tag=P,actualtext-o=\detokenize\expandafter{\@mltext}}
\tagmcbegin{tag=P}
#1
\tagmcend
\tagstructend
}
\renewenvironment{alignat}{
\collect@body\doactualtext\space
\start@align
\z@\st@rredfalse
}{
\endalign
}
\makeatother
\ExplSyntaxOn
\begin{document}
\tagstructbegin{tag=Document}
\begin{alignat}
10xy^2+15x^2y-5xy7 & = 5\left(2xy^2+3x^2y-xy7\right) = \\
& = 5x\left(2y^2+3xy-y7\right) = \\
& = 5xy\left(2y+3x-7\right)
\end{alignat}
%\tagstructend Why i get an error,that there is no structure on the stack?
\end{document}
Respuesta1
Obtiene un error de \tagstructend ya que la parte posterior a #1
su \doactualtext
es procesada dos veces por los comandos amsmath. Puede utilizar \ifmeasuring@
para suprimir esto durante el paso de medición.
Obtienes el texto alternativo incorrecto porque no reemplazaste el espacio con la tilde.
\documentclass{article}
\usepackage{tagpdf,amsmath,xstring}
\tagpdfsetup{tabsorder=structure,uncompress,activate-all,interwordspace=true,tagunmarked=false}
\tagpdfifpdftexT
{
\pdfcompresslevel=0
%set language / can also be done with hyperref
\pdfcatalog{/Lang (en-US)}
\usepackage[T1]{fontenc}
\input glyphtounicode
\pdfgentounicode=1
}
\tagpdfifluatexT
{
%set language / can also be done with hyperref
\pdfextension catalog{/Lang (en-US)}
\usepackage{fontspec}
\newfontface\zerowidthfont{freeserif}
}
\pagestyle{empty}
\ExplSyntaxOn
\makeatletter
\long\def\doactualtext#1{
\def\@mltext{\detokenize\expandafter{#1}}
\def\@mltexttmp{}
\StrBehind[5]{\@mltext}{~}[\@mltexttmp]
\StrGobbleRight{\@mltexttmp}{1}[\@mltext]
\tagstructbegin{tag=P,actualtext-o=\detokenize\expandafter{\@mltext}}
\tagmcbegin{tag=P}
#1
\ifmeasuring@\else
\tagmcend
\tagstructend
\fi
}
\renewenvironment{alignat}{
\collect@body\doactualtext\space
\start@align
\z@\st@rredfalse
}{
\endalign
}
\makeatother
\ExplSyntaxOn
\begin{document}
\tagstructbegin{tag=Document}
\begin{alignat}
10xy^2+15x^2y-5xy7 & = 5\left(2xy^2+3x^2y-xy7\right) = \\
& = 5x\left(2y^2+3xy-y7\right) = \\
& = 5xy\left(2y+3x-7\right)
\end{alignat}
\tagstructend
\end{document}
No tengo idea de qué se supone que deben hacer tus reemplazos.