Reproduzindo blocos de código Python/programação com modificação

Reproduzindo blocos de código Python/programação com modificação

Quero poder reproduzir esse ambiente no contexto da correção do exame.

Uma pista que encontrei é o uso do pacote bclogo.

https://ctan.org/pkg/bclogo

No entanto, gostaria de incluir o código Python destacado como visto aqui, e quero incluir linhas de recuo e colori-las de acordo com o escopo (nível de recuo).

insira a descrição da imagem aqui

Colorindo as linhas de um algoritmo:

insira a descrição da imagem aqui

Código do algoritmo colorido:

\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}

Responder1

Para o código Python, aqui está uma solução com o pacote pitonque requer o uso de LuaLaTeX (mas nenhum programa externo).

\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}

O código para o logotipo do Python foi obtidoaqui.

Saída do código acima

informação relacionada