\lstinputlisting 不允许我更改标题样式(阿拉伯语而不是罗马语)

\lstinputlisting 不允许我更改标题样式(阿拉伯语而不是罗马语)

我正在编写一份文档,使用的样式是各部分使用罗马数字,其余部分使用阿拉伯数字。例如,该文档有第 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}

相关内容