„\end trat auf, als \ifnum ... unvollständig war“ sowohl bei tikz als auch bei luatexja

„\end trat auf, als \ifnum ... unvollständig war“ sowohl bei tikz als auch bei luatexja

Der folgende MCE:

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

wird ohne Auffälligkeiten kompiliert, aber wenn das luatexjaPaket geladen wird, .logenthält die Datei (seltsamerweise weder eine Warnung noch einen Fehler):

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

Wer ist der Täter:

  • das luatexjaPaket?
  • der Code tikz{\coordinate[yshift=\ht\strutbox];}, dessen Fehlerhaftigkeit durch luatexja? offenbart wird.

Bearbeiten

Hier ist ein (Auszug aus einem) Beispiel für den fehlgeschlagenen Einsatz in der Praxis (das eigentliche Dokument enthält Bewertungen sowohl von - ProfCollegeals auch hanziboxvon -Paketen):

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

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

Antwort1

Dies funktioniert, aber die resultierende Länge ist ziemlich unvorhersehbar, da sie von der aktuellen Textrichtung abhängt.

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

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

\end{document}

Dies funktioniert auch, wenn \strutboxnur ein Box-Registername ist, da dieser nicht erweiterbar ist und daher \expandedzurückgibt \strutbox.

Damit dies funktioniert ProfCollege, können Sie die Makros im Paket patchen, die die Konstruktion verwenden.

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

Der einzige Befehl auf Benutzerebene, der verwendet wird, \ht\strutboxist \FlecheLineaireH, seltsamerweise ohne \the, aber ich habe das Beispiel aus der Paketdokumentation kopiert und es scheint zu funktionieren.

Der VorherigeVorbehaltgilt weiterhin: wer andere Textrichtungen verwendet als von erlaubt luatexja, bekommt Probleme.

Bildbeschreibung hier eingeben

verwandte Informationen