texjporg / platex

pLaTeX community edition
BSD 3-Clause "New" or "Revised" License
49 stars 8 forks source link

plext の \@Kanji #33

Closed aminophen closed 7 years ago

aminophen commented 7 years ago

abenori さんからです。

漢数字をラベルに使った二段階の enumerate を定義すると

\documentclass{tarticle}
\renewcommand{\theenumi}{\Kanji{enumi}}
\begin{document}

\begin{enumerate}
\item ほげ
\begin{enumerate}
\item ふが
\end{enumerate}
\end{enumerate}

\end{document}

がエラーになります。

! Use of \@item doesn't match its definition.
\@ifnextchar ... \reserved@d =#1\def \reserved@a {
                                                  #2}\def \reserved@b {#3}\f...
l.8 \item ふ
            が

もっと簡単な例だと

\documentclass{article}
\usepackage{plext}
\begin{document}
\section{test}
\Kanji{section}6は
\end{document}

などで、引数でない後続の 6 まで漢数字になります。

\def\@Kanji#1{\expandafter\kansuji\number #1}

の最後の #1 の後に \relax または半角スペースを足せばよいようです。

(ついでにいうと plext.dtx の \Alpha は \Alph のタイポですね。)

aminophen commented 7 years ago

\relax を足す方法だと、先日の #31 のときのように目次で後ろの空白が喰われるみたいです。半角スペースの方だと喰われないのでそちらの方がいいのかな?と考え中です。

aminophen commented 7 years ago

ためしに半角スペースを足してみました。(明らかにバグなので master ブランチ。)

\def\@Kanji#1{\expandafter\kansuji\number #1 }
wtsnjp commented 7 years ago

TeX 言語の <number>(より正確には <integer denotation>)は <one optional space> を取れるので半角スペースを入れても構わないはずです.

wtsnjp commented 7 years ago

しかし,疑問なのはそもそもなぜ \@Kanji\number を噛ませる実装になっているかです.少なくとも plext.sty 内では \@Kanji\Kanji 内でしか用いられておらず,必ず \c@<foo> というカウンタレジスタを引数として受け取るので \number を噛ませる必要はありません.

\@roman は latex.ltx 内でシンプルに

\def\@roman#1{\romannumeral #1}

と実装されています.これに倣うのであれば \@Kanji

\def\@Kanji#1{\kansuji #1}

で十分なはずです.

aminophen commented 7 years ago

TeX 言語の (より正確には )は を取れるので半角スペースを入れても構わないはずです.

ありがとうございます。私も同じ考えです。

疑問なのはそもそもなぜ \@Kanji が \number を噛ませる実装になっているかです.

私もこれは疑問を持っています。一つの可能性としては \kansuji がプリミティブから外された時期があったことです。今でこそ \kansuji は \romannumeral と \number と同様の「整数を文字列に変換するプリミティブ」ですが、そうでなかった時期に \number が必要だったのでは…というあくまで推測です。

aminophen commented 7 years ago

もし上記が正しいならば、プリミティブとして定着してから既に十年以上たっていることを加味して \@roman に倣ったシンプルな定義の方がよいという主張は妥当で、好ましいという気もします。他の方々からも別の理由が出ないようであれば変更しましょう。

aminophen commented 7 years ago

\@roman に倣ったシンプルな定義

6166151 でシンプルな定義に変更しました。テストケース tests/plext_kanji.tex も問題ありません。