![附录中的图表/列表的正确编号](https://linux22.com/image/335953/%E9%99%84%E5%BD%95%E4%B8%AD%E7%9A%84%E5%9B%BE%E8%A1%A8%2F%E5%88%97%E8%A1%A8%E7%9A%84%E6%AD%A3%E7%A1%AE%E7%BC%96%E5%8F%B7.png)
\section{First Appendix}
在我的论文中,我有几个附录,它们通过、等 latex 语句定义\section{Second Appendix}
。附录具有以下标题(因此,在目录中显示如下):第一个附录,B 第二附录, ETC。
这些附录包括清单和图表。目前,附录中的清单编号如下:
- A.1 附录 A 的第一个清单
- A.2 附录 A 的第二次清单
- B.3 附录 B 的首次列出
- C.4 附录 C 的首次列出
不过,我希望有以下编号(我认为它更直观,看起来更美观):
- A.1 附录 A 的第一个清单
- A.2 附录 A 的第二次清单
- B.1 附录 B 的首次列出
- C.1 附录 C 的首次列出
换句话说,\section{Second Appendix}
我希望在每次添加新的附录(通过 定义)后重置列表/图表/表格计数器。在论文的主要内容中,这是自动完成的。我不知道为什么附录中没有这种情况。
请注意,我使用以下命令来实现附录中图形/列表/表格的所需编号:
\renewcommand{\thelstlisting}{\Alph{section}.\arabic{lstlisting}}
\renewcommand\thetable{\Alph{section}.\arabic{table}}
\renewcommand\thefigure{\Alph{section}.\arabic{figure}}
答案1
使用以下命令将计数器添加lstlisting
到计数器的重置列表中section
\counterwithout*{lstlisting}{section}
——*
阻止重新定义\thelstlisting
!
说
\makeatletter
\g@addto@macro\appendix{%
\counterwithin*{lstlisting}{section}%
}
\makeatother
\appendix
如果使用的话,这将自动启用这种特定的重置样式。
\documentclass{article}
\usepackage{listings}
\usepackage{chngcntr}
\AtBeginDocument{%
\renewcommand{\thelstlisting}{\Alph{section}.\arabic{lstlisting}}
\renewcommand\thetable{\Alph{section}.\arabic{table}}
\renewcommand\thefigure{\Alph{section}.\arabic{figure}}
}
%Automatically change the driver counter for reset:
\makeatletter
\g@addto@macro\appendix{%
\counterwithin*{lstlisting}{section}%
}
\makeatother
\begin{document}
\appendix
\section{Foo}
\begin{lstlisting}[language={C},caption={Foo}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf("Hello World!\n");
return(0);
}
\end{lstlisting}
\begin{lstlisting}[language={C},caption={Foo}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf("Hello World!\n");
return(0);
}
\end{lstlisting}
\section{Foobar}
\begin{lstlisting}[language={C},caption={Foo}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf("Hello World!\n");
return(0);
}
\end{lstlisting}
\section{More foobar}
\begin{lstlisting}[language={C},caption={Foo}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf("Hello World!\n");
return(0);
}
\end{lstlisting}
\end{document}
答案2
我刚刚在论文中遇到了同样的“问题”,即非直观的编号。解决方案(灵感来自这\appendix
) 是在 之后,但在 第一个section
和之前重置计数器lstlisting
。
\renewcommand\thesection{\Alph{section}}
\renewcommand\thelstlisting{\thesection.\arabic{lstlisting}}
\setcounter{lstlisting}{0}
此外,因为我不想手动重置每个计数器section
,所以我使用\sectionbreak
包中的titlesec
,它允许人们在每个部分开始之前定义命令。我添加了计数器重置,如下所示
\newcommand{\sectionbreak}{\setcounter{lstlisting}{0}}
完整的 MWE 会喜欢这个(也感谢@Christian Hupfer)
\documentclass{article}
\usepackage{listings}
\usepackage{titlesec}
\begin{document}
\appendix
\renewcommand\thesection{\Alph{section}}
\renewcommand\thelstlisting{\thesection.\arabic{lstlisting}}
\newcommand{\sectionbreak}{\setcounter{lstlisting}{0}} % to reset counter for listings before each new section
\section{First appendix}
Some text.
\begin{lstlisting}[language={C},caption={Foo1}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf(``Hello World!\n'');
return(0);
}
\end{lstlisting}
\begin{lstlisting}[language={C},caption={Foo2}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf(``Hello World!\n'');
return(0);
}
\end{lstlisting}
\section{Second appendix}
Some more text.
\begin{lstlisting}[language={C},caption={Foo3}]
#include<stdio.h>
int main(int argc,char **argv)
{
printf(``Hello World!\n'');
return(0);
}
\end{lstlisting}
\end{document}
重要的提示:看来你需要一些文字即可section
开始\sectionbreak
工作。
我不太确定这是一个解决方案还是一个变通方法,但它对我来说是有效的。
顺便说一句,这也适用于figure
和table
。