使用 lstlisting 突出显示代码时遇到问题。在 latex 代码中,我本想让列表显示在文本下方,但它忽略了代码的结构,并将其放在代码上方。如何强制代码列表遵循我在 latex 代码中编写的结构和顺序?
核心 Latex 代码:
\documentclass[12pt, a4paper]{article}
%% PACKAGES %%
\usepackage[a4paper,left=1.6cm, right=2cm, top=1.5cm, bottom=0.5cm,includefoot, footskip=30pt]{geometry}
\usepackage[backend=biber, style=iso-numeric, babel=other, urldate=short]{biblatex}
\addbibresource{ref.bib}
\usepackage{url}
\usepackage{float}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{caption}
\usepackage{pdfpages}
\usepackage{setspace}
\usepackage{lipsum}
%% FORMATING %%
\DeclareCaptionType{code}[code][list of code]
\renewcommand{\lstlistingname}{code}
\onehalfspacing
%% CODE COLORS %%
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.97,0.97,0.97}
\lstdefinestyle{mystyle}{
backgroundcolor=\color{backcolour},
commentstyle=\color{codegray},
keywordstyle=\color{codegreen},
numberstyle=\tiny\color{codegray},
stringstyle=\color{codepurple},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2
}
\lstset{style=mystyle}
\setcounter{section}{-1}
\begin{document}
%% START DOCC %%
\section{sample that should be on top}
\lipsum[1]
\begin{center}
\begin{code}
\begin{lstlisting}[language=python, frame=single]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat
ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget,
consectetuer id, vulputate a, magna. Donec vehicula augue eu neque. Pellentesque habitant
morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris ut leo. Cras \end{lstlisting}
\caption[bleh1]{bleh1}
\end{code}
\end{center}
\begin{center}
\begin{code}
\begin{lstlisting}[language=python, frame=single]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat
ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget,
\end{lstlisting}
\caption[bleh2]{bleh2}
\end{code}
\end{center}
%% END OF DOCC %%
\end{document}
输出:
答案1
欢迎来到 TeX.SX!
当你使用时,\DeclareCaptionType
你似乎基本上定义了一个新的浮动环境。它的内容将会浮动!如果你不想让它浮动,你可以使用float
的[H]
说明符将浮动确切地它在你的代码中的位置。警告:有多个理由说明你不应该这样做(https://tex.stackexchange.com/a/373265/237192仅举几例)。
另一种方式是使用placeins
'\FloatBarrier
来阻止浮标跨越该屏障,因此您可以在部分标题之后放置一个。
更好的是:如果你不想让它浮动,就不要让它浮动。你不需要把它包装成浮点数,你可以简单地使用\begin{lstlisting}[caption=test] ... \end{lstlisting}
。这是可行的方法。
更多提示:
- 进一步阅读:将表格/图片放在靠近提及的地方
\begin{center} ... \end{center}
添加不必要的垂直空间。使用\centering
:我应该对图形和表格使用 center 还是 centering ?- 我忘了我想在这里说什么。如果我记起来了,我会修改。
评论后编辑
实际上有一个真正最小的工作示例:
\documentclass[12pt, a4paper]{article}
%% PACKAGES %%
\usepackage{lipsum}
\usepackage{listings}
\lstset{basicstyle=\ttfamily\footnotesize,breaklines=true,captionpos=b}
\begin{document}
\section{sample that should be on top}
\lipsum[1][1-3]
\begin{lstlisting}[language=python, frame=single, caption=This is code 1]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, ...
\end{lstlisting}
\begin{lstlisting}[language=python, frame=single, caption=This is code 2]
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, ...
\end{lstlisting}
\lstlistoflistings
\end{document}