相互参照、\pageref \label でページ数の漢字表示について

相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
返信数: 16
表記については 2021/01/11 に本田様にmacro をご提示していただき、とても具合よく、利用させていただいておりました。ところが最近、関連する仕様が変わったのかもしれませんが、表示がおかしいのです。私の使用方法に問題あり、かもしれませんが。教えてください。 ① 教えていただいたmacro % ----- 2021/01/11 honda: qa_3009 ----- % cf. 2017/09/27 plcore.dtx v1.2s: \@setref: 相互参照のスペースファクターを補正. \makeatletter \def\page@setref#1#2#3{% \ifx#1\relax \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ??}% \@latex@warning{Reference `#3' on page \thepage \space undefined}% \else \kansuji\expandafter#2#1\protect\@setref@{}% change \null to \protect\@setref@{} \fi} \def\pageref#1{\expandafter\page@setref\csname r@#1\endcsname \@secondoftwo{#1}} \makeatother ②不具合の内容 例えば、 16ページにある、春草\label{poem;01}とラベル付けしたのを、注(\pageref{poem:01}ページ参照) というふうにページ参照しますと、 以前は正しく、 注(十六ページ参照)と表示されたのに、 最近はいつの間に、注(十六enumi.4ページ参照)となります。 enumi.4 がなぜか紛れ込んで邪魔なのです。 質問の要領が悪くて、的を得ていないとおもいますが、 以前のような表示に戻したいのです。 win11, texlive2024,jlreqを使用。縦書きuplatex です。
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 和田 勇 の投稿
肝心のマクロ部分が、改行なのでの影響で判読できないため、
以前のやり取りで https://okumuralab.org/tex/mod/forum/discuss.php?d=3009#p17800 の ut さんの記事を利用したサンプルを
作成してみました。

それを使った限りでは、懸念される障害は見受けられませんでした。(macOS でコンパイル)

ですので、これを使った時の、ログ及び .pdf を添付ファイルでアップロードしていただけませんか?

PS
サンプルソースや生成されたものもてん王しますが、
私は texlive を /opt/texlive にインストールしているので、.log はそれを考慮してください。
和田 勇 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
済みません、判読できないものを掲載するなんて!
同じmacroですね。以前は正常に表示できていたものなんですが。
原因が全く分からずに苦慮しているところです。
全ての\pageref に emuni.4 という奇妙な表示があります。はて?
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 和田 勇 の投稿

和田のサンプルソースでも emuni.4 が出てしまうのですね。

お手数ですが、その時作成された .log をアップしていただけませんか?

TEXMFLOCAL や TEXMFHOME などにゴミが混入しているのかもしれませんので 当方の環境で作成された .log と比較したいので、お願いします。

追伸:土曜日は、所用で朝から午後一杯は屋外の作業のため応対は悪くなると思います。

和田 勇 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 和田 勇 の投稿

本田さんのフォローと前後して、スレッドがぐちゃぐちゃになりそうな気がしますが、ちょっと追跡した情報をお伝えしておきます。

numumi.4 が生成されてしまうようなのでenumerate環境を利用するよう追加してみたところ mr2h さんの報告する不具合を確認しました。

添付のソース 24335-with-enumerate.texでご確認お願い致します。

今の所、jreq.cls なソースを uplatex で処理すると少なくとも再現するようです。

力不足で、これ以上の追跡はできないので、識者の方、フォローお願いします。

念の為、生成された .log .pdf .aux も添付します。

なお、追跡していただく際の読み替えの煩わしさを軽減する目的で、 .log は標準的な /usr/locat/texlive のパスに書き換えておきました。

和田 勇 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
和田さんのsample source では、障害はでておりません。
なので、.log は添付できませんので、ご了解を!
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 本田 知亮 の投稿
和田さんの出された当時のサンプルでは現象が再現しませんが,
このあたりはこの数年で大幅な仕様変更があったので,
実際はあのマクロではアウトです.

\pagerefがxparse系のマクロで定義されるようになって
完全展開できなくなって問題が起きたなんて話題もありました.

たぶん,mr2hさんは入れ子になっていないenumerate環境の四番目の\itemに\labelをつけて
それに対して\pagerefで参照しているのではないですか?


\documentclass[tate,uplatex,paper=b5j,dvipdfmx]{jlreq}
%\usepackage{plext}

\makeatletter
\def\page@setref#1#2#3{%
\ifx#1\relax
\protect\G@refundefinedtrue
\nfss@text{\reset@font\bfseries ??}%
\@latex@warning{Reference `#3' on page \thepage \space
undefined}%
\else
\kansuji\expandafter#2#1\@empty\@empty\@empty\protect\@setref@{}%%

\def\@kernel@spageref#1{\expandafter\page@setref\csname r@#1\endcsname
\@secondoffive{#1}}
\let\@kernel@pageref\@kernel@spageref

\makeatother


\begin{document}

\begin{enumerate}
\item\label{poem:01}
春草とラベル付けしたのを、注(\pageref{poem:01}ページ参照) というふうにページ参照
\end{enumerate}

\end{document}

\page@setrefの元の\@setrefのlatex.ltxでの新定義の意図が読み切れていない
(\@emptyが3つありますけどこれ不要?なんか修正漏れにも思える)ので
ひとまず,plcore.ltxで以前の\@setrefにあてたパッチを
今のlatex.ltxの\@setrefにあてて
今回の目的に合わせた\kansujiを追加しておきます.
#何かの意図で本当に\@emptyが3つ必要ならplcoreの方にも必要なはずで
#不具合が起こるケースがあるはずですが, \@secondoffiveがうまくやってくれてるはず

たぶんこれで期待通りの動きになるのではないかと思います.
なお,こういう書き換えは仕様変更に対応できないので要注意です.
本田 知亮 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 和田 勇 の投稿

本田さんの提示されたソースではなぜかコンパイルできない :-(

さて、mr2h さんから、問題となるソースを送っていただきました。

そのソースでは非標準パッケージや別途読み込み .pdf や画像が含まれているので そのまま提示はできませんが 4  となっている原因は、 ちょっと前に示した私の回答では一つでしたので enumi.1 でしたが、 別途入手したソースでは、enumerate 環境で \item を以下のように4つ利用しているので enumi.4 になっているのかなと思っています。

\begin{enumerate}
\item  釈清譚注解「王右丞集」(続国訳漢文大成本)昭和四年七月東京国民文庫刊行会刊
\item  鈴木豹軒校閲・喜多尾城南著「王維詩評釈」大正十二年十二月京都彙文堂刊
\item  小林太市郎著「王維の生涯と芸術」昭和十九年十二月大阪全国書房刊
\item  吉川幸次郎・三好達治共著「新唐詩選」(岩波新書)昭和二十七年八月東京岩波書店刊
\end{enumerate}

以上、参考になればと思います。

和田 勇 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 本田 知亮 の投稿
>本田さんの提示されたソースではなぜかコンパイルできない :-(

あれ?
よくコピペミスするので処理できているファイルとログを添付します.

ここ数年の仕様変更でいろいろありましたが
本人も忘れてたpagerefが出てくるとは.
本田 知亮 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 和田 勇 の投稿
了解、若干元のソースと差異はあるものの、再アップロードされたソースでは、コンパイルできました。ご安心ください。
(当方のミスかもしれれないのですが、今後検証される方は、本田さんの最後の添付ソースをベースに議論に参加してください。お願いします。)
本田 知亮 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
有難うございます。
本田さんの再提示されたmacroで、当面の私の問題は解決されました。
私はド素人の80歳超の高齢者でして、高齢の故で無くして元々の基礎力の欠乏のため、かかる問題の解決は独力ではかないません。
しかしながら、改善のための仕様変更はこの世界では当然のこと。都度都度、お力をお借りして解決するほか、ございません。
それにしても、この Forum は、私にような者にとっては必須不可欠な存在です。
和田さん、本田さん、奥村先生、有難うございます。
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
今度の現象は、win11のみならず、ubuntu22.04LTS でも MAC OSセコイアでも、すべてtexlive2024を使って、jlreqを使用した縦書きuplatexで、同様に発生し、また新macroの使用により解消されたことを、ご報告いたします。
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- ut の投稿
# 既に問題はご解決済みですので、遅れ馳せの蛇足ですが。
# 流れを乱さないように、ここにぶら下げさせていただきます。

私の手元のシステムは W32TeX [2020/07/19] と古いので、手元では
確認できないのですが、ltxref.dtx の現在のバージョンは:

 \ProvidesFile{ltxref.dtx}
             [2024/09/20 v1.1r LaTeX Kernel (Cross Referencing)]

なのですね。

> このあたりはこの数年で大幅な仕様変更があったので,

に当たる 2022 年以降の更新は:

 % \changes{v1.1p}{2022/04/12}{Add starred variants for the ref commands}
 
 % \changes{v1.1q}{2023/05/12}{(UFi)extended to store five arguments}
 % \changes{v1.1q}{2023/05/12}{(UFi)added a hook with argument}
 
 %  \changes{v1.1r}{2024/09/20}{set also \@currentHref}
 %  \changes{v1.1r}{2024/09/20}{provide a kernel copy \@kernel@refstepcounter}
 %  \changes{v1.1r}{2024/09/20}{add sockets}

となっていて、2022 年と 2023 年の変更の影響がかなり大きかった
んですよね(see also, LaTeX News Issue 35 & 37)。

それで、本田さんがおっしゃっている、

> pagerefがxparse系のマクロで定義されるようになって
> 完全展開できなくなって問題が起きたなんて話題もありました.

に該当するトピックは、確か、

 whichpageマクロが動きません
 2023年 02月 26日(日曜日) 16:48
 https://okumuralab.org/tex/mod/forum/discuss.php?d=3545

のことだったような気がします。
ut への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- mr2h の投稿
ltxref.dtx の現在のversion は、どのように調べたらよいでしょうか。私その辺は全然明るくないものですから。
mr2h への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 本田 知亮 の投稿
utさん
いつもフォローありがとうございます.
目次関係やラベルの引数が増えたり,xparse系のものになったり,
いろいろなものがrobustになったり,
個人的にはlatex.ltxの中にexpl3が現れたのが一番「おおっ!?」なことでした.
#NFSS2の大改修やhookはよくわかってないという認識

mr2hさん
>ltxref.dtx の現在のversion は、どのように調べたらよいでしょうか

texdoc source2e
とするとでてくるpdfを見るのが手っ取り早いのです.
これがLaTeX2eそのもののソースと解説です.
ただ。。。いわば「原典」なので結構つらい面があります.



本田 知亮 への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- Z. R. の投稿

(余談の続きです)

「将来に同種の問題が発生する可能性が残っている」
以上は「問題が解決した」とはいえない気もチョットするのですが 、それは措いといて。

自分ではすっかり忘れていたのですが、以前にブログでこの辺りの話題を扱ったことがあって、そこではrefcountパッケージが使われていました。

様々な事情(※)の考えると、LaTeXカーネルの改修が進められても、refcountについてはその仕様通りの動作が維持される可能性が高いと判断しています。

※LaTeXチームの「Tagged PDF Project」においてTagging Statusの評価対象になっていること、および、Oberdiek氏作成の重要なパッケージについては現在はLaTeXチームがメンテナンスをしていること。

そこで、refcountを使ったブログの例示コードを\pagerefにも対応させてみました。

これなら「問題が解決する」のかもしれません……。

Z. R. への返信

Re: 相互参照、\pageref \label でページ数の漢字表示について

- 本田 知亮 の投稿
Z.R.さん:
もやもや感がぬぐい切れないというか,何かあったような記憶があって引っかかってたのですが,
refcount!,すっきりしました.

カーネルのコードをコピーして書き換えるのはやばいので極力したくないのですが,
環境ごと保管しているからいっか!って(^^;
変わらないだろう仕様の範囲で,
なおかつ未定義動作に依存しないようにとか考えるべきなんですが,
かなり難しいですね。。。

>Tagging Statusの評価対象
この存在に気が付いてなかったです.ありがとうございます.