
Estou tendo problemas ao usar o lstlisting para destacar o código. No código latex pretendi que a listagem aparecesse abaixo do texto, mas desconsidera a forma como o código está estruturado e a coloca acima do código. Como faço para forçar as listagens de código a obedecerem à estrutura e ordem que escrevo no código látex?
O código principal do látex:
\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}
Saída:
Responder1
Bem-vindo ao TeX.SX!
Quando você usa \DeclareCaptionType
, parece basicamente definir um novo ambiente flutuante. Seu conteúdo irá, bem, flutuar! Se você não quiser que ele flutue, você pode usar float
o [H]
especificador para colocar o floatexatamenteonde está no seu código.Aviso:Existem vários motivos pelos quais você não deve fazer isso (https://tex.stackexchange.com/a/373265/237192para citar alguns).
Outra maneira é usar placeins
' \FloatBarrier
que evita que os carros alegóricos flutuem através dessa barreira, para que você possa colocar um após o título da seção.
Melhor ainda: se você não quer que ele flutue, não faça dele um flutuador. Você não precisa envolvê-lo em um float, você pode simplesmente usar \begin{lstlisting}[caption=test] ... \end{lstlisting}
. Este é o caminho a seguir.
Mais algumas dicas:
- Leitura adicional:Manter tabelas/figuras próximas de onde são mencionadas
\begin{center} ... \end{center}
adiciona espaço vertical indesejado. Usar\centering
:Devo usar centralização ou centralização para figuras e tabelas?- Esqueci o que queria dizer aqui. Vou editar se me lembrar.
Editar após comentário
Para realmente ter um exemplo funcional mínimo:
\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}