expl3 の alignat 環境で実際のテキストが正しくありません

expl3 の alignat 環境で実際のテキストが正しくありません

環境を再定義して、alignat数式のタグ付けを自動的に行い、この数式をタグ P の実際のテキストとして挿入したいと考えています。正常に動作しますが、expl3構文をオンにすると実際のテキストが取得されるのはなぜでしょうかxs_StrFindGrou。2 番目の質問は、パッケージを使用せずに機能のみを使用して、数式を段落の実際のテキストとして設定するための余分なコマンドをすべて削除するにはxstringどうすればよいかexpl3ということです。ご協力いただき、ありがとうございます。

\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}

答え1

#1your の の後の部分が amsmath コマンドによって 2 回処理されるため、\tagstructend からエラーが発生します。測定ステップ中にこれを抑制するには、\doactualtextを使用できます。\ifmeasuring@

スペースをチルダに置き換えなかったため、間違った代替テキストが取得されます。

\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}

あなたの代わりの人が何をするのか全く分かりません。

関連情報