В настоящее время я пишу свой собственный класс документа (который во многом вдохновлен классом книги) и столкнулся с проблемой при использовании пакетов 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:Тест.текс
решение1
- При загрузке
subcaption
он автоматически вызывается,\DeclareCaptionSubType{figure}
еслиfigure
определен счетчик. - Внутри
\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}