Minted 在到达页面末尾时不会拆分代码

Minted 在到达页面末尾时不会拆分代码

我正在尝试为 minted 制作一个自定义模板,其中包含背景颜色、行号、标题等。但是,我在页面结尾时遇到了问题。代码不会拆分到新页面,而是继续并“退出”页面。

在此处输入图片描述

\documentclass{article}

\usepackage[skins,minted,breakable]{tcolorbox}

\BeforeBeginEnvironment{minted}{\vspace{0.8em}}
\AfterEndEnvironment{minted}{\vspace{0.8em}}


\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
\definecolor{mintedframe}{rgb}{0.52,0.54,0.66}

\setminted{
    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,
}


\renewtcblisting{minted}[3][]{
enhanced,
breakable,% Allow page breaks
listing engine=minted,
listing only,#1, title=#3, minted language=#2,
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);}
}

\title{Résumé}

\begin{document}



\pagenumbering{arabic} 


\section{Pointeurs}
On appelle Lvalue (left value) tout objet pouvant être placé à gauche d'un opérateur d'affectation. Une Lvalue est caractérisée par :
\begin{itemize}
    \item son adresse, c'est-à-dire l'adresse-mémoire à partir de laquelle l'objet est stocké ;
    \item sa valeur, c'est-à-dire ce qui est stocké à cette adresse.
\end{itemize}


Un pointeur est un objet (Lvalue) dont la valeur est égale à l'adresse d'un autre objet. 

\subsection{Opérations}
La valeur d'un pointeur étant un entier, on peut lui appliquer un certain nombre d'opérateurs arithmétiques classiques. Les seules opérations arithmétiques valides sur les pointeurs sont :
\begin{itemize}
    \item l'addition d'un entier à un pointeur. Le résultat est un pointeur de même type que le pointeur de départ ;
    \item la soustraction d'un entier à un pointeur. Le résultat est un pointeur de même type que le pointeur de départ ;
    \item la différence de deux pointeurs pointant tous deux vers des objets de même type. Le résultat est un entier. 
 \end{itemize}   
\section{Thread}
\subsection{Subsection}
\begin{minted}{c}{kernel.h}
Include stdio.h

enum kernel_states {
    KERNEL_TERMINATED,
    KERNEL_RUNNING,
    KERNEL_READY,
    KERNEL_BLOCKED
 }

struct kernel_context {
    uint32_t regs[15];
    uint32_t psr;
}

struct kernel_tcb {
    struct kernel_context context;
    enum kernel_steates state;
    struct kernel_tcb* t_next;
    struct kernel_tcb* s_next;
    int32_t id;
    char name[32];
    uint32_t stack_size;
    uint32_t stack[] //défini au runtime avec un malloc
}

Extern …
\end{minted}

\#R0 : context of former thread

\#R1 : context of new thread
\begin{minted}{gas}{kernel\_asm.S}
.text
.global kernel_transfer

kernel_transfer:
    nop
    stmia   r0, {r0-r12,sp,lr}
    mrs     r4,cpsr
    str     r4,[r0,#15*4]
    ldr     r4,[r1,#15*4]
    msr     cpsr, r4
    ldmia   r1,{r0-r12,sp,pc]

\end{minted}
\begin{minted}{c}{kernel.c}
extern void kernel_transfer(
    struct kernel_context* former;
    struct kernel_context* new;s
);

static struct kernel_tcb idle_tab = {
    .state = KERNEL_RUNNING;
    .t_next = &idle_task;
    .id = 0;
    .name = "idle";
    .stack_size = 0;
};

static struct kernel_tcb* running_task = &idle_task;
static int32_t task_id = 1;

// Place next task to the list
void kernel_add_tcb(struct kernel_tcb){
    tcb->t_next = idle_task.t_next;
    idle_task.t.next = tcb;
}

struct kernel_tab" kernel_new_tcb(uint32_t stack_size, const char* name){
    struct kernel_tcb* tcb = malloc (sizeof(struct kernel_tab) + stack_size);
    tcb->id = kernel_new_taskid();
    // If cannot allocate space
    if(tcb==0) return 0;
    memset(tcb, 0, sizeof(struct kernel_tab));
    tcb->stack_size = stack.size;
    // Only copy the 32 first char (ignore the next ones)
    strncpy(tab->name, name, sizeof(tcb->name);
    return tcb;
}

int32_t kernel_new_taskid(){
    static int32_t task_id = 0;
    return task_id++;
}

struct kernel_tab kernel_running_task(){
    return running_task;
}
void kernel_yield(){
    struct kernel_tcb* former_task = running_task;
    struct kernel_tcb* new_task = former_task->t_next;
    if(former_task->state == KERNEL_RUNNING) former_task->state = KERNEL_READY;
    while(new_task->state) != KERNEL_READY) new_task = new_task->t_next;
    running_task = new_task;
    new_task->state = KERNEL_RUNNING;
    kernel_transfer(&former_task->context, &new_task->context);
}
\end{minted}
\end{document}

相关内容