如何在XeLaTeX的list of listings中为每个条目添加CODE前缀
解决List of Listings条目开头添加“CODE”字样的问题
你遇到的问题主要有两个原因:一是你修改\thelstlisting的时机太晚(在插入代码之后),此时List of Listings的条目已经生成,修改不会生效;二是当设置numberbychapter=true时,默认的\thelstlisting包含章节号,你直接用\arabic{lstlisting}会丢失这部分结构。
下面是修正后的最小工作示例(MWE),可以实现你想要的「CODE 1.1 How to do NNN .............. 1」效果:
\NeedsTeXFormat{LaTeX2e} \documentclass{report} \RequirePackage[spanish,english]{babel} \RequirePackage{inputenc} \RequirePackage{caption} \RequirePackage{listings} \RequirePackage{hyperref} \RequirePackage[all]{hypcap} % 提前重新定义lstlisting的编号格式,包含CODE和章节号 \renewcommand{\thelstlisting}{CODE \thechapter.\arabic{lstlisting}} \renewcommand{\lstlistlistingname}{\centerline{My own title for codes}} \renewcommand{\lstlistingname}{Source code example} \begin{document} \chapter{Introduction} \section{History} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vel hendrerit massa, vitae aliquam est. Nullam mauris lacus, scelerisque non risus sed, sagittis rutrum mi. Quisque malesuada sagittis gravida. Duis placerat interdum dui. Etiam eu nibh vel sapien laoreet posuere. Cras vel auctor arcu. % 这里numberbychapter=true可以保留,因为我们的\thelstlisting已经包含了章节号 \lstinputlisting[language=Python, numberbychapter=true, frame=single, caption={How to do NNN}]{code.py} Metus aliquam rutrum gravida. Nullam dapibus accumsan odio ut maximus. Aliquam bibendum felis nisl, eu faucibus ante placerat vitae. Suspendisse turpis est, ultricies a posuere non, pellentesque nec nunc. Sed pharetra quis sem nec tincidunt. Donec ultricies felis id risus faucibus. \lstlistoflistings \end{document}
关键说明:
- 修改时机:把
\renewcommand{\thelstlisting}放在\begin{document}之前、加载listings包之后,这样所有代码块的编号都会应用这个格式,生成List of Listings条目时也会使用这个编号。 - 编号结构:定义
\thelstlisting时使用\thechapter.\arabic{lstlisting},保留了章节号+章内编号的结构,同时在开头加上「CODE 」字样。 - 包加载顺序:注意把
hyperref和hypcap放在listings之后加载,这是LaTeX包加载的常见最佳实践,避免潜在的冲突。
这样编译后,你的List of Listings里的条目就会以「CODE 1.1」开头,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Andrés Fernández-León
相关产品推荐
相关产品推荐

