我正在编写一份文档,使用的样式是各部分使用罗马数字,其余部分使用阿拉伯数字。例如,该文档有第 I 节、第 II 节,但有图 5.3、表 4.3。
我读了样式文件,知道它是通过重新定义来实现的\def\thefigure {\@arabic\c@chapter.\@arabic\c@figure}
但是,样式文件没有涵盖这种listing
情况,因此我的所有列表(代码)都变成了这样:
(这是不正确的,因为标题应该是“代码 5.1”)
这里是显示我的代码的乳胶:
\makeatletter
\lst@AddToHook{OnEmptyLine}{\vspace{-0.5\baselineskip}}
\makeatother
\lstinputlisting[
float=tp,
language=Matlab,
caption = {\textbf{SonarMain.m.} The remote main script defines the sensing settings and creates a sensing server.},
label = {\base:code:app_sonar_main},
belowskip=-0.08in,
]{\base/codes/AppSonarMain.m}
在搜索类似问题后,我注意到正确的解决方案可能是:
\renewcommand{\thelstlisting}{\arabic{\thesection}-\arabic{lstlisting}}
但是,使用这个之后什么都没有发生,是不是因为我使用的\lstinputlisting
是 而不是begin{listing}
?
答案1
问题是,这listings
定义了计数器及其格式
\AtBeginDocument
,因此任何更改都必须在此之后应用。以下方法有效。
\documentclass[]{report}
\usepackage{listings}
\makeatletter
\def\thechapter{\@Roman\c@chapter}% just in order to get Roman chapter number leave it out later
\AtBeginDocument{%
\def\thelstlisting{\@arabic\c@chapter.\@arabic\c@lstlisting}}
\makeatother
\begin{document}
\chapter{Foo}
\begin{figure}
\centering
\rule{1cm}{3cm}
\caption{foobar}
\label{fig:foo}
\end{figure}
\begin{lstlisting}[caption=foobarCode]
for i in range(5):
print("foo %i"%(i))
\end{lstlisting}
\end{document}