如何像在 arch wiki 上一樣在程式碼片段上方顯示檔案名稱?

如何像在 arch wiki 上一樣在程式碼片段上方顯示檔案名稱?

情境

我正在用 LaTeX 編寫一個類似教程的文檔,介紹如何建立某個基於 Linux 的裝置。重新建立裝置的部分工作是用 Bash 或 Python 編寫小段程式碼,並編輯設定檔。

所有這些都應該包含在文件中。當然,為了能夠重新創建它,人們應該知道檔案名稱和檔案內容。我喜歡拱門人在他們的身上做的方式維基百科,乾淨簡單:

來自 [arch wiki][1] 的片段

舉例來說,「/etc/systemd/system/unit.d/customexec.conf」是檔名,而下面的三行是檔案中的實際文字。

最後,我希望程式碼能夠語法突出顯示。我用鑄造的為了那個原因。我也很重視行號。這使得引用它們變得更加容易。

我現在擁有的

我嘗試過在互聯網上找到的幾個示例和創建的文檔。但我仍然不喜歡我所擁有的。這是一個 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。我在這裡下載了 .sty 檔案:https://raw.githubusercontent.com/gpoore/minted/master/source/minted.sty(抱歉,沒有足夠的點數來包含兩個以上的連結)。

問題

簡而言之,我如何接近 arch wiki 範例?

我對不使用 minted 的解決方案感到滿意。該解決方案也不需要美觀。我現在正在考慮在外部 HTML 文件中創建此類片段,然後將其包含在內。只要它仍然可行,對我來說一切都很好。

先致謝!如果我未能包含一些訊息,請告訴我。

答案1

您可以使用tcolorbox套件來配置您的清單。它可以與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}

在此輸入影像描述

缺少一些顏色和尺寸調整,但結果與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}

答案2

這個答案是基於 Ignasi 的最初帖子。我開始完善它,結果發現他已經編輯了他的答案,使其完全符合我的需要。儘管如此,無論它的價值如何,並希望有人能從中受益,這是我迄今為止的方法。不過,它需要比儲存庫中隨 texlive 附帶的版本更新的 tcolorbox 版本。

這是我在研究他的第一個例子後想到的:

\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)使用自定義突出顯示以不同的方式呈現程式碼的特定部分。還有很多渲染/樣式選項。

相關內容