Closed kmuto closed 5 years ago
痛いところを突かれました.うまく整理仕切れず苦しまぎれのが現在です.
やはり「\fontmatter
を再定義する」のはなしでしょうか?(LaTeX的にはどうなんでしょう?>識者の方)(jlreq.cls内ではある程度汎用的にするためにちょっとややこしくなっていますが,再定義は簡単だと思います.)
話を変えて,マクロ再定義ではなく,インターフェースを用意する場合の話です.とりあえず
\jlreqsetup{
frontmatter = {
pagenumbering = roman,
clearpage = cleardoublepage,
pagestyle = plain,
headings = {
_chapter = {label_format={},after_label_space=0pt},
restore_at_mainmatter = {_chapter}
}
}
}
というのを想像しました.これに応じて\frontmatter
を適当に定義するという感じです.
これは前付などを主に据えた例になりますが,ページ数を主に据えると
\jlreqsetup{
page_numbering_frontmatter = roman,
page_numbering_mainmatter = arabic
}
のような感じでしょうか.
どうでしょう?(ってなんだか答えにくいお返事になってしまいましたが…….)
ちなみに前付とかって本文とはどういう部分が異なる(可能性がある)のでしょうか?
\frontmatter再定義だと、「単にノンブルを変える」という目的に対して手段がちょっと大きいかなと感じていました(review-jsbookでもちょっと困っています…)。通しノンブルにするなら\mainmatterも再定義が必要ですね。 ただ、「たかが17行ぶんのマクロ再定義」とも言えるので、「そういう仕様だ」と通すのはアリではあります。
インターフェイスについては前者側はだいぶヘビーな感じがするので、後者でも十分かも。ただ「通しノンブル」としたいときに、frontmatter=arabic,mainmatter=arabicとするのか、はたまたmainmatter=throughみたいな謎ワードを生み出すかなど悩みそうです。
前付について異なる面というと、思いつくのは…
色々とやり方はあると思いますけれども、「通しノンブル」のみに関しては、(よく分かっていない end user 側が) \frontmatter
や \mainmatter
をいじることのほうが、制御しきれずに影響がデカいです。ましてや、 \LoadClass{jlreq}
している側で \frontmatter
や \mainmatter
を再定義していると、 jlreq 側のそれらの定義が変わったときに追従する手間が発生してしまいます。
それゆえ、通しノンブルのより本質的な \pagenumbering
の定義のみを変えてしまうほうが、保守性が高いと思います。実際にkernelで以下だけですし。
%%% From File: ltpageno.dtx
\message{page nos.,}
\countdef\c@page=0 \c@page=1
\def\cl@page{}
\def\pagenumbering#1{%
\global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
\c@page}}
インターフェイスについては前者側はだいぶヘビーな感じがするので、後者でも十分かも。
前者でもライトにはできるかなと思います.どちらかというと「前付である」が主か「ノンブルである」が主かという感じで.例えば前付きでのノンブルと\chapter
の採番の有無を指定するとして,次のどっちの方が直感的でしょうか?
\chapter
採番なし」,本文=「ノンブルarabic,\chapter
採番あり」\chapter採番
=「前付きなし,本文あり」通しノンブルは忘れていました.謎ワードは格好悪いですね…….
\frontmatter
等を再定義する場合.
ましてや、
\LoadClass{jlreq}
している側で\frontmatter
や\mainmatter
を再定義していると、 jlreq 側のそれらの定義が変わったときに追従する手間が発生してしまいます。
この方針の場合,jlreq内で定義されている\frontmatter
等はあくまで「デフォルト設定」と捉え,その部分の変化は影響を与えないように設計することになると思います.また,jlreqが提供する機能を使って必要なことはできるようにするつもりです.(例えばの例を末尾に加えます.)
ただ,インターフェースを用意するのに比べてユーザの作業は重くなるとは思います.
個人的にカーネルで定義された部分の上書きはできる限りしたくない……
\renewcommand*{\frontmatter}{%
\cleardoublepage
\setboolean{@mainmatter}{false}%
\SaveHeading{chapter}{\SavedChapter}%
\ModifyHeading{chapter}{label_format={},after_label_space=0pt}%
\pagestyle{plain}%
\pagenumbering{roman}%
}
\renewcommand*{\mainmatter}{%
\cleardoublepage
\setboolean{@mainmatter}{true}%
\pagestyle{headings}%
\SavedChapter
\setcounter{chapter}{0}%
\pagenumbering{arabic}%
}
上記の例ですが,\LoadClass{jlreq}
されている場合の例ではなくて,実際にjlreq
を使っているユーザがプリアンブルに書くコードの例ですね.例えば本文のページスタイルがheadingsに固定されていますが,これはスタイルを決めてしまったユーザだからこそかけるコード.
この場合だと
前付き=「ノンブルroman,\chapter採番なし」,本文=「ノンブルarabic,\chapter採番あり」
の記法のほうが直感的に思います。通しノンブルはjlreq英語版だと「serial pagination」という名前が付いていますね。
通常「前付きは通しノンブルで」という指定が行われているのではないかと想像し,次のような感じで\jlreqsetup
に加えてみました.c170a7e です.
\jlreqsetup{
frontmatter_pagination={arabic,independent},
mainmatter_pagination=roman,
backmatter_pagination={roman,continuous},
}
mainmatterにはスタイルだけを指定します.frontmatterとbackmatterにはスタイルとcontinuous
(通しノンブルの時)かindependent
(別ノンブルの時)を指定します.
とりあえず書いてみただけなので,バグっているかもしれません.指定方法の提案ということで.他にもfrontmatter***とかmainmatterとかbackmatter_とかを色々と入れてみています.
jsbook由来だと思うのですが、現状は\frontmatterで\pagenumbering{roman}、\mainmatterで\pagenumbering{arabic}と直接表記されているため、前付が必ずローマ数字、本文に入って数字リセットで1始まりのアラビア数字、という表現から逃れるにはマクロごと書き換えなければなりません。
JLREQ 2.6.3 gではページ番号(ノンブル)については通しノンブルも別ノンブルもあるとなっているので、調整可能になっていると嬉しいです。