私は現在、独自のドキュメントクラス(ブッククラスに非常に影響を受けている)を作成していますが、caption
およびsubcaption
パッケージを使用するときに問題が発生しています。
これは私の授業の一部です強調されたテキスト:
\RequirePackage{caption}
\RequirePackage{subcaption}
\newcounter{figure}
\newenvironment{figure}{%
\@float{figure}%
}
{\end@float}
\renewcommand\thefigure{%
\@arabic\c@figure%
}
\renewcommand\thesubfigure{%
\arabic{subfigure}%
}
\newcommand\figurename{Fig}
\def\fps@figure{tbp}
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{\figurename\nobreakspace\thefigure}
\DeclareCaptionLabelFormat{format}{\textbf{\textsc{#1.~#2. -- }}}
\captionsetup[figure]{
name={Fig},
labelsep=none,
labelformat=format,
textformat=simple,
justification=justified,
singlelinecheck=true,
font=footnotesize,
textfont=it,
position=bottom,
}
\captionsetup[subfigure]{
name={Fig},
labelsep=none,
labelformat=format,
textformat=simple,
justification=justified,
singlelinecheck=true,
font=footnotesize,
textfont=it,
position=bottom,
}
単純な図の場合は問題なく、すべてが完璧に機能します。ただし、サブ図を挿入しようとすると、ドキュメント クラスに関する次のエラーが発生します。
Command \thesubfigure undefined
この間違いがどこから来たかご存知ですか? 両方のパッケージのドキュメントを読みましたが、あまり詳しくありません。
今回初めて自分でドキュメントクラスを書いてみましたが、これは LaTeX の「古典的な」使い方とはまったく異なるので、私のクラスがその場しのぎの作業であるとしてもお許しください。ありがとうございます。
PS: ドキュメント クラスのリンクは次のとおりです:マイクラス.cls
図の環境は 382 行目から 410 行目に定義され、キャプションは 452 行目から 510 行目に定義されています。
.tex ファイルへのリンクは次のとおりです:テスト.tex
答え1
- をロードするときに
subcaption
、\DeclareCaptionSubType{figure}
counterfigure
が定義されている場合は自動的に呼び出されます。 - 内部
\DeclareCaptionSubType{figure}
、- コマンドが展開されます。(実際には、これはで定義されている
\ext@figure
の展開内で発生します)\caption@@@@declaresublistentry
caption3.sty
- 新しいカウンター
subfigure
が定義され、対応するコマンド\thesubfigure
が定義されます。
- コマンドが展開されます。(実際には、これはで定義されている
カウンターの場合table
も同様のことが起こります。
したがって、呼び出す前にカウンター<float type>
とコマンドを提供することが重要です。\ext@<float type>
\DeclareCaptionSubType[*]{<float type>}
完全な例
\documentclass{minimal}
\newcounter{figure}
\newcounter{table}
\makeatletter
\def\ext@figure{lof}
\def\ext@table {lot}
\makeatother
\RequirePackage{subcaption}
\renewcommand{\thesubfigure}{...}
\renewcommand{\thesubtable} {...}
\begin{document}
abc
\end{document}