Contexto
Estoy escribiendo un documento similar a un tutorial en LaTeX sobre cómo crear un determinado dispositivo basado en Linux. Parte del esfuerzo de recrear el dispositivo consiste en escribir pequeños fragmentos de código, ya sea en Bash o Python, y editar archivos de configuración.
Todo esto debe incluirse en el documento. Para poder recrearlo, por supuesto, se debe conocer el nombre del archivo y su contenido. Me gusta la forma en que los chicos del arco lo hacen en suswiki, limpio y sencillo:
Por ejemplo, "/etc/systemd/system/unit.d/customexec.conf" es el nombre del archivo, mientras que las tres líneas siguientes son el texto real del archivo.
Finalmente, quiero que la sintaxis del código esté resaltada. yo sueloacuñadopara eso. También valoro tener números de línea. Hace que hacer referencia a ellos sea mucho más fácil.
lo que tengo ahora
He jugado con varios ejemplos que encontré en Internet y la documentación acuñada. Aunque todavía no me gusta lo que tengo. Aquí hay un MWE:
\documentclass{report}
\usepackage[table,usenames,dvipsnames,hyperref]{xcolor}
\usepackage{listings}
\usepackage{caption}
\DeclareCaptionStyle{mystyle}%
[margin=2mm,justification=raggedright]%
{font=footnotesize,labelfont=sc,margin={100mm,10mm}}
\DeclareCaptionFormat{continued}{File#2#3}
\captionsetup{style=mystyle, indention=10cm, format=continued}
\usepackage[newfloat]{minted}
\SetupFloatingEnvironment{listing}{name=File}
\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
% This is the bash profile used throughout the document.
% I've also got one for Python and console text (regular commands)
\newminted[bashcode]{bash}{
bgcolor=mintedbackground,
fontfamily=tt,
linenos=true,
numberblanklines=true,
numbersep=12pt,
numbersep=5pt,
gobble=0,
frame=leftline,
framesep=2mm,
funcnamehighlighting=true,
tabsize=4,
obeytabs=false,
mathescape=false
samepage=false,
showspaces=false,
showtabs =false,
texcl=false,
baselinestretch=1.2,
fontsize=\footnotesize,
breaklines=true,
}
\begin{document}
\begin{listing}[H]
\caption{/files/location/on/system.sh}
\begin{bashcode}
#!/bin/bash
echo "I am a bash file"
\end{bashcode}
\end{listing}
\end{document}
Genera lo siguiente (recorte de la salida original):
Como puede ver en MWE, estoy haciendo un mal uso del título como nombre de archivo. No me gusta esto en general, pero supongo que hacer que el título forme parte del fondo de Minted también está fuera de discusión, ya que el título está fuera del alcance de la sección Minted.
Nota:el MWE requiere minted 2. Mi distribución (Kubuntu 14.04) viene con una versión anterior. Descargué el archivo .sty aquí: https://raw.githubusercontent.com/gpoore/minted/master/source/minted.sty (lo siento, no tengo suficientes puntos para incluir más de dos enlaces).
La pregunta
En pocas palabras, ¿cómo puedo acercarme al ejemplo de Arch Wiki?
Estoy bien con una solución que no utiliza minted. La solución tampoco tiene por qué ser agradable a la vista. Ahora estoy pensando en crear dichos fragmentos en un archivo HTML externo y luego incluirlos. Todo está bien para mí siempre y cuando siga siendo viable. El documento estará terminado en unas pocas semanas y no necesito seguir trabajando en él, por lo que tener todo automatizado e integrado no es muy importante.
¡Gracias de antemano! Por favor, avíseme si no incluí alguna información.
Respuesta1
Puede utilizar tcolorbox
el paquete para configurar sus listados. Puede funcionar con minted
. Lo siguiente sería la salida más o menos predeterminada, personalizada según su minted
estilo.
\documentclass{report}
\usepackage[skins,minted]{tcolorbox}
\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
% This is the bash profile used throughout the document.
% I've also got one for Python and console text (regular commands)
\setminted[bash]{
bgcolor=mintedbackground,
fontfamily=tt,
linenos=true,
numberblanklines=true,
numbersep=12pt,
numbersep=5pt,
gobble=0,
frame=leftline,
framesep=2mm,
funcnamehighlighting=true,
tabsize=4,
obeytabs=false,
mathescape=false
samepage=false,
showspaces=false,
showtabs =false,
texcl=false,
baselinestretch=1.2,
fontsize=\footnotesize,
breaklines=true,
}
\newtcblisting{myminted}[2][]{listing engine=minted, listing only,#1, title=#2, minted language=bash, colback=mintedbackground}
\begin{document}
\begin{myminted}{/files/location/on/system.sh}
#!/bin/bash
echo "I am a bash file"
\end{myminted}
\end{document}
Faltan algunos ajustes de color y tamaño, pero el resultado es más similar al cuadro propuesto por OP
\documentclass{report}
\usepackage[skins,minted]{tcolorbox}
\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
\definecolor{mintedframe}{rgb}{0.70,0.85,0.95}
% This is the bash profile used throughout the document.
% I've also got one for Python and console text (regular commands)
\setminted[bash]{
bgcolor=mintedbackground,
fontfamily=tt,
linenos=true,
numberblanklines=true,
numbersep=12pt,
numbersep=5pt,
gobble=0,
frame=leftline,
framesep=2mm,
funcnamehighlighting=true,
tabsize=4,
obeytabs=false,
mathescape=false
samepage=false,
showspaces=false,
showtabs =false,
texcl=false,
baselinestretch=1.2,
fontsize=\footnotesize,
breaklines=true,
}
\newtcblisting{myminted}[2][]{enhanced, listing engine=minted,
listing only,#1, title=#2, minted language=bash,
coltitle=mintedbackground!30!black,
fonttitle=\ttfamily\footnotesize,
sharp corners, top=0mm, bottom=0mm,
title code={\path[draw=mintedframe,dashed, fill=mintedbackground](title.south west)--(title.south east);},
frame code={\path[draw=mintedframe, fill=mintedbackground](frame.south west) rectangle (frame.north east);}
}
\begin{document}
\begin{myminted}{/files/location/on/system.sh}
#!/bin/bash
echo "I am a bash file"
\end{myminted}
\end{document}
Respuesta2
Esta respuesta se basa en la publicación inicial de Ignasi. Comencé a refinarlo solo para ver que ya había editado su respuesta para que fuera exactamente lo que necesitaba. Aún así, por si sirve de algo, y con la esperanza de que alguien se beneficie, este es mi enfoque hasta el momento. Sin embargo, requiere una versión más nueva de tcolorbox que la que se envió con texlive en los repositorios.
Esto es lo que se me ocurrió después de trabajar en su primer ejemplo:
\documentclass{report}
\usepackage[skins,minted]{tcolorbox}
\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
% This is the bash profile used throughout the document.
% I've also got one for Python and console text (regular commands)
\setminted[bash]{
bgcolor=mintedbackground,
fontfamily=tt,
linenos=true,
numberblanklines=true,
numbersep=12pt,
numbersep=5pt,
gobble=0,
frame=leftline,
framesep=2mm,
funcnamehighlighting=true,
tabsize=4,
obeytabs=false,
mathescape=false
samepage=false,
showspaces=false,
showtabs =false,
texcl=false,
baselinestretch=1.2,
fontsize=\footnotesize,
breaklines=true,
}
\newtcblisting{myminted}[2][]{minted language=bash,
enhanced, listing engine=minted,
listing only, #1, title=#2,
colback=mintedbackground, colbacktitle=mintedbackground, coltitle=darkgray,
arc=0pt,outer arc=0pt,
boxrule=0mm,
toptitle=1mm, bottomtitle=1mm,
titlerule=1pt, colframe=gray, titlerule style={mintedbackground, dashed}
}
\begin{document}
\begin{myminted}{/files/location/on/system.sh}
#!/bin/bash
echo "I am a bash file"
\end{myminted}
\end{document}
Lo que da:
Respuesta3
La respuesta aceptada por Ignasi no me funcionó. Agregar
minted options={python3}
dentro de la \newtcblisting
definición funcionó para mí.
Respuesta4
Si permite una respuesta usando un paquete diferente, personalmente estoy usandolistings
con buenos resultados.
\documentclass{report}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[title=/files/location/on/system.sh,language=bash,numbers=left]
#!/bin/bash
echo "I am a bash file"
\end{listing}
\end{document}
No lo he probado minted
todavía; Me gustó listings
lo fácil que era crear a) resaltado de sintaxis para un lenguaje específico de dominio que estaba usando, b) usar resaltado personalizado para representar una parte específica del código de manera diferente. También hay muchas opciones de renderizado/estilo.