图形与上市代号一致

图形与上市代号一致

这段代码来自哈维·谢泼德

我试图让他的lstlisting环境正常工作并看起来像这样:

在此处输入图片描述

我没有\codeimg显示(代码标题前的图形)。您能告诉我要怎么做才能让图形像上图一样显示在代码标题之前吗?

谢谢!

\documentclass[a4paper, 10pt, oneside, fleqn, openright]{report}
\usepackage[no-math]{fontspec}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguages{english}

\newcommand{\codeimg}{\includegraphics[scale=0.1]{example-image-a}}

\usepackage{metalogo} % typeset xelatex!
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{wrapfig}
\usepackage{calc}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{pdfpages}
% \usepackage{fancyhdr}
\usepackage{amsmath, amsfonts, amssymb}
\usepackage{mdframed}
\usepackage{listings}
\definecolor{light-gray}{gray}{0.92}

% infoBulle skeleton
%\newenvironment{@infoBulleSkeletonEnv}[3]{
%   \begin{infoBulle}[style=#1, frametitle=\@titleContent{#2}{#3}]
%       \vspace*{-1mm}
%   }{
%\end{infoBulle}
%}
%\newcommand{\@infoBulleSkeleton}[4]{
%   \begin{@infoBulleSkeletonEnv}{#1}{#2}{#3}
%       #4
%   \end{@infoBulleSkeletonEnv}
%}
%\newcommand{\@codeTitle}{Title unchanged}
\newcommand{\codeTitle}[1]{\renewcommand{\@codeTitle}{#1}}

\BeforeBeginEnvironment{yCode}{
    \begin{@infoBulleSkeletonEnv}{code}{\codeimg}{\@codeTitle}
}

\AfterEndEnvironment{yCode}{
    \end{@infoBulleSkeletonEnv}
}

\definecolor{mainColor}{RGB}{211, 47, 47} % some dark red
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Coding environment (redefining lstlisting)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\codeTitle}[2]{Code}
\renewcommand{\codeTitle}{\hspace*{3mm}\begin{minipage}{.75cm}
        \includegraphics[width=\linewidth]{\pathToInfoBulleImages code2.png}
    \end{minipage}\hspace*{1mm}\begin{minipage}{\textwidth-1.05cm}
    {\sffamily\Large \codeTitle}
\end{minipage}}

\renewcommand*{\lstlistlistingname}{Liste des codes}
\BeforeBeginEnvironment{lstlisting}{ %ce code met tous les lstlistings dans un mdframed
    \begin{mdframed}[
        linecolor=Gray,
        backgroundcolor=light-gray,
        skipabove=4mm,
        skipbelow=0mm,
        innertopmargin=2mm,
        innerbottommargin=0mm,
        innerleftmargin=0mm,
        innerrightmargin=10pt,
        leftmargin=0mm,
        rightline=false,
        topline=false,
        bottomline=false,
        linewidth=1mm
        ]
        \codeTitle
        \vspace*{-2mm}
    }
    \AfterEndEnvironment{lstlisting}{
    \end{mdframed}
}

\renewcommand\lstlistingname{Code}
\lstset{
    language=Python,
    numbers=left,
    numbersep= 7mm,
    numberstyle=\color{Black},
    stepnumber=1,
    tabsize=3,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    basicstyle=\color{Black}\ttfamily,
    commentstyle=\color{LimeGreen},
    keywordstyle=\color{BurntOrange}\bfseries,
    stringstyle=\color{WildStrawberry},
    keywords={var, func, extends},
    frame=leftline,
    framesep=0mm,
    xleftmargin=3mm,% marge ajouté à gauche du tableau (à configurer en dernier pour l'alignement global du tableau)
    framesep=2mm, %distance texte bord du cadre (limite de la background color)
    framerule=0mm,
    abovecaptionskip=5mm,
    aboveskip=\baselineskip,
    belowskip=\baselineskip
}

\begin{document}

\renewcommand{\codeTitle}{Les bases de GDScript}
\begin{lstlisting}[caption=basics.gd]
var nombreDeGardes = 4 #déclaration d'une variable
nombreDeGardes = plusDeux(nombreDeGardes) #appel d'une fonction avec la variable nombreDeGardes passée en paramètre

func maFonction(): #cette ligne déclare une nouvelle fonction nommée maFonction
    var variable1 = 7 #nouvelle variable dont la valeur est 7
    variable2 = ['un', 'deux', 'trois'] #variable assignée à un tableau contenant trois chaines de caractères

func plusDeux(argument1):
    return argument1 + 2
\end{lstlisting}

\end{document} 

答案1

这是另一个解决方案tcolorbox。您可以自由格式化标题(title新环境的属性)。它适用于所有引擎。

与 Ignazi 版本相比,唯一的优势是:

  • 使用包中的 listingname
  • 易碎(跨页)

彩色盒子

\documentclass[a4paper, 10pt, oneside, fleqn, openright]{report}
\usepackage[no-math]{fontspec}

\usepackage{polyglossia}
\setdefaultlanguage{french}
\setotherlanguages{english}

\newcommand{\codeimg}{\includegraphics[scale=0.1]{example-image-a}}

\usepackage{calc}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{pdfpages,graphicx}
\usepackage{mdframed}
\usepackage{listings}
\definecolor{light-gray}{gray}{0.92}

\definecolor{mainColor}{RGB}{211, 47, 47} % some dark red

\renewcommand\lstlistingname{Code}
\lstset{
    language=Python,
    numbers=left,
    numbersep= 7mm,
    numberstyle=\color{Black},
    stepnumber=1,
    tabsize=3,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    basicstyle=\color{Black}\ttfamily,
    commentstyle=\color{LimeGreen},
    keywordstyle=\color{BurntOrange}\bfseries,
    stringstyle=\color{WildStrawberry},
    keywords={var, func, extends},
    frame=leftline,
    framesep=0mm,
    xleftmargin=3mm,% marge ajouté à gauche du tableau (à configurer en dernier pour l'alignement global du tableau)
    framesep=2mm, %distance texte bord du cadre (limite de la background color)
    framerule=0mm,
    abovecaptionskip=5mm,
    aboveskip=\baselineskip,
    belowskip=\baselineskip
}

\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,listings}
\newtcblisting[use counter=lstlisting]{codeblock}[2][]{%
        enhanced,noparskip,breakable,colback=light-gray,colframe=DarkSlateGray,opacitybacktitle=.8,%
        fonttitle=\bfseries,before upper={\hspace*{-1em}\includegraphics[height=\baselineskip]{example-image-a}~#2},%
        title after break={\centering\footnotesize\itshape\strut\lstlistingname~\thelstlisting~--~continued},%
        listing only,listing options={xleftmargin=-1mm},after upper={\centering\strut\lstlistingname~\thelstlisting:~#2},
        frame hidden,arc=0pt,outer arc=0pt,boxrule=0pt,frame code={\draw[gray,line width=2mm] ([xshift=-0.5pt]frame.north west) -- ([xshift=-0.5pt]frame.south west);},#1}

\begin{document}

\begin{codeblock}{Les bases de GDScript}
var nombreDeGardes = 4 #déclaration d'une variable
nombreDeGardes = plusDeux(nombreDeGardes) #appel d'une fonction avec la variable nombreDeGardes passée en paramètre

func maFonction(): #cette ligne déclare une nouvelle fonction nommée maFonction
    var variable1 = 7 #nouvelle variable dont la valeur est 7
    variable2 = ['un', 'deux', 'trois'] #variable assignée à un tableau contenant trois chaines de caractères

func plusDeux(argument1):
    return argument1 + 2
\end{codeblock}
\end{document} 

答案2

因为我不使用lualatex或者xelatex我不知道为什么下面的代码不适用于它们,但是pdflatex它展示了如何使用定义类似的列表框tcolorbox

\documentclass[a4paper, 10pt, oneside, fleqn, openright]{report}

\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage[most]{tcolorbox}
\definecolor{light-gray}{gray}{0.92}

\definecolor{mainColor}{RGB}{211, 47, 47} % some dark red

\lstset{
    language=Python,
    numbers=left,
    numbersep= 5mm,
    numberstyle=\color{Black},
    stepnumber=1,
    tabsize=3,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    basicstyle=\color{Black}\ttfamily,
    commentstyle=\color{LimeGreen},
    keywordstyle=\color{BurntOrange}\bfseries,
    stringstyle=\color{WildStrawberry},
    keywords={var, func, extends},
    frame=leftline,
    framesep=0mm,
    xleftmargin=3mm,% marge ajouté à gauche du tableau (à configurer en dernier pour l'alignement global du tableau)
    framesep=2mm, %distance texte bord du cadre (limite de la background color)
    framerule=0mm,
    abovecaptionskip=5mm,
    aboveskip=\baselineskip,
    belowskip=\baselineskip
}

\newtcblisting[auto counter, number within=chapter]{mylisting}[3][]{%
    listing only, 
    enhanced, 
    sharp corners, 
    colframe=light-gray,
    colback=light-gray,
    coltitle=black,
    fonttitle=\sffamily\Large,
    overlay={%
            \fill[white] (frame.south west) rectangle ([xshift=5mm]frame.north west);
            \draw[line width=1mm,Gray] ([xshift=5mm]frame.north west)--([xshift=5mm]frame.south west);
    },
    title={\ \includegraphics[width=5mm]{example-image-a}\ #2},
    after upper={\par\centering \textsf{Code~\thetcbcounter:~#3}},
    #1
    }

\begin{document}

\chapter{Chapter title}

\section{Section title}

\begin{mylisting}{Les bases de GDScript}{basics.gd}
var nombreDeGardes = 4 #déclaration d'une variable
nombreDeGardes = plusDeux(nombreDeGardes) #appel d'une fonction avec la variable nombreDeGardes passée en paramètre

func maFonction(): #cette ligne déclare une nouvelle fonction nommée maFonction
    var variable1 = 7 #nouvelle variable dont la valeur est 7
    variable2 = ['un', 'deux', 'trois'] #variable assignée à un tableau contenant trois chaines de caractères

func plusDeux(argument1):
    return argument1 + 2
\end{mylisting}

\end{document} 

在此处输入图片描述

相关内容