jlreqで目次だけ見出しのスタイルを変える

jlreqで目次だけ見出しのスタイルを変える

- Wang Yifan の投稿
返信数: 9

TeX Live 2021のLuaTeX環境でjlreqを使用していますが、目次の章立てだけスタイルを変更する必要が出てきました。

検索したところ下記のイシューが見つかったので、それを使用して以下のようなテストファイルを作成してみたのですが、変更が反映されないようです。この場合、どのように書くのが正しいのでしょうか。
目次と索引の見出し命令は固有名になっていたほうがよい?

\documentclass{jlreq}
% フックを使う.それなりに新しいLaTeXが必要.
\AddToHook{cmd/tableofcontents/before}{
  \SaveHeading{section}{\savesection}% 現在の\sectionを保存
  \ModifyHeading{section}{label_format={\thesection 節}}% \section変更
}
\AddToHook{cmd/tableofcontents/after}{
  \savesection% 復帰
}
% もちろんこうしてもよい
%\makeatletter
%\let\orig@tableofcontents=\tableofcontents
%\def\tableofcontents{%
%  \SaveHeading{section}{\savesection}% 現在の\sectionを保存
%  \ModifyHeading{section}{label_format={\thesection 節}}% \section変更
%  \orig@tableofcontents
%  \savesection% 復帰
%}
%\makeatother
\begin{document}
\tableofcontents
\section{あ}
\end{document}
添付 スクリーンショット 2023-07-26 114634.png
Wang Yifan への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- 和田 勇 の投稿
変更したいとお考えのポンチ絵を書いて画像化していただけると方策も考えられると思いますが、

  \ModifyHeading{section}{label_format={\thesection 節}}

とされているので「目次」の前に「節」を表示したいのかしら?
目次の部分は「\section*{\ contentsname}」相当が発行されるので label_format は結果的に無視されるのだと思います。

これだけの変更であれば jlreq ふうではないのですが https://okumuralab.org/tex/mod/forum/discuss.php?d=615 を参考に

   \renewcommand{\contentsname}{節 目次}

でどうでしょうか?
和田 勇 への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- Wang Yifan の投稿

質問があいまいで失礼いたしました。
これは「目次」それ自体の節見出しに対する命令なのですね。

実現したかったことは、このサンプルでいうと、

目次
1 節 あ・・・・ 1

1 あ

となっている状態、つまり当該節の番号が目次の中でだけ「1 節」と表示され、実際の本文では通常通り(デフォルト)の形式で表示されることを意図しております。

よろしくお願いいたします。

Wang Yifan への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- 和田 勇 の投稿

気温が高く jlreq 風な解法を考えることができないので、スクリプトと簡易カスタマイズマクロによるものです。

なお、section のみ対応しています。

スクリプトで.toc ファイルを書き換える

難点は、インストールしないと使えない場合があるのですが以下の情報が一つあります。

LaTeXの論文の目次に「第~章」だけでなく「第~節」まで入れる方法

目次は .toc ファイルの内容を反映されますので、1回目の処理後そのファイルを目的通りに書き換える方法です。

1回目の処理後作成される .toc ファイル

\contentsline {section}{\numberline {1}あ}{1}{}%

書き換え後のイメージ

\contentsline {section}{\numberline {1 節}あ}{1}{}%

上記の sed で書き換えをもう少し工夫して以下のようにする

ポイントは、-i オプションを使うことで変更結果を overwrite しているところ

perl

perl -Mutf8 -CSD -i -ne 's/({section}{.numberline {[^{}]+)/$1 節/' ファイル名.toc

sed

sed -i -e 's/\({section}{.numberline {[^{}]\{1,\}\)/\1 節/' ファイル名.toc

カスタムsection マクロ \mySECTION を定義

\documentclass{jlreq}
\begin{document}
\tableofcontents
\section{あ}
\thesection

\newcommand{\mySECTION}[1]{%
   \stepcounter{section}% セクション番号をカウントアップ
   \section*{\thesection\hspace{1em}#1}% 本文に見出し出力
   \addcontentsline{toc}{section}{\thesection 節\hspace{1.25em}#1}% カスタム目次情報出力
   \thesection #1 \thesection #1 \thesection #1 \thesection #1
}

\mySECTION{い}\mySECTION{う}\mySECTION{え}\mySECTION{お}
\mySECTION{か}\mySECTION{き}\mySECTION{く}\mySECTION{け}\mySECTION{こ}
\mySECTION{さ}
\end{document}

上記で作成される .toc ファイル内容は以下のようになります。

\contentsline {section}{\numberline {1}あ}{1}{}%
\contentsline {section}{2節\hspace {1.25em}い}{1}{}%
... 途中省略 ...
\contentsline {section}{10節\hspace {1.25em}こ}{2}{}%
\contentsline {section}{11節\hspace {1.25em}さ}{2}{}%
和田 勇 への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- Wang Yifan の投稿
ご教示いただいたマクロの方を使って、無事に意図通りの書式を実現できました。
大変勉強になりました。
詳しくご説明いただきありがとうございました!
Wang Yifan への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- ut の投稿
無事ご解決済みとのことですので、蛇足なのですが…。

# あらかじめのお詫び
# 私の手元のシステムは W32TeX [2020/07/19] と古くて、jlreq.cls
# も [2020/05/01 jlreq] なので、以下に書くことは、現在のシステム
# ではうまく行かないかも知れません。すいません。

「jlreq における正しい書き方」があるのかどうか分からないので
すけれど、泥臭い方法を 2 つ考えてみました。

(1)\ModifyHeading と \nofiles を使う

プリアンブルに:

%\nofiles
%\ModifyHeading{section}{label_format={\thesection 節}}

と書いて、まず、\ModifyHeading の行のコメントをはずしてタイプ
セットします。すると、本文にも、目次にも、section 番号に「節」
が付きます。

次に、\ModifyHeading の行をコメントアウトして、\nofiles のコメ
ントをはずして、タイプセットします。すると、本文の section 番号
には「節」が付かず、目次のほうには「節」が付くのではないかと思
います。

(2)\l@section 内で \numberline の定義をいじる

プリアンブルで:

\makeatletter
\renewcommand{\l@section}[2]{%
  {\def\numberline##1{\hbox to\@lnumwidth{##1節\hfil}}%
  \@dottedtocline{1}{0pt}{30.0pt}{#1}{#2}}%
  }
\makeatother

とすると、目次の section 番号に「節」が付くと思います。
(\numberline を変更している影響が \l@section の外に漏れない
ように、\renewcommand の中でもグルーピングをしています)

subsection 以下についても、\l@... の定義を調べれば、同様の方
法で変更出来そうな気がします。

ut への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- Wang Yifan の投稿
ありがとうございます。
\numberlineを変更する方法を試してみましたが、残念ながらこちらの環境では動作しませんでした。
ただ、コードを拝見して素人ながら内部動作について少しよくわかった気がします。とても勉強になりました。
Wang Yifan への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- ut の投稿
> \numberlineを変更する方法を試してみましたが、残念ながらこちらの環境では動作しませんでした。

ありゃ。

実は、和田さんのご投稿を拝見した際にも気付いてはいたのですけ
れど、\contentsline の引数の数が、私の手元と現在とでは、違っ
ているんですよね…:

> ltsect.dtx Date: 2021/07/28 Version v1.1f

> %  \begin{macro}{\addcontentsline}
. . .
> % \changes{v1.1e}{2020/10/01}{add a fourth argument for better
> %    hyperref compatibility}
. . .
> %    We add an empty brace pair at the end of \cs{contentsline}
> %    so that the number of argument is identical in documents
> %    with and without hyperref.

余計な口を挟んでおきながら本当に申し訳ないのですが、これ以上
の深入りはやめておきます、すいません。
ut への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- 和田 勇 の投稿

> contentsline の引数の数が違ってる...

https://okumuralab.org/tex/mod/forum/view.php?id=2 のように「一般フォーラム」
をクリックすると「(この)フォーラムを検索」の窓に contentsline を入れると
以下のような話題がありました。

https://okumuralab.org/tex/mod/forum/discuss.php?d=3452#p21035

ut への返信

Re: jlreqで目次だけ見出しのスタイルを変える

- 和田 勇 の投稿

> contentsline の引数の数が違ってる...

https://okumuralab.org/tex/mod/forum/view.php?id=2 のように「一般フォーラム」
をクリックすると「(この)フォーラムを検索」の窓に contentsline を入れると
以下のような話題がありました。

https://okumuralab.org/tex/mod/forum/discuss.php?d=3452#p21035