铸造的行号与 tcolorbox 框架重叠

铸造的行号与 tcolorbox 框架重叠

我想对我的代码行进行编号。我正在使用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声明为列表引擎。加载mintedtcolorboxlibrary,已加载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}

在此处输入图片描述

相关内容