XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
返信数: 10
環境: CentOS Linux release 7.4.1708 (Core)
TeX: TeXLive2017, XeTeX, Version 3.14159265-2.6-0.99998
です。

最後につけたソースのように、titlesecパッケージを使ってpartの表示形式を変えています。このように表示形式を変えると、なぜか目次の出力が、

第I部 その1

ではなく、

I その1

というふうに変わってしまいます。これを元に戻そうと、titletocパッケージを使ってみたのですが、表示はかわりませんでした。

どのように設定すれば、目次表示を元のようにできますでしょうか?

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

\documentclass{bxjsbook}
\usepackage{zxjatype}
\setCJKmainfont{Source Han Serif}
\setCJKsansfont{Source Han Sans}
\setCJKmonofont{Source Han Sans}

% Part の表示を変える
\usepackage{titlesec}
\titleformat{\part}[block]
{}{}{0pt}{
\fontsize{32pt}{32pt}\selectfont\filleft
\thispagestyle{empty}
}[
\hrule \Large{\filleft 第 \thepart 部}
]
\usepackage{titletoc}
\titlecontents{part}[10pt]{}{第 \thecontentslabel 部}{}{\dotfill\contentspage}
\begin{document}
\tableofcontents
\part{その1}
\part{その2}
\part{その3}
\end{document}

濱田 一 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 和田 勇 の投稿
既にご覧になっているかと思いますが
http://abenori.blogspot.com/2018/05/titlesec.html
の情報と濱田 一さんの設定を対比してみました。

\titleformat{<命令>} ………………… \part
[<特殊な形状の指定>] ……………… block
{<書式>}
{<ラベル書式>}
{<ラベルと見出し文字列の間の空き>} …. 0pt
{<見出し文字列直前に入るコード>} ……… \fontsize ...
[<見出し直後に入るコード>] ………………… \hrule ...

これをもとに、要修正箇所がわかるようにした場合の差分を添付しますので参考にしてください。

@@ -9,8 +9,9 @@
\titleformat{\part}[block]
{}{}{0pt}{
\fontsize{32pt}{32pt}\selectfont\filleft
\thispagestyle{empty}
+ \fbox{\Large{\filleft 第 \thepart 部}} % ここに追加してみました
}[
\hrule \Large{\filleft 第 \thepart 部}
]
\usepackage{titletoc}
和田 勇 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
ご返事ありがとうございました。
ちょっと、説明が言葉足らずだったかもしれません。

和田さんの修正ですと、\part{...}の部分、つまり本文に「第1部」という表示が出ると思います。私が修正したいのは本文ではなく、目次の表示です。目次の表示を、「第I部 その1」というふうに変更したいのです。

引き続き、よろしくお願いいたします。
濱田 一 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 和田 勇 の投稿
申し訳ございません。質問の意図を取り違えました。
経過報告です。

titlesec を利用するとbxjsbook.cls の \@part を通らず titlesex.sty の
\def\ttl@addcontentsline で目次情報を出力しているようです。

このカスタマイズをtex doc titlesec をみながら検討しているのですが、所用ありすぐには対処できそうにはないのでしばらくお待ちいただくか、この情報からハックしてみてください。

和田 勇 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
ヒントをありがとうございます。

和田さんのヒントを元に、titlesec.styの中を少しみまして、以下のように定義すれば、所望の出力が得られることがわかりましたので、ご報告まで。

\def\ttl@tocpart{\def\ttl@a{第 \thepart 部}}

大変助かりました。重ね重ねありがとうございました。

濱田 一 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 和田 勇 の投稿
素晴らしい!!
おそらく他にもカスタマイズされていると思いますが、titlesec だと以下のようなものが目につきます。

1) \part の部分のインデントが \chapter の部分より深くなっている
2) \chapter{チャプタ} が目次で「第 1 章チャプタ」の「章」と「チ」が重なってしまっている
3) 2) にも関連すると思うけど section subsection の表示開始位置が左すぎるので番号と重なってしまう
和田 勇 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
お返事ありがとうございます。

これは、すべて目次の表示についてでしょうか?

私の方では、和田さんの書かれている1),2),3)のような不具合は見られないようです。
和田 勇 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
すいません。勘違いです。確かに、何も指定しないと2), 3)のような不具合が出てくるようです。

# 1)は私が\titlecontentsの第2引数に「10pt」と書いているからですね。

\usepackage{titletoc}
\titlecontents{part}[0pt]{}{\thecontentslabel}{}{\hfill\contentspage}
\titlecontents{chapter}[0pt]{}{\thecontentslabel}{}{\hfill\contentspage}
\titlecontents{section}[0pt]{}{\thecontentslabel}{}{\hfill\contentspage}

のように目次に出す項目をすべて指定しておくと、大丈夫のようです。
濱田 一 への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- Z. R. の投稿

部(part)については、LaTeXの内部処理が特殊であるため、titletocでは適切に扱えないようです。ところが実はtitlesecにおいて\partを再定義する場合は、「titlesecパッケージにnewparttocというオプションを付ける」ことでこの問題を解決できます。

\usepackage[newparttoc]{titlesec}

(詳細についてはtitlesecのマニュアル中で「newparttoc」を検索してみてください。)

newparttocをつけた場合、目次行の内容は次のようになります。

第I部その1

ラベルと題の間に空白を入れるためには、単純に、\titlecontentsの第4引数を

第\thecontentslabel 部\quad
とか
\makebox[5em][l]{第\thecontentslabel 部}
とかにすればよいようです。
Z. R. への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
お返事ありがとうございます。

私もtitlesec.styを読んでいたときに、newparttocなるオプションがあることに気づき試してみたのですが、私の環境では、partに対応する目次の部分は、

I その1

という出力のままでした。なにか環境が違うのでしょうか?
Z. R. への返信

Re: XeLaTeXでtitlesecパッケージを使った場合の目次の形式について

- 濱田 一 の投稿
度々すいません、こちらも私の勘違いでした。
\usepackage[newparttoc]{titlesec}

と、newparttocオプションを付けただけで

第I部その1

となるのかと思ってしまいました。

\usepackage{titletoc}
\titlecontents{part}[0pt]{}{第\thecontentslabel 部\quad}{}{\hfill\contentspage}

というような、titletoc.styを使った指定も必要なんですね。

私が最初に示した例では入っていたものが、いろいろ試すうちに抜け落ちてしまったようで、私のミスです。

以上、お騒がせいたしました。ありがとうございました。