Как отобразить имя файла над фрагментом кода, как в Arch Wiki?

Как отобразить имя файла над фрагментом кода, как в Arch Wiki?

Контекст

Я пишу документ-руководство в LaTeX о том, как создать определенное устройство на базе Linux. Часть усилий по воссозданию устройства заключается в написании небольших фрагментов кода на Bash или Python и редактировании файлов конфигурации.

Все это должно быть включено в документ. Чтобы иметь возможность воссоздать его, нужно знать имя файла и его содержимое, конечно. Мне нравится, как это делают ребята из Arch на своемвики, чисто и просто:

Фрагмент из [arch wiki][1]

Например, «/etc/systemd/system/unit.d/customexec.conf» — это имя файла, а три строки ниже — это фактический текст в файле.

Наконец, я хочу, чтобы код был подсвечен синтаксисом. Я используюотчеканенныйдля этого. Я также ценю наличие номеров строк. Это значительно упрощает ссылки на них.

Что я имею сейчас

Я поигрался с несколькими примерами, которые нашел в интернете, и с документацией Minted. Но то, что у меня есть, мне все равно не нравится. Вот 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}

Выводится следующее (вырезка из исходного вывода):

Результат MWE выше

Как вы можете видеть в MWE, я неправильно использую подпись в качестве имени файла. Мне это в целом не нравится, но я полагаю, что чистое включение подписи в фон minted также исключено, поскольку подпись выходит за рамки раздела minted.

Примечание:MWE требует minted 2. Мой дистрибутив (Kubuntu 14.04) поставляется со старой версией. Я скачал файл .sty здесь: https://raw.githubusercontent.com/gpoore/minted/master/source/minted.sty (извините, не хватает баллов, чтобы включить больше двух ссылок).

Вопрос

Проще говоря, как мне приблизиться к примеру Arch Wiki?

Меня устроит решение, не использующее minted. Решение также не должно быть красивым. Я как раз сейчас думаю о создании таких фрагментов во внешнем HTML-файле и их включении. Меня все устраивает, пока это остается работоспособным. Документ будет готов через несколько недель, и мне не нужно продолжать над ним работать, поэтому автоматизация и интеграция всего не так уж и важны.

Спасибо заранее! Пожалуйста, дайте мне знать, если я не указал какую-то информацию.

решение1

Вы можете использовать tcolorboxpackage для настройки своих списков. Он может работать с minted. Далее будет более или менее стандартный вывод, просто настроенный под ваш mintedстиль.

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

введите описание изображения здесь

Некоторые настройки цвета и размера отсутствуют, но результат больше похож на предложенный автором вариант.

введите описание изображения здесь

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

решение2

Этот ответ основан на первоначальном посте Игнаси. Я начал его дорабатывать, но увидел, что он уже отредактировал свой ответ так, чтобы он был именно тем, что мне нужно. Тем не менее, если это имеет значение и кто-то извлечет из этого пользу, вот мой подход на данный момент. Для этого требуется более новая версия tcolorbox, чем та, что поставляется с texlive в репозиториях.

Вот что у меня получилось после работы над его первым примером:

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

Который дает:

введите описание изображения здесь

решение3

Принятый ответ Игнаси не сработал для меня. Добавление minted options={python3} внутрь \newtcblistingопределения сработало для меня.

решение4

Если вы разрешаете ответ с использованием другого пакета, лично я используюlistingsс хорошим эффектом.

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

Я еще не пробовал minted; мне понравилось, listingsкак легко было создать a) подсветку синтаксиса для используемого мной доменно-специфического языка, b) использовать пользовательскую подсветку для отображения определенной части кода по-другому. Также много опций отображения/стиля.

Связанный контент