我在背面有以下代码:
\begin{lstlisting}[caption={Código inicial para o sistema de arquivos},label={lst:Figura1}]
abstract sig FSObject { }
sig File, Dir extends FSObject { }
sig FileSystem {
root: Dir,
live: set FSObject,
contents: Dir lone-> FSObject,
parent: FSObject ->lone Dir
}{
no root.parent
live in root.*contents
parent = ~contents
}
pred example { }
run example for exactly 1 FileSystem, 4 FSObject
\end{lstlisting}
Ao executar o código da Figura \ref{lst:Figura1} no interpretador Alloy, diversas instâncias são encontradas. A Figura \ref{fig:Figura2} apresenta uma instância selecionada para análise.
\begin{figure}[ht]
\centering
\includegraphics[width=.5\textwidth]{MyFigure2.jpg}
\caption{Contra-exemplo na modelagem}
\label{fig:Figura2}
\end{figure}
最终开始对图像和列表 (代码) 进行计数,如下图所示,我用蓝色突出显示了对我来说错误的内容。我希望有一个计数器,就好像 lstlisting 的值为 1,而图像的值为 2。
有可能吗?我该如何实现?
答案1
以下是一个快速而粗略的方法。我只是将计数器重新定义为与用于数字的寄存器相同的寄存器。也许更好的方法是修补以\@begindocumenthook
删除\newcounter{lstlisting}
并添加\newcounter
除寄存器分配之外的所有操作。
\documentclass[]{article}
\usepackage{listings}
\usepackage[]{graphicx}
%% include this in your preamble after you load listings
\makeatletter
\AtBeginDocument{\let\c@lstlisting\c@figure}
\makeatother
%%
\begin{document}
\begin{lstlisting}[caption=foo,label=lst:bar,float]
this listing
\end{lstlisting}
Listing \ref{lst:bar} and figure \ref{fig:bar}
\begin{figure}% >>>
\centering
\includegraphics{example-image-duck}%
\caption
{%
A caption%
\label{fig:bar}%
}%
\end{figure}% <<<
\end{document}