如何像在 arch wiki 上一样在代码片段上方显示文件名?

如何像在 arch wiki 上一样在代码片段上方显示文件名?

语境

我正在用 LaTeX 编写一个教程式的文档,介绍如何创建某个基于 Linux 的设备。重新创建该设备的部分工作是用 Bash 或 Python 编写小段代码,并编辑配置文件。

所有这些都应该包含在文档中。当然,为了能够重新创建它,应该知道文件名和文件内容。我喜欢 arch 人员在他们的维基百科,简洁干净:

摘自 [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。我的发行版 (Kubuntu 14.04) 附带的是旧版本。我在这里下载了 .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

Ignasi 接受的答案对我不起作用。 在定义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) 使用自定义突出显示以不同的方式呈现代码的特定部分。还有许多渲染/样式选项。

相关内容