
Tengo problemas al usar lstlisting para resaltar el código. En el código de látex, tenía la intención de que la lista apareciera debajo del texto, pero ignora la forma en que está estructurado el código y lo coloca encima del código. ¿Cómo fuerzo que los listados de códigos obedezcan la estructura y el orden que escribo en el código de látex?
El código central del 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}
Producción:
Respuesta1
¡Bienvenido a TeX.SX!
Cuando lo usas, \DeclareCaptionType
parece que básicamente defines un nuevo entorno flotante. ¡Su contenido flotará! Si no quieres que flote, puedes usar float
el [H]
especificador para poner el flotador.exactamentedonde está en tu código.Advertencia:Hay múltiples razones por las que no deberías hacerlo (https://tex.stackexchange.com/a/373265/237192por nombrar algunos).
Otra forma es usar placeins
' \FloatBarrier
que evita que los flotadores floten a través de esa barrera, por lo que podrías colocar uno después del título de tu sección.
Aún mejor: si no quieres que flote, no lo hagas flotar. No es necesario envolverlo en un flotador, simplemente puede usarlo \begin{lstlisting}[caption=test] ... \end{lstlisting}
. Este es el camino a seguir.
Algunas sugerencias más:
- Otras lecturas:Mantener tablas/figuras cerca de donde se mencionan.
\begin{center} ... \end{center}
añade espacio vertical no deseado. Usar\centering
:¿Debo utilizar centrar o centrar para figuras y tablas?- Olvidé lo que quería decir aquí. Lo editaré si lo recuerdo.
Editar después del comentario
Para tener realmente un ejemplo de trabajo 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}