位置清單位於文字下方

位置清單位於文字下方

我在使用 lstlisting 突出顯示程式碼時遇到問題。在乳膠程式碼中,我打算將清單顯示在文字下方,但它忽略了程式碼的結構方式並將其放在程式碼上方。如何強製程式碼清單遵循我在乳膠程式碼中編寫的結構和順序?

核心乳膠程式碼:

\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,你似乎基本上定義了一個新的浮動環境。它的內容將會漂浮!如果你不想讓它浮動,你可以使用floats[H]說明符來放置浮動確切地它在你的程式碼中的位置。警告:您不應該這樣做的原因有很多(https://tex.stackexchange.com/a/373265/237192舉一些例子)。

另一種方法是使用placeins'\FloatBarrier來防止浮動浮動越過該障礙,因此您可以在部分標題之後放置浮動浮動。

更好的是:如果你不想讓它浮動,就不要讓它變成浮動。您不需要將其包裝成浮點數,只需使用\begin{lstlisting}[caption=test] ... \end{lstlisting}.這是要走的路。

更多提示:

評論後編輯

實際上有一個真正最小的工作範例:

\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}

結果

相關內容