Латекс: как сделать подсплавки списков, используя счетчики списков, TOC и т. Д. - PullRequest
5 голосов
/ 05 октября 2009

У меня есть макрос, который делает рисунки рядом друг с другом, ниже. Он использует подплавания и поэтому фигурирует.

\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}
}

К сожалению, здесь используются счетчики рисунков, а не листинги. Он также отображается в неправильном оглавлении и использует в заголовке слово «Рисунок» вместо «Списки», ссылки на него и т. Д. Есть ли способ исправить это?

Я бы предпочел простой способ, например добавить куда-нибудь слово "Listing" ...

Ответы [ 3 ]

2 голосов
/ 06 октября 2009

Вместо использования встроенного плавающего списка lstlistings, оберните их в пользовательский плавающий:

\begin{mylisting}
\begin{lstlisting}
int x = 1;
\end{lstlisting}
\end{mylisting}

Затем используйте тот же самый float (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}
0 голосов
/ 06 октября 2009

ОК, это неправильный ответ, но я получил почти , вот так. Не удалось добавить подписи справа \listof.

Почти там. Это можно было бы сделать лучше, но это почти работает. Осталось только сделать так, чтобы заголовок появился в файле .lol, а не в файле .loc. Я задам вопрос об этом, затем исправлю этот ответ.

По сути, это просто резервное копирование счетчика «figure» и копирование на счетчик «lists». После рисунка он возвращает их обратно.

% 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}
}
}
0 голосов
/ 06 октября 2009

Возможно, вы захотите взглянуть на документацию на подводном плавании. Я уверен, что есть вызов макроса, который делает подсчет подфлота в среде "figure". Вы можете попытаться переопределить счетчик окружения «figure» на «list» - если это вообще имеет смысл.

...