Como mostrar um nome de arquivo acima de um trecho de código, como no arch wiki?

Como mostrar um nome de arquivo acima de um trecho de código, como no arch wiki?

Contexto

Estou escrevendo um documento semelhante a um tutorial em LaTeX sobre como criar um determinado dispositivo baseado em Linux. Parte do esforço de recriar o dispositivo é escrever pequenos trechos de código, em Bash ou Python, e editar arquivos de configuração.

Tudo isso deve ser incluído no documento. Para poder recriá-lo, é necessário saber o nome do arquivo e seu conteúdo, é claro. Eu gosto do jeito que os caras do arco fazem isso em seuswiki, limpo e simples:

Trecho de [archwiki][1]

Para exemplificar, "/etc/systemd/system/unit.d/customexec.conf" é o nome do arquivo, enquanto as três linhas abaixo são o texto real do arquivo.

Finalmente, quero que o código seja destacado pela sintaxe. eu usocunhadopor isso. Também valorizo ​​​​ter números de linha. Isso torna muito mais fácil referenciá-los.

O que eu tenho agora

Brinquei com vários exemplos que encontrei na internet e na documentação criada. Eu ainda não gosto do que tenho. Aqui está um 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}

Ele produz o seguinte (recorte da saída original):

Resultado do MWE acima

Como você pode ver no MWE, estou usando indevidamente a legenda como nome de arquivo. Não gosto disso em geral, mas acho que tornar a legenda parte do plano de fundo cunhado também está fora de questão, pois a legenda está fora do escopo da seção cunhada.

Observação:o MWE requer o minted 2. Minha distribuição (Kubuntu 14.04) vem com uma versão mais antiga. Baixei o arquivo .sty aqui: https://raw.githubusercontent.com/gpoore/minted/master/source/minted.sty (desculpe, não tenho pontos suficientes para incluir mais de dois links).

A questão

Simplificando, como chego perto do exemplo do arch wiki?

Estou bem com uma solução que não faz uso de cunhado. A solução também não precisa ser agradável à vista. Só agora estou pensando em criar esses trechos em um arquivo HTML externo e depois incluí-los. Para mim, tudo bem, desde que continue viável. O documento fica concluído em algumas semanas e não preciso continuar trabalhando nele, portanto, ter tudo automatizado e integrado não é muito importante.

Desde já, obrigado! Informe-me se não incluí alguma informação.

Responder1

Você pode usar tcolorboxo pacote para configurar suas listagens. Pode funcionar com minted. A seguir estaria a saída mais ou menos padrão personalizada de acordo com seu mintedestilo.

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

insira a descrição da imagem aqui

Faltam alguns ajustes de cor e tamanho, mas o resultado é mais parecido com a caixa proposta pelo OP

insira a descrição da imagem aqui

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

Responder2

Esta resposta é baseada na postagem inicial de Ignasi. Comecei a refiná-lo apenas para ver que ele já havia editado sua resposta para ser exatamente o que eu precisava. Ainda assim, pelo que vale, e esperando que alguém se beneficie com isso, aqui está minha abordagem até agora. No entanto, requer uma versão mais recente do tcolorbox do que aquela fornecida com o texlive nos repositórios.

Isto é o que descobri depois de trabalhar em seu primeiro exemplo:

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

Que dá:

insira a descrição da imagem aqui

Responder3

A resposta aceita por Ignasi não funcionou para mim. Adicionar minted options={python3} dentro da \newtcblistingdefinição funcionou para mim.

Responder4

Se você permitir uma resposta usando um pacote diferente, pessoalmente estou usandolistingscom bons 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}

Ainda não tentei minted; Gostei listingsda facilidade de criar a) destaque de sintaxe para uma linguagem específica de domínio que eu estava usando, b) usar realce personalizado para renderizar uma parte específica do código de maneira diferente. Muitas opções de renderização/estilo também.

informação relacionada