语境
我正在用 LaTeX 编写一个教程式的文档,介绍如何创建某个基于 Linux 的设备。重新创建该设备的部分工作是用 Bash 或 Python 编写小段代码,并编辑配置文件。
所有这些都应该包含在文档中。当然,为了能够重新创建它,应该知道文件名和文件内容。我喜欢 arch 人员在他们的维基百科,简洁干净:
举例来说,“/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 中看到的,我误用了标题作为文件名。我一般不喜欢这样,但我猜想将标题干净地作为 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) 使用自定义突出显示以不同的方式呈现代码的特定部分。还有许多渲染/样式选项。