Контекст
Я пишу документ-руководство в LaTeX о том, как создать определенное устройство на базе Linux. Часть усилий по воссозданию устройства заключается в написании небольших фрагментов кода на Bash или Python и редактировании файлов конфигурации.
Все это должно быть включено в документ. Чтобы иметь возможность воссоздать его, нужно знать имя файла и его содержимое, конечно. Мне нравится, как это делают ребята из Arch на своемвики, чисто и просто:
Например, «/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, я неправильно использую подпись в качестве имени файла. Мне это в целом не нравится, но я полагаю, что чистое включение подписи в фон 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
package для настройки своих списков. Он может работать с 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) использовать пользовательскую подсветку для отображения определенной части кода по-другому. Также много опций отображения/стиля.