リストをテキストの下に配置

リストをテキストの下に配置

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もう 1 つの方法は、フロートがその障壁を越えてフロートしないようにする'を使用することです\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}

結果

関連情報