Воспроизведение блоков кода Python/программирования с модификацией

Воспроизведение блоков кода Python/программирования с модификацией

Я хочу иметь возможность воспроизвести эту среду в контексте корректировки экзамена.

Одной из подсказок, которую я нашел, является использование пакета bclogo.

https://ctan.org/pkg/bclogo

Однако я хотел бы включить выделенный код Python, как показано здесь, а также включить линии отступа и раскрасить их в соответствии с областью действия (уровнем отступа).

введите описание изображения здесь

Раскрашивание линий алгоритма:

введите описание изображения здесь

Код цветного алгоритма:

\pdfoutput=1
\usepackage[linesnumbered,titlenumbered,ruled,vlined,resetcount,algosection]{algorithm2e}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{color}

\begin{document}
\title{MWE}
\maketitle
\section{Algorithm}

\begin{algorithm}
    \caption{3-SAT in polynomial time}
    \label{alg:hs}
    \DontPrintSemicolon
    \KwIn{List of clauses}
    \KwOut{The clauses are satisfiable}
    \SetKwProg{Fn}{Function}{ is}{end}
    \Fn{\textsc{IsSatisfiable}($C$)} {
    
        \color{red} %<- my best attempt
        $k\gets 0$ \;
        \For {$i = 1$ \bf{to} $|C|$}
        {
            $c_i \gets $ $i$-th clause \;
            $L \gets$ list of literals of $c_i$ \;
            $k\gets f(k, L)$ \tcp{a miracle in polynomial time}
        }
        \color{black} %<- go back to color black
        
        \If {$k$ is even} {
            \Return true
        }
        \Else {
            \Return false
        }
        
    }
\end{algorithm}

\end{document}

решение1

Для кода Python ниже представлено решение с пакетом piton, требующим использования LuaLaTeX (но без внешней программы).

\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usepackage{piton}
\usepackage{lipsum}

\definecolor{bleupyth}{rgb}{0.2157,0.436,0.6172}
\definecolor{jaunpyth}{rgb}{1,0.8157,0.25}

\newcommand{\PythonLogo}{
\begin{tikzpicture}[scale=0.004]
  \begin{scope}[,yscale=-1]
    \fill[bleupyth] (41.1090,0.0000) .. controls (20.0860,0.0000) and
    (21.3980,9.1170) ..  (21.3980,9.1170) -- (21.4220,18.5620) --
    (41.4840,18.5620) -- (41.4840,21.3980) -- (13.4530,21.3980)
    .. controls (13.4530,21.3980) and (0.0000,19.8710)
    .. (0.0000,41.0860) .. controls (0.0000,62.3010) and
    (11.7420,61.5470) .. (11.7420,61.5470) -- (18.7500,61.5470) --
    (18.7500,51.7030) .. controls (18.7500,51.7030) and
    (18.3710,39.9610) ..  (30.3050,39.9610) .. controls
    (42.2380,39.9610) and (50.2030,39.9610) ..  (50.2030,39.9610)
    .. controls (50.2030,39.9610) and (61.3830,40.1410) ..
    (61.3830,29.1560) .. controls (61.3830,18.1720) and
    (61.3830,10.9920) ..  (61.3830,10.9920) .. controls
    (61.3830,10.9920) and (63.0820,0.0000) ..  (41.1090,0.0000) --
    cycle(30.0470,6.3520) .. controls (32.0430,6.3520) and
    (33.6560,7.9650) .. (33.6560,9.9610) .. controls (33.6560,11.9570)
    and (32.0430,13.5700) .. (30.0470,13.5700) .. controls
    (28.0510,13.5700) and (26.4380,11.9570) .. (26.4380,9.9610)
    .. controls (26.4380,7.9650) and (28.0510,6.3520)
    .. (30.0470,6.3520) -- cycle;
  \end{scope}

  \begin{scope}[shift={(81,-81)},xscale=-1]
    \fill[jaunpyth] (41.1090,0.0000) .. controls (20.0860,0.0000) and
    (21.3980,9.1170) ..  (21.3980,9.1170) -- (21.4220,18.5620) --
    (41.4840,18.5620) -- (41.4840,21.3980) -- (13.4530,21.3980)
    .. controls (13.4530,21.3980) and (0.0000,19.8710)
    .. (0.0000,41.0860) .. controls (0.0000,62.3010) and
    (11.7420,61.5470) .. (11.7420,61.5470) -- (18.7500,61.5470) --
    (18.7500,51.7030) .. controls (18.7500,51.7030) and
    (18.3710,39.9610) ..  (30.3050,39.9610) .. controls
    (42.2380,39.9610) and (50.2030,39.9610) ..  (50.2030,39.9610)
    .. controls (50.2030,39.9610) and (61.3830,40.1410) ..
    (61.3830,29.1560) .. controls (61.3830,18.1720) and
    (61.3830,10.9920) ..  (61.3830,10.9920) .. controls
    (61.3830,10.9920) and (63.0820,0.0000) ..  (41.1090,0.0000) --
    cycle(30.0470,6.3520) .. controls (32.0430,6.3520) and
    (33.6560,7.9650) .. (33.6560,9.9610) .. controls (33.6560,11.9570)
    and (32.0430,13.5700) .. (30.0470,13.5700) .. controls
    (28.0510,13.5700) and (26.4380,11.9570) .. (26.4380,9.9610)
    .. controls (26.4380,7.9650) and (28.0510,6.3520)
    .. (30.0470,6.3520) -- cycle;
  \end{scope}
\end{tikzpicture}} 

\ExplSyntaxOn
\NewPitonEnvironment{Python}{}
  { 
    \noindent \PythonLogo\newline \nobreak
    \leavevmode 
    \hspace* { 7.4 pt } 
    \vrule width 1pt 
    \hspace* { 5 pt } 
    \dim_set:Nn \l_tmpa_dim { \linewidth - 12.4 pt }
    \begin { minipage } { \l_tmpa_dim }
  }
  { \end { minipage } }
\ExplSyntaxOff

\begin{document}

\lipsum[1]

\begin{Python}
class PCFS(StratégieOrdonnancement):
    def elire(sef):
        p = min(selp.fp.data, key = lambda p : p.taP)
        if p.taP <= self.horlogie:
            p.changerEtat("Elu")
\end{Python}

\end{document}

Код логотипа Python был взятздесь.

Вывод кода выше

Связанный контент