Quiero poder reproducir este entorno en el contexto de la corrección de exámenes.
Una pista que encontré es el uso del paquete bclogo.
Sin embargo, me gustaría incluir el código Python resaltado como se ve aquí, y quiero incluir líneas de sangría y colorearlas según el alcance (nivel de sangría).
Coloreando las líneas de un algoritmo.:
Código del algoritmo coloreado:
\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}
Respuesta1
Para el código Python, aquí hay una solución con el paquete piton
que requiere el uso de LuaLaTeX (pero ningún 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}
Se ha tomado el código para el logo de Python.aquí.