“\end ocurrió cuando \ifnum... estaba incompleto” tanto con tikz como con luatexja

“\end ocurrió cuando \ifnum... estaba incompleto” tanto con tikz como con luatexja

El siguiente MCE:

\documentclass{article}
\usepackage{tikz}
% \usepackage{luatexja}
\begin{document}
\tikz{\coordinate[yshift=\the\ht\strutbox];}
\end{document}

se compila sin nada sospechoso pero, si el luatexjapaquete está cargado, el .logarchivo contiene (curiosamente no es ni una advertencia ni un error):

(\end occurred when \ifnum on line 25 was incomplete)
(\end occurred when \if on line 25 was incomplete)

¿Quién es el culpable?

  • el luatexjapaquete ?
  • el código tikz{\coordinate[yshift=\ht\strutbox];}, cuya naturaleza errónea se revela por luatexja?

Editar

Aquí hay un (extracto de un) ejemplo de uso fallido en el mundo real (el documento real contiene revisiones de ambos ProfCollegepaquetes hanzibox):

\documentclass{article}
\usepackage{ProfCollege}
\usepackage{luatexja}
\begin{document}
\Pourcentage[Calculer]{15}{39}

\verb+\hanzibox*[frametype=none]{我}[wo3][moi]\\[1ex]+
\end{document}

Respuesta1

Esto funciona, pero la longitud que obtienes es bastante impredecible, porque depende de la dirección actual del texto.

\documentclass{article}
\usepackage{tikz}
\usepackage{luatexja}
\begin{document}

\tikz{\coordinate[yshift=\the\expandafter\ht\expanded{\strutbox}];}

\end{document}

También funciona cuando \strutboxes solo el nombre de un registro de cuadro, porque no se puede expandir y, por lo tanto, \expandeddevuelve \strutbox.

Para que esto funcione ProfCollege, puede parchear las macros en el paquete que utilizan la construcción

\documentclass{article}
\usepackage{ProfCollege}
\usepackage{luatexja}
\usepackage{etoolbox}

% the abstract version of the above
\newcommand{\getstrut}[1]{%
  \the\expandafter#1\expanded{\strutbox}%
}
% the internal commands of ProfCollege to patch
\patchcmd{\TikzPH}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPHD}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPHD}{\the\dp\strutbox}{\getstrut\dp}{}{}
\patchcmd{\TikzPB}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzPBD}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzPBD}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzRH}{\the\ht\strutbox}{\getstrut\ht}{}{}
\patchcmd{\TikzRB}{\the\dp\strutbox}{\getstrut\dp}{}{}
% the user level command to patch
\patchcmd{\FlecheLineaireH}{\ht\strutbox}{\getstrut\ht}{}{}

\begin{document}

\Pourcentage[Calculer]{15}{39}

\verb+\hanzibox*[frametype=none]{我}[wo3][moi]\\[1ex]+

\begin{center}
\Propor[
  Stretch=1.25,
  Math,
  GrandeurA=Hauteur $h$ (cm),
  GrandeurB=\begin{tabular}{c}Volume (en cm$^3$) d'un cylindre\\ de rayon \Lg{5} et
            de hauteur $h$\end{tabular},
  Largeur=0.75cm
]{2/$50\pi$,3/$75\pi$,5/}
\end{center}
\FlecheLineaireH{1}{2}{3}{$+$}
\FlecheLineaireB{1}{2}{3}{$+$}

\end{document}

El único comando de nivel de usuario que utiliza \ht\strutboxes \FlecheLineaireH, bastante extraño, sin \the, pero copié el ejemplo de la documentación del paquete y parece funcionar.

El anterioradvertenciatodavía se aplica: si usa diferentes direcciones de texto según lo permitido por luatexja, tendrá problemas.

ingrese la descripción de la imagen aquí

información relacionada