LaTeX におけるセクション番号のカスタマイズ方法

LaTeX で \section の番号の部分をいじるのは実は自明なことではない。どうするべき?
6

結論は一番下を参照(bxjsclsを使おう)


jsarticle クラスの \appendix コマンドを使うと、以後のセクション名が「付録 A」「付録 B」となる。しかし……

mod_poppo @mod_poppo

jsarticle が \appendix で \thesection に「付録」を含めているのは適切ではないと思う(のだが、じゃあどうするべきかというのは思いつかない) pic.twitter.com/6zfkJ8uvHV

2017-06-05 15:42:12
拡大

LaTeXコード:

\documentclass{jsarticle}
\newtheorem{theorem}{Theorem}[section] % 定理番号にセクション番号が含まれるようにする
\begin{document}
\section{にゃーん} % 1 にゃーん
\begin{theorem} % Theorem 1.1 となる
  みゃおーん
\end{theorem}
\appendix
\section{ぴよぴよ} % 付録A ぴよぴよ
\begin{theorem} % Theorem A.1 となってほしいが、 Theorem 付録A.1 となってしまう
  ぴよ?ぴよぴよ、ぴぃぴぃ
\end{theorem}
\end{document}

補足:\thesection は他のカウンター(サブセクション番号や定理番号)と組み合わされる前提なので、セクション番号の「番号」の部分だけ、つまり「1」「A」「一」に対応するべき。セクション番号を「§1」「1.」「付録 A」のようにしたいなら、 \thesection 以外の場所でカスタマイズするべき。

某ZR(ざんねん🙃) @zr_tex8r

ドキュメントが無ければ、仕様もバグのうち >jsナントカ #TeX #LaTeX

2017-06-25 19:18:08
某ZR(ざんねん🙃) @zr_tex8r

jsclassesのクラスで\thesectionがアレな件、自分が昔使っていた補助パッケージには次のようなことをして対処していた。 gist.github.com/zr-tex8r/a117f… #TeX pic.twitter.com/lHZ8I0kelN

2017-06-25 20:51:07
拡大

まとめ人的には、↑はやっていることが jsarticle と変わらないように見える。つまり、サブセクションや定理番号で本来の \thesection を使うとおかしくなり、手動で代替物(\thesectioncount)を使うようにする必要がある。

mod_poppo @mod_poppo

enumerate 環境は \labelenum* で番号の表示のされ方を変えられるのに、 section 系コマンドにそういう便利なのが用意されていないのは、完全に設計が悪い

2017-06-25 21:40:21
mod_poppo @mod_poppo

ソースを見た感じ \(あっと)seccntformat をいじればいいのかと思ってみたが、このページによると目次とかヘッダ・フッタのことも考えると追加の処置が必要らしい h4.dion.ne.jp/~latexcat/colu…

2017-06-25 21:42:36
ワトソン @wtsnjp

LaTeX カーネルの設計が悪いみたいな主張はまぁ仕方ないかなって思うけど,クラスは普通に「ユーザ」が作ってしかるべきものであるからそのレベルで不満があるなら自分で作ればって思ってしまう(僕は黙ってパッチを当てる)

2017-06-25 21:42:55
mod_poppo @mod_poppo

クラスで対処しろという指摘はごもっとも

2017-06-25 21:45:00
mod_poppo @mod_poppo

Q. セクション番号の表示のされ方を簡単にカスタマイズしたい A. 自分でクラスを作れ

2017-06-25 21:47:50
mod_poppo @mod_poppo

数学科の学部生にLaTeXを教えていて「セクション番号を変えたい」となった場合に、アットつきコマンドを大量に使ったおまじないを教えるか、秘伝のクラスファイルを伝授して他のクラスファイルで使えないカスタマイズ方法を教えるかの2択みたいな世界は嫌だ

2017-06-25 21:51:57
mod_poppo @mod_poppo

書いていて思い出したが、 ShareLaTeX のドキュメントには titlesec というパッケージが紹介されていたな sharelatex.com/learn/Sections…

2017-06-25 21:52:43
某ZR(ざんねん🙃) @zr_tex8r

【注意】 LaTeXで「クラスを作る」役割の人は「デザイナ(designer)」と呼びます。 ※デザイナはTeX言語の基礎的な知識を必要とする。 #TeX #LaTeX

2017-06-25 21:54:13
abenori @abenori

\appendix後の\thesection,jlreqではどうなっているんだっけと思ったが,そもそもarticleでは付録なんて文字列は入らなかった.jarticleに合わせたんだろうなぁ.

2017-06-25 23:13:06

※まとめ人注:jarticle では \appendix 以後のセクション名には「付録」という文字は入りません。「付録」が入るのは jsarticle の独自機能のようです。

某ZR(ざんねん🙃) @zr_tex8r

LaTeXは、文書のレイアウトの構成部品の外見については 「文書クラスが全てを決定する」 という世界。何を、どのように、どういう方法でカスタマイズできるかも、全て文書クラスが決めていて、クラスごとに方法が異なる。 これは、良くも悪くも、LaTeXの非常に特徴的な性質。 #TeX

2017-06-25 23:25:45
某ZR(ざんねん🙃) @zr_tex8r

Q「○○の出力形式を△△を変えたいです」 A「文書クラスは何ですか」 Q「××です」 A1「では××の\zzz命令を使いましょう」 A2「××では無理です。ソレができるクラスを使いましょう」 ↑ というのが #LaTeX のキホン的な考え方に他ならない。 #TeX

2017-06-25 23:31:43
某ZR(ざんねん🙃) @zr_tex8r

(念のため) TeX言語コードを書いてクラスの定義を上書きするというのは、要するに「自分で新しいクラスを実装する」行為の一種に他ならない。 (自分はこういうのを(洒落で)「無名クラス」と呼んでいる。) #TeX #LaTeX

2017-06-25 23:35:02
某ZR(ざんねん🙃) @zr_tex8r

実際に、「文書クラスの管轄になる要素」のカスタマイズを提供するパッケージを実装するのは、一般的には極めて難しい。「元々がどう実装されているか」に関する保証がまるで存在しないので。 だから、実在するクラスの実装を片っ端から調べて「カバレッジを上げていく」しかない。 #TeX

2017-06-25 23:45:39
某ZR(ざんねん🙃) @zr_tex8r

節見出しをカスタマイズする有名なパッケージには、sectstyとtitlesecがあるけど、この2つはアプローチが異なる。 ・sectstyは元のコードにパッチを当てる形式。当然汎用は不可能なので、仕様で「欧文標準とKOMA-scriptのクラスのみサポートする」と明示している。

2017-06-25 23:52:18
某ZR(ざんねん🙃) @zr_tex8r

・titlesecは元のコードを破棄して全部自分で実装している(らしい←ドキュメントの記述による)。だからtitlesecの機能は大抵のクラスで正常動作するはず。しかしクラスが節見出しに関して何か特殊な機能を持たせている場合は、恐らくそれは壊滅する。 #TeX

2017-06-25 23:57:23
某ZR(ざんねん🙃) @zr_tex8r

「新しいレイアウト」を手に入れるには「新しいクラス」を作成が必須となる。なのに、そのクラスの作製にはTeX言語の知識が必須となる。これが今のLaTeX2eの破滅的な欠点。 個人的にはLaTeX3かConTeXtかTeXグッバイか何かに一刻も早く移行してほしいが……。#TeX

2017-06-26 00:15:35