Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

secnolevel > toclevelのときにtoclevel以上のレベルの見出しが目次に抽出される #846

Closed
kokuyouwind opened this issue Oct 24, 2017 · 9 comments

Comments

@kokuyouwind
Copy link
Contributor

config.ymlでsecnolevelをtoclevel以上の値にした場合、toclevelを超えるレベルの見出しがセクション番号なしで表示されます。

テストに使用したのは以下の.reコードです。

= レベル1
== レベル2
=== レベル3

toclevel: 1, secnolevel: 2ではレベル2までの目次が出力されます。

15f4efcf85bb0f945dcff9a6

toclevel: 2, secnolevel: 3ではレベル3までの目次が出力されます。

15f4efe54007ae9afc40ca68

toclevel:1, secnolevel: 3ではレベル2までの目次が出力されます。
secnolevelまでが出力される、というわけではないようです。

15f4effb3d807781b0f90c9b

なお、いずれもtexソースコードではtocdepthとしてtoclevelが設定されていました。
このためtex側の仕様/バグかもしれませんが、secnolevelまわりの挙動を追えていないためこちらに報告させていただきます。

@yuw
Copy link

yuw commented Oct 24, 2017

toclevel\tocdepthに従って正しく動作しているように見えます.
正確には参照されているjsbook.clsの話になりますが,
LaTeXとして,節に対応するレベルは1,項に対応するレベルは2として利用されています.
ちなみに,章に対応するレベルは0です.

@kmuto
Copy link
Owner

kmuto commented Oct 25, 2017

「secnolevel」は、TeXとは関係なく、その見出しに採番するかどうかのレベルを設定するものです。
たとえば「=== タイトル」があったとして、

  • secnolevel: 2 「タイトル」
  • secnolevel: 3 「1.1.1 タイトル」

なのですが、これで変なところがあるでしょうか。

@kokuyouwind
Copy link
Contributor Author

kokuyouwind commented Oct 25, 2017

すみません、例示が適切ではありませんでした。

toclevel: 1, secnolevel: 1では「第1章」のみが出力されます。

15f540c52072238d3d06c0dd

これに対し、toclevel: 1, secnolevel: 2では節までが見出しに表示されており、toclevelを変えていないにもかかわらず目次として抽出するレベルが変わってしまっています。
これは意図しない挙動ではないかと思うのですが、いかがでしょうか?

15f540cf6823f98ff4d5b567

なお、toclevel: 2, secnolevel: 1では節が採番なしで目次に表示されており、(章をレベル1, 節をレベル2と解釈するなら)この場合は正しく表示されているように感じます。

15f54144c6045faff994dbeb

LaTeXとして,節に対応するレベルは1,項に対応するレベルは2として利用されています.
ちなみに,章に対応するレベルは0です.

言われてみるとたしかにその通りなのですが、toclevel: 1, secnolevel: 1で章のみ、toclevel: 2, secnolevel: 2で章~節が目次に抽出されていたため、Re:VIEWでは章に対応するレベルが1という扱いなのかと思っていました。
ちなみにtoclevel: 0, secnolevel: 0では第1章の章名すら出力されず、真っ白な目次ページが生成されました。

@kmuto
Copy link
Owner

kmuto commented Oct 29, 2017

なるほど、理解しました。TeXでsection*のように展開しているので、TeXの挙動としてこうすると目次から抜けますね。これはaddcontentslineをつっこむしかないかな…

@kmuto
Copy link
Owner

kmuto commented Oct 29, 2017

いや、入れているんだけど状況によってうまく入っていない、というバグですね。

@kmuto
Copy link
Owner

kmuto commented Oct 29, 2017

すみません、もう1つ勘違いをしていました。おおむね直すべきところはわかったので対処を考えます。

@kmuto
Copy link
Owner

kmuto commented Oct 29, 2017

シンプルにtocdepthは-1する必要があるだけだった…。PR#854 で修正予定です。

@munepi
Copy link
Contributor

munepi commented Oct 29, 2017

config.ymlの仕様を見ると、「toclevel (int): 目次抽出レベル。最低1」とありました。

#854 の変更の意図は、以下のように理解しておきました。

  • \chapter から始まる場合: toclevel: 1(最低値)→tocdepth=0:章見出しまで出る⇒OK
  • \part から始まる場合:toclevel: 1(最低値)→tocdepth=0:部見出し、章見出しまで出る:通常、部を立てる本は、「章を束ねる」⇒OK

ただ、個人的には、hyperrefパッケージを読み込む前提のLaTeXクラスファイルの実装では、「*」付きの「\見出し*」コマンドを使いたくないかなーと。
標準的なLaTeXの汎用クラスファイルを使う前提では、いちいち \addcontentsline をlatexbuilder.rbの変換器側でやらざるを得ないですし、それが仕様であれば、仕方ないですけれども。

仕様をどこに合わせるの良いか、色々と難しいところです。

@kmuto
Copy link
Owner

kmuto commented Oct 29, 2017

@munepi ご推察のとおりです。部だけ出して章を出さないという目次はまずありえないですよね。

*については、jsbookを壊さないようにするには現状だとこうせざるを得ないかな…というところです。
このほかRe:VIEWの挙動として、secnolevelによらず

  • ==[nonum]* + \addcontentsline
  • ==[notoc]*のみ
  • ==[nodisp]addcontentslineのみ(採番もしない)

というのがあるので、スタイル側を今とは異なる採番判断方式にすると、このあたりの調整も考える必要が出てきますね。

@kmuto kmuto closed this as completed in 8a8c237 Nov 3, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants