我正在尝试使用 \captionof{lstlisting}{Pseudo Code}
获取带有正常标题的列表“清单 1. 伪代码",在 IEEEtran 文档中。
我想要的标题而不是caption=
因为我想在代码旁边添加注释,并且标题跨越代码和注释之上。
以下是 MCVR:
\documentclass[10pt,journal,compsoc]{IEEEtran}
\usepackage{listings}
\usepackage{capt-of}
\makeatletter
% the 3 caption packages caption.sty, ltcaption.sty, newfloat.sty contain:
\providecommand*\ext@lstlisting{lol}%
\makeatother
\begin{document}
\begin{figure}
\centering%
\captionof{lstlisting}{pseudo code with comments}
\begin{minipage}[t]{0.40\textwidth}
\begin{lstlisting}[label=code]
code here
\end{lstlisting}
\end{minipage}%
\hspace{1em}%
\begin{minipage}[t]{0.45\textwidth}
Some comments here
\end{minipage}
\end{figure}
Reference Listing~\ref{code} in text.
\end{document}
这几乎让我得到了我想要的东西,除了数字没有出现:我得到了“清单。伪代码“,但参考文献仍然有效。
我得到一个未定义的控制序列,ext@lstlisting
我必须手动定义该序列才能编译文件。
如果我加载,整个过程就会正常进行caption
,但是capt-of
IEEEtrans 指南警告:
Axel Sommerfeldt 的 caption.sty [将] 覆盖 IEEEtran.cls 的标题处理,这将导致非 IEEE 风格的图形/表格标题。
事实上,使用这个包会改变表格和图形标题的样式,所以我不需要使用这个包(这使得这个问题不同于这个类似的使用caption
)。
我该如何解决这个问题并获取列表号码\captionof{lstlisting}{}
?
答案1
\captionof
来自的命令capt-of
并不像\captionof
来自caption
包的命令那么复杂。
它在内部使用\caption
,这需要\@captype
定义,lstlisting
但同时\fnum@lstlisting
,这还没有正确定义。
重新定义\fnum@lstlisting
asListing~\thelstlisting
可以解决问题。
\documentclass[10pt,journal,compsoc]{IEEEtran}
\usepackage{capt-of}
\usepackage{listings}
\makeatletter
% the 3 caption packages caption.sty, ltcaption.sty, newfloat.sty contain:
\AtBeginDocument{%
\providecommand*\ext@lstlisting{lol}%
\renewcommand{\fnum@lstlisting}{\lstlistingname\nobreakspace\thelstlisting}
}
\makeatother
\begin{document}
\begin{figure}
\centering%
\captionof{lstlisting}{pseudo code with comments}
\begin{minipage}[t]{0.40\textwidth}
\begin{lstlisting}[label=code]
code here
\end{lstlisting}
\end{minipage}%
\hspace{1em}%
\begin{minipage}[t]{0.45\textwidth}
Some comments here
\end{minipage}
\end{figure}
Reference Listing~\ref{code} in text.
\end{document}