相互参照の後ろで改行するとスペースが生じる

相互参照の後ろで改行するとスペースが生じる

- ya ra の投稿
返信数: 6
  • TeX Live 2024
  • LuaLaTeX

相互参照で遊んでいる際に見つけた疑問です。

問題

見出しのための \ref コマンドとして、第\ref{#1}節\secref として定義しました。

この \secref の後で改行し和文を続けると、“節” と “その後の和文” の間に謎のスペースが生じます。

このスペースはどうして生じるのでしょうか。また、対策方法はありますか。

最小再現

\documentclass{jlreq}
\newcommand{\secref}[1]{第\ref{#1}節}
\begin{document}

\section{セクション}\label{sec}

あいうえお
\secref{sec}
かきくけこ

%% 以下はふつうに出力される
%%
% あいうえお
% 第\ref{sec}節
% かきくけこ
%
% あいうえお
% 第1節
% かきくけこ

\end{document}
添付 スクリーンショット 2024-05-12 022343.png
ya ra への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- ya ra の投稿

追記

上記では和文に限定していましたが、欧文や数式であっても同様の問題が生じました。(和欧文間のアキがあるので気付きませんでしたが、本来の和欧文間のアキよりも広い)

\documentclass{jlreq}
\newcommand{\secref}[1]{第\ref{#1}節}
\begin{document}

\section{セクション}\label{sec}

あいうえお
\secref{sec}
かきくけこ

あいうえお
第\ref{sec}節
かきくけこ

あいうえお
第1節
かきくけこ

%%%%% %%%%% %%%%% %%%%%
Hello
\secref{sec}
hello.

Hello
第\ref{sec}節
hello.

Hello
第1節
hello.

%%%%% %%%%% %%%%% %%%%%
\( \alpha \)
\secref{sec}
\( \Pi \)

\( \alpha \)
第\ref{sec}節
\( \Pi \)

\( \alpha \)
第1節
\( \Pi \)

\end{document}
ya ra への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- m c の投稿
\secref{foo}直後の改行が(欧文文書の)単語間スペースとみなされるから,というのが簡単な理由の説明です.
対処方法は
\secref{foo}%
と行末に“%”を挿入します.

jlreqはluatexjaを読み込みますので,luatexja-ja.pdfの15章(15.1と15.2:pTeXとの挙動の違いについての説明)が参考になるかと思います.
m c への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- 奥村 晴彦 の投稿

あるいは

\newcommand{\secref}[1]{第\ref{#1}節\ignorespaces}

でしょうか。

奥村 晴彦 への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- ya ra の投稿

mc さま、ご回答ありがとうございます。

TeX をよく分かっていない為すぐには理解できていませんが、提示いただいた luatexja-ja.pdf や周辺のドキュメントを読んで理解を深めたいと思います。

個人的なところですが、ご回答からキーワードを得たのでネットで調べていたところ、以下の記事も参考になりそうでした。

https://qiita.com/yyu/items/d31e11a780212e3eb9c1


奥村さま、ありがとうございます。

実際に運用する際はどこで当該コマンドを使うか分からないので、行末 % よりも \ignorespaces を仕込んでおいた方が簡便そうです。


そもそも、より本質的には相互参照は関係なく、以下のようにしても同じような問題が生じるのですね。(相互参照で遊んでいる際に見つけたため、相互参照に絡んだ問題だと誤認していました)

\documentclass{jlreq}
\newcommand{\KANJI}{漢字}
\begin{document}

あいうえお
\KANJI{}
かきくけこ

あいうえお
\LaTeX{}
かきくけこ

\end{document}
ya ra への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- 本田 知亮 の投稿
あんまり難しいことは考えず,
「欧文(記号を含めて)の直後の改行は空白になる」
「改行は和文の直後だけにする」
くらいの認識で実用上は問題ないです.

空白を明示的に削除したい場合は
意識して%をつける感じでしょうか.

マクロを作る場合だと,問答無用で行末に % 全部をつけてしまって
空白が本当に必要なところだけ,
空白があることを明示するというのはありだと思います
(expl3はこんな方針を自動化してますね).

#ちなみに,引用先のqiitaの記事で出てきてる「pTeXのオートマトン」ですが,状態遷移図が
#ptex-manual.pdf(https://github.com/texjporg/ptex-manual/blob/master/ptex-manual.pdf)の
#2.3節に書かれています(qiitaの記事のころには書かれていなかったものです).
本田 知亮 への返信

Re: 相互参照の後ろで改行するとスペースが生じる

- ya ra の投稿

本田さま、ありがとうございます。

「欧文(記号を含めて)の直後の改行は空白になる」

「改行は和文の直後だけにする」

この方針を取るようにしたいと思います。 (実はこれまで長い行内数式の前後で改行するようにしていたので、和欧文間のスペース幅になっていませんでした……)

加えて、追加の資料を提示いただきありがとうございます。