Zählerfehler nur in der Align-Umgebung?

Zählerfehler nur in der Align-Umgebung?

Ich arbeite derzeit an einer Art Lehrbuch für Japanisch-Mathematik-Lernende. Dann habe ich ein Zählermakro wie unten beschrieben erstellt.

Soweit ich weiß, funktioniert es in einer normalen Umgebung einwandfrei. Aber sobald ich es in eine Align-Umgebung setze, funktioniert es nicht mehr richtig. Ich glaube, es wird doppelt gezählt. Wenn ich beispielsweise \utoi dreimal verwende, beginnt es mit dem vierten Buchstaben.

Ich wäre sehr dankbar, wenn das jemand beheben könnte. Vielen Dank im Voraus.

\documentclass[fleqn, uplatex]{jsarticle}
\usepackage{amsmath}
\global\newcount\kAnAc
\def\Cleariroha{\kAnAc=0}
\Cleariroha
\makeatletter
\def\iroha{\@ifnextchar [{\K@N@@}{\K@N@}}
\def\K@N@{%
 \global\advance\kAnAc\@ne%
 \ifcase\kAnAc ×\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or ×\fi%
}
\def\K@N@@[#1]{%
 \batchmode%
 \ifcase\ref{#1} ×\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or ×\fi%
\errorstopmode}%
\def\Klabel#1{\@bsphack
  \protected@write\@auxout{}%
         {\string\newlabel{#1}{{\the\kAnAc}{\thepage}}}%
  \@esphack}
\makeatother
\newcommand{\utoi}[1]{\underset{\iroha}{\underline{#1}}}
\begin{document}
$\utoi{3}$, $\utoi{5}$
\Cleariroha
\begin{align*}
    y&=\utoi{a}x+\utoi{b}\\
    &=\utoi{5}x+\utoi{4}
\end{align*}
\end{document}

Nur für den Fall: Um die japanische Sprache in einer TeX-Datei auszuführen, müssen Sie die folgende Datei als „latexmkrc“ erstellen.

$latex = 'uplatex';
$bibtex = 'upbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$pdf_mode = 3; 

Antwort1

Hat nichts damit zu tun, aber tun Sie es nicht. \global\newcount\kAnAcEs ist reiner Zufall, dass \globalkein Fehler auftritt. Es macht keine Zuweisung global, die nicht bereits global ist.

AMS-Ausrichtungen werden zweimal ausgewertet, um die verschiedenen Ausrichtungsbreiten vor der endgültigen Einstellung zu messen. Das Paket speichert und stellt alle LaTeX-Zähler wieder her, um zu verhindern, dass sie doppelt hochgezählt werden. Dies geschieht jedoch nicht mit Zählern niedrigerer Ebene, die mit zugewiesen wurden \newcount.

So können Sie ersetzen

\global\newcount\kAnAc

von

\newcounter{kAnAc}

Und

\global\advance\kAnAc\@ne%
 \ifcase\kAnAc

von

\stepcounter{kAnAc}%
 \ifcase\value{kAnAc}%

Alternativ können Sie den Code so belassen, wie Sie ihn haben, aber nur beim Messdurchgang inkrementieren:

\ifmeasuring@
  \global\advance\kAnAc\@ne
\fi

Antwort2

Bei mehrzeiligen Anzeigen brauchen Sie den Zähler nur einmal weiterzuschalten, da amsmathzwei Durchläufe über das Material erfolgen.

Dies kann durch Prüfen erfolgen, ob \ifmeasuring@wahr oder falsch ist. Sie müssen die Schritte nur ausführen, wenn falsch ist, sodass \utoies auch innerhalb funktioniert equation, wo die Messung nicht durchgeführt wird. Da Kanas die gleiche Breite haben, sollte dies kein großes Problem sein. Um die möglichen Probleme zu beheben, habe ich auch im Fall 0 \irohaeine Rückgabe vorgenommen, was nur geschieht, wenn Sie dies tun und das Label noch nicht aufgelöst wurde (in diesem Fall wird 0 zurückgegeben).\iroha[label]\getrefnumber

Ich schlage auch eine andere Möglichkeit vor, mit der Anzeige von Kanas ohne den schrecklichen \batchmodeTrick zurechtzukommen.

\documentclass[fleqn, uplatex]{jsarticle}
\usepackage{amsmath}
\usepackage{refcount}

\makeatletter
\newcommand{\K@N@numbering}[1]{%
  \ifcase#1\relax
    イ\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or
   ヌ\or ル\or ヲ\or ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or
   ネ\or ナ\or ラ\or ム\or ×\fi
}
\newcounter{kAnAc}
\newcommand\Cleariroha{\setcounter{kAnAc}{0}}
\Cleariroha

\makeatletter
\newcommand{\iroha}[1][]{%
  \if\relax\detokenize{#1}\relax
    % no optional argument
    \ifmeasuring@\else\stepcounter{kAnAc}\fi
    \K@N@numbering{\value{kAnAc}}%
  \else
    \K@N@numbering{\getrefnumber{#1}}%
  \fi
}
\def\Klabel#1{\@bsphack
  \protected@write\@auxout{}%
         {\string\newlabel{#1}{{\the\kAnAc}{\thepage}}}%
  \@esphack}
\makeatother

\newcommand{\utoi}[1]{\underset{\iroha}{\underline{#1}}}

\begin{document}

$\utoi{3}$, $\utoi{5}$
\Cleariroha
\begin{align*}
    y&=\utoi{a}x+\utoi{b}\\
    &=\utoi{5}x+\utoi{4}
\end{align*}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen