Latex:如何使列表subfloats使用列表计数器,TOC等

时间:2009-10-05 01:44:49

标签: latex figure caption listings

下面有一个并排数字的宏。它使用子浮点数,所以它在图中。

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

不幸的是,这使用了图计数器,而不是列表计数器。它也显示在错误的目录中,并在标题中使用“图”而不是“列表”,引用它等等。有没有办法纠正这个问题?

我更喜欢一种简单的方法,比如在某处添加“清单”这个词......

3 个答案:

答案 0 :(得分:2)

不使用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}

答案 1 :(得分:0)

您可能需要查看子浮点文档。我确信有一个宏调用会在“数字”环境中使子浮点计数。您可以尝试重新定义与“列表”相对应的“数字”环境 - 如果这有任何意义的话。

答案 2 :(得分:0)

好的,这是错误的答案,但我几乎就这样到了那里。它只能在右侧\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}
}
}