Wie zeigt man einen Dateinamen über einem Code-Snippet an, genau wie im Arch-Wiki?

Wie zeigt man einen Dateinamen über einem Code-Snippet an, genau wie im Arch-Wiki?

Kontext

Ich schreibe ein anleitungsähnliches Dokument in LaTeX, in dem ich erkläre, wie man ein bestimmtes Linux-basiertes Gerät erstellt. Ein Teil der Arbeit, das Gerät neu zu erstellen, besteht darin, kleine Codestücke in Bash oder Python zu schreiben und Konfigurationsdateien zu bearbeiten.

All diese Elemente sollten im Dokument enthalten sein. Um es neu erstellen zu können, muss man natürlich den Dateinamen und den Dateiinhalt kennen. Mir gefällt, wie die Arch-Leute das auf ihrenWiki, sauber und einfach:

Ausschnitt aus [arch wiki][1]

Zur Veranschaulichung: „/etc/systemd/system/unit.d/customexec.conf“ ist der Dateiname, während die drei Zeilen darunter der eigentliche Text in der Datei sind.

Schließlich möchte ich, dass der Code syntaxhervorgehoben wird. Ich verwendegeprägtdafür. Ich lege auch Wert auf Zeilennummern. Das erleichtert das Referenzieren erheblich.

Was ich jetzt habe

Ich habe mit mehreren Beispielen herumgespielt, die ich im Internet und in der erstellten Dokumentation gefunden habe. Was ich habe, gefällt mir jedoch immer noch nicht. Hier ist ein 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}

Es wird Folgendes ausgegeben (Ausschnitt der Originalausgabe):

Ergebnis des MWE oben

Wie Sie im MWE sehen können, missbrauche ich die Beschriftung als Dateinamen. Das gefällt mir im Allgemeinen nicht, aber ich vermute, dass es auch nicht in Frage kommt, die Beschriftung sauber in den Hintergrund von Minted einzubinden, da die Beschriftung außerhalb des Geltungsbereichs des Minted-Abschnitts liegt.

Notiz:MWE erfordert Minted 2. Meine Distribution (Kubuntu 14.04) wird mit einer älteren Version ausgeliefert. Ich habe die .sty-Datei hier heruntergeladen: https://raw.githubusercontent.com/gpoore/minted/master/source/minted.sty (leider habe ich nicht genug Punkte, um mehr als zwei Links einzufügen).

Die Frage

Einfach ausgedrückt: Wie komme ich dem Arch-Wiki-Beispiel nahe?

Ich bin mit einer Lösung zufrieden, die Minted nicht verwendet. Die Lösung muss auch nicht unbedingt schön anzusehen sein. Ich überlege gerade, ob ich solche Snippets in einer externen HTML-Datei erstellen und dann einbinden soll. Solange es praktikabel bleibt, ist mir das egal. Das Dokument ist in ein paar Wochen fertig und ich muss nicht weiter daran arbeiten, also ist es nicht so wichtig, dass alles automatisiert und integriert ist.

Vielen Dank im Voraus! Bitte lassen Sie mich wissen, wenn ich Informationen vergessen habe.

Antwort1

Sie können tcolorboxPakete verwenden, um Ihre Einträge zu konfigurieren. Es funktioniert mit minted. Als Nächstes folgt die mehr oder weniger standardmäßige Ausgabe, die einfach an Ihren mintedStil angepasst wurde.

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

Bildbeschreibung hier eingeben

Einige Farb- und Größenanpassungen fehlen, aber das Ergebnis ähnelt eher der vom OP vorgeschlagenen Box

Bildbeschreibung hier eingeben

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

Antwort2

Diese Antwort basiert auf Ignasis erstem Beitrag. Ich begann, ihn zu verfeinern, nur um festzustellen, dass er seine Antwort bereits so bearbeitet hatte, dass sie genau meinen Anforderungen entsprach. Trotzdem, für das, was es wert ist, und in der Hoffnung, dass jemand davon profitiert, hier mein bisheriger Ansatz. Allerdings erfordert er eine neuere Version von tcolorbox als die, die mit Texlive in den Repos geliefert wurde.

Das ist mein Ergebnis, nachdem ich an seinem ersten Beispiel gearbeitet hatte:

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

Das ergibt:

Bildbeschreibung hier eingeben

Antwort3

Die akzeptierte Antwort von Ignasi hat bei mir nicht funktioniert. Das Hinzufügen minted options={python3} innerhalb der \newtcblistingDefinition hat bei mir geholfen.

Antwort4

Wenn Sie eine Antwort mit einem anderen Paket zulassen, verwende ich persönlichlistingsmit gutem Erfolg.

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

Ich habe es noch nicht ausprobiert minted. Mir gefiel, listingswie einfach es war, a) Syntaxhervorhebung für eine domänenspezifische Sprache zu erstellen, die ich verwendete, und b) benutzerdefinierte Hervorhebung zu verwenden, um einen bestimmten Teil des Codes anders darzustellen. Außerdem gibt es viele Darstellungs-/Stiloptionen.

verwandte Informationen