
저는 현재 일본 수학 학습자를 위한 일종의 교과서를 만드는 작업을 하고 있습니다. 그런 다음 아래와 같이 카운터 매크로를 만들었습니다.
내가 아는 한, 일반적인 환경에서는 잘 작동하는 것 같습니다. 하지만 일단 정렬 환경에 넣으면 더 이상 올바르게 작동하지 않습니다. 나는 그것이 이중으로 계산되었다고 생각합니다. 예를 들어, \utoi를 세 번 사용하면 네 번째 문자부터 시작됩니다.
누구든지 고쳐주시면 정말 감사하겠습니다. 미리 감사드립니다.
\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}
만약을 대비해서 TeX 파일에서 일본어를 실행하려면 다음 파일을 "latexmkrc"로 만들어야 합니다.
$latex = 'uplatex';
$bibtex = 'upbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$pdf_mode = 3;
답변1
관련이 없지만 수행하지 마십시오. 오류가 발생하지 않고 아직 전역이 아닌 할당을 전역으로 만들지 않는 \global\newcount\kAnAc
것은 우연입니다 .\global
AMS 정렬은 최종 설정 전에 다양한 정렬 너비를 측정하기 위해 두 번 평가됩니다. 패키지는 모든 LaTeX 카운터를 저장하고 복원하여 이중 증가를 방지하지만 \newcount
.
그래서 당신은 교체 할 수 있습니다
\global\newcount\kAnAc
~에 의해
\newcounter{kAnAc}
그리고
\global\advance\kAnAc\@ne%
\ifcase\kAnAc
~에 의해
\stepcounter{kAnAc}%
\ifcase\value{kAnAc}%
또는 코드를 그대로 유지하되 측정 패스에서만 증가시키십시오.
\ifmeasuring@
\global\advance\kAnAc\@ne
\fi
답변2
amsmath
여러 줄 디스플레이에서는 재료를 두 번 통과하므로 카운터를 한 번만 전진시켜야 합니다 .
\ifmeasuring@
이는 참인지 거짓인지 확인하여 수행할 수 있습니다 . false일 때만 스테핑을 해야 하므로 측정이 이루어지지 않는 \utoi
내부에서도 동작합니다 . equation
Kana의 너비는 동일하므로 이는 큰 문제가 되지 않습니다. 가능한 문제를 해결하기 위해 0의 경우에도 \iroha
반환 했습니다. 이는 반환을 수행 하고 레이블이 아직 해결되지 않은 경우에만 발생합니다(이 경우 0을 반환함).イ
\iroha[label]
\getrefnumber
나는 또한 끔찍한 속임수 없이 Kana의 표시에 대처할 수 있는 다른 방법을 제안합니다 \batchmode
.
\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}