我想对我的代码行进行编号。我正在使用tcolorbox
环境minted
。
\documentclass[11pt,letterpaper]{article}
\usepackage{minted}
\usepackage{tcolorbox}
\BeforeBeginEnvironment{minted}
{\begin{tcolorbox}[breakable, enhanced]}
\AfterEndEnvironment{minted}
{\end{tcolorbox}}
\begin{document}
\begin{minted}[linenos, breaklines=true, breakbefore=., fontsize=\footnotesize]{c}
#include <stdio.h>
void main ()
{
printf("hello world");
printf("hello world");
printf("hello world");
printf("hello world");
}
\end{minted}
\end{document}
输出如下:
tcolorbox
我想避免帧和行号重叠。
答案1
您可以更改 minted 参数的默认值numsep
。它固定数字和线条之间的距离,使用较低的值将数字移动到边框线的右侧。
顺便说一句,作为环境的替代minted
,您可以使用\newtcblisting
(或\NewTCBListing
)其中minted
声明为列表引擎。加载minted
tcolorboxlibrary,已加载minted
包。
\documentclass[11pt,letterpaper]{article}
%\usepackage{minted}
\usepackage[most, minted]{tcolorbox}
\newtcblisting{myminted}{%
listing engine=minted,
minted language=c,
listing only,
breakable,
enhanced,
minted options = {
linenos,
breaklines=true,
breakbefore=.,
fontsize=\footnotesize,
numbersep=2mm
},
overlay={%
\begin{tcbclipinterior}
\fill[gray!25] (frame.south west) rectangle ([xshift=4mm]frame.north west);
\end{tcbclipinterior}
}
}
\BeforeBeginEnvironment{minted}
{\begin{tcolorbox}[breakable, enhanced]}
\AfterEndEnvironment{minted}
{\end{tcolorbox}}
\begin{document}
\begin{minted}[linenos, breaklines=true, breakbefore=., fontsize=\footnotesize]{c}
#include <stdio.h>
void main ()
{
printf("hello world");
printf("hello world");
printf("hello world");
printf("hello world");
}
\end{minted}
\begin{myminted}
#include <stdio.h>
void main ()
{
printf("hello world");
printf("hello world");
printf("hello world");
printf("hello world");
}
\end{myminted}
\end{document}
更新:可选语言
您可以向命令添加可选参数和强制参数\newtcblisting
,但请小心tcolorbox
文档中的建议:
因此,我倾向于使用myminted
两个参数来声明环境,一个是强制的(语言),另一个是可选的(您想要在初始定义中更改的任何其他内容)。新定义的一个示例如下:
\documentclass[11pt,letterpaper]{article}
%\usepackage{minted}
\usepackage[most, minted]{tcolorbox}
\newtcblisting{myminted}[2][]{%
listing engine=minted,
minted language=#2,
listing only,
breakable,
enhanced,
minted options = {
linenos,
breaklines=true,
breakbefore=.,
fontsize=\footnotesize,
numbersep=2mm
},
overlay={%
\begin{tcbclipinterior}
\fill[gray!25] (frame.south west) rectangle ([xshift=4mm]frame.north west);
\end{tcbclipinterior}
},
#1
}
\begin{document}
\begin{myminted}{c}
#include <stdio.h>
void main ()
{
printf("hello world");
printf("hello world");
printf("hello world");
printf("hello world");
}
\end{myminted}
\begin{myminted}[colframe=red,colback=blue!15,sharp corners]{java}
public class HelloWorld {
// A 'Hello World' in Java
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
\end{myminted}
\end{document}
答案2
您boxsep
可以设置边框和数字之间的空间宽度。
\documentclass[11pt,letterpaper]{article}
\usepackage{minted}
\usepackage[most]{tcolorbox}
\tcbuselibrary{breakable}
\tcbuselibrary{minted}
\BeforeBeginEnvironment{minted}
{\begin{tcolorbox}[breakable, enhanced, boxsep=10pt]}
\AfterEndEnvironment{minted}
{\end{tcolorbox}}
\begin{document}
\begin{minted}[linenos, breaklines=true, breakbefore=., fontsize=\footnotesize]{c}
#include <stdio.h>
void main ()
{
printf("hello world");
printf("hello world");
printf("hello world");
printf("hello world");
}
\end{minted}
\end{document}