Латекс:Как сделать так, чтобы подфлоты объявлений использовали счетчики объявлений, TOC и т. д.
Вопрос
У меня есть макрос, который создает параллельные фигуры (см. ниже).Он использует субфлоты, и так показано на рисунке.
\newcommand{\listbylist}[6][showlines=true]{
\begin{figure}
\subfloat[ ]{
\lstinputlisting[showlines=true,#1]{#2}
\label{#4:A}
}
\hfill{}
\subfloat[ ]{
% by setting the frame to leftline, we avoid a box into oblivion
% turn off numbers
\lstinputlisting[showlines=true,frame=leftline,#1,numbers=none]{#3}
\label{#4:B}
}
\hfill{}
\caption[#5]{#6}
\label{#4}
\end{figure}
}
К сожалению, здесь используются счетчики рисунков, а не счетчиков списков.Он также отображается в неправильном оглавлении и использует слово «Рисунок» вместо «Списки» в заголовке, ссылках на него и т. д.Есть ли способ исправить это?
Я бы предпочел простой способ, например, добавить где-нибудь слово «Объявление»…
Решение
Вместо использования встроенного числа с плавающей запятой в lstlistings оберните их собственным плавающим числом:
\begin{mylisting}
\begin{lstlisting}
int x = 1;
\end{lstlisting}
\end{mylisting}
Затем используйте тот же поплавок (mylisting) для использования подпоплавка:
\newcommand{\listbylist}[6][showlines=true]{
\begin{mylisting}
\subfloat[ ]{
...
}
\hfill{}
\subfloat[ ]{
...
}
\hfill{}
\caption[#5]{#6}
\label{#4}
\end{mylisting}
}
Все это необходимо указать в преамбуле:
\newfloat{mylisting}{tbphH}{lopbl}[chapter]
\floatname{mylisting}{Listing}
\newsubfloat{mylisting}
\newcommand{\listofmylistings}{\listof{mylisting}{List of Listings}}
% if you use the hyperref package
\providecommand*\theHmylisting{\themylisting}
Другие советы
Возможно, вам захочется взглянуть на документацию по субфлоту.Я уверен, что есть вызов макроса, который подсчитывает количество подплавающих чисел в среде «фигура».Вы можете попробовать переопределить среду «фигура» вместо «списков» - если это вообще имеет какой-то смысл.
ОК, это неправильный ответ, но я это сделал почти доберись туда вот так.Не удалось добавить только подписи справа \listof
.
Где-то там.Вероятно, это можно сделать лучше, но это почти работает.Осталось только сделать так, чтобы заголовок отображался в файле .lol, а не в файле .loc.Я задам вопрос по этому поводу, а затем исправлю этот ответ.
По сути, это просто резервное копирование счетчика «цифр» и копирование счетчика «списков».После фигуры он ставит их обратно.
% Need a counter to save the value to
\newcounter{pbsavefigurecounter}
\newcommand{\listbylist}[6][showlines=true]{
{% scope
% Change ``Figure'' to ``Listing''
\renewcommand{\figurename}{Listing}
% save the figure counter
\setcounter{pbsavefigurecounter}{\value{figure}}
% copy the listings counter to the figure counter
\setcounter{figure}{\value{lstlisting}}
\begin{figure}
\subfloat[ ]{
\lstinputlisting[nolol,showlines=true,#1]{#2}
\label{#4:A}
}
\hfill{}
\subfloat[ ]{
% by setting the frame to leftline, we avoid a box into oblivion
% turn off numbers
\lstinputlisting[nolol,showlines=true,frame=leftline,#1,numbers=none]{#3}
\label{#4:B}
}
\hfill{}
% \float@caption{lol}[#5]{#6}
\label{#4}
\end{figure}
% Update the listings counter
\setcounter{lstlisting}{\value{figure}}
% Restore the figure counter
\setcounter{figure}{\value{pbsavefigurecounter}}
% Change ``Listing'' back to ``Figure''
\renewcommand{\figurename}{Figure}
}
}