Nuestro team de redactores ha estado horas investigando para dar resolución a tus interrogantes, te dejamos la solución de modo que esperamos resultarte de gran apoyo.
Solución:
los tikzmark
La biblioteca se puede utilizar aquí. Algunas partes están tomadas de esta bonita respuesta. ACTUALIZAR: Sin cambios en la lista, como lo solicitó implícitamente Will Robertson.
documentclassarticle
usepackage[T1]fontenc
usepackagebigfoot % to allow verbatim in footnote
usepackage[numbered,framed]matlab-prettifier
usepackagetikz
usetikzlibrarytikzmark
usetikzmarklibrarylistings
newcountertmkcount
tikzset
use tikzmark/.style=
remember picture,
overlay,
execute at end picture=
stepcountertmkcount
,
,
tikzmark suffix=-thetmkcount
begindocument
beginlstlisting[style=Matlab-editor,name=4Will]
classdef person
properties %(here, properties is a keyword)
mass=80;
height=1.80;
end
methods
function BMI = getBMI(height,weight)
BMI = person.mass/person.mass^2;
end
end
end
endlstlisting
begintikzpicture[use tikzmark]
draw[red,thick]
([shift=(-3pt,2ex)]pic cs:line-4Will-8-first)
rectangle
([shift=(3pt,-0.75ex)]pic cs:line-4Will-8-end);
endtikzpicture
enddocument
Por supuesto, eso también funciona con archivos externos. Lo bueno es que lo haces no Necesito poner cosas en el código. (Por supuesto, debe saber que desea anotar la línea 8.) Esto da el mismo resultado que el anterior.
documentclassarticle
usepackage[T1]fontenc
usepackagebigfoot % to allow verbatim in footnote
usepackage[numbered,framed]matlab-prettifier
usepackagetikz
usetikzlibrarytikzmark
usetikzmarklibrarylistings
newcountertmkcount
tikzset
use tikzmark/.style=
remember picture,
overlay,
execute at end picture=
stepcountertmkcount
,
,
tikzmark suffix=-thetmkcount
usepackagefilecontents
beginfilecontents*person.m
classdef person
properties %(here, properties is a keyword)
mass=80;
height=1.80;
end
methods
function BMI = getBMI(height,weight)
BMI = person.mass/person.mass^2;
end
end
end
endfilecontents*
begindocument
lstinputlisting[style=Matlab-editor,name=4Will]person.m
begintikzpicture[use tikzmark]
draw[red,thick]
([shift=(-3pt,2ex)]pic cs:line-4Will-8-first)
rectangle
([shift=(3pt,-0.75ex)]pic cs:line-4Will-8-end);
endtikzpicture
enddocument
Si desea resaltar varias líneas, puede utilizar el -|
sintaxis para dibujar las líneas alrededor de puntos extremos. Alternativamente, puede cargar la biblioteca de ajustes. Aquí les presento un ejemplo sencillo. Y me gustaría preguntarle amablemente que considere hacer preguntas de seguimiento en caso de que tenga más solicitudes.
documentclassbeamer
usepackage[T1]fontenc
usepackagebigfoot % to allow verbatim in footnote
usepackage[numbered,framed]matlab-prettifier
usepackagetikz
usetikzlibrarytikzmark
usetikzmarklibrarylistings
newcountertmkcount
tikzset
use tikzmark/.style=
remember picture,
overlay,
execute at end picture=
stepcountertmkcount
,
,
tikzmark suffix=-thetmkcount
usepackagefilecontents
beginfilecontents*person.m
classdef person
properties %(here, properties is a keyword)
mass=80;
height=1.80;
end
methods
function BMI = getBMI(height,weight)
BMI = person.mass/person.mass^2;
end
end
end
endfilecontents*
begindocument
lstinputlisting[style=Matlab-editor,name=4Will]person.m
begintikzpicture[use tikzmark]
draw[red,thick]
([shift=(-3pt,2ex)]pic cs:line-4Will-8-first)
rectangle
([shift=(3pt,-0.75ex)]pic cs:line-4Will-8-end);
coordinate (aux1) at ([xshift=5pt]pic cs:line-4Will-8-end);
coordinate (aux2) at ([yshift=-0.75ex]pic cs:line-4Will-9-end);
draw[blue,thick]
([shift=(-3pt,2ex)]pic cs:line-4Will-7-first)
rectangle
(aux1 |- aux2);
endtikzpicture
enddocument
Aquí hay un método que usa fbox
. Simplemente agregue este comando alrededor de la línea de código que desea resaltar y dibujará un cuadro a su alrededor.
Sin embargo, en realidad he usado una versión modificada llamada mycfbox
que le permite cambiar el color (desde ¿Cómo dibujar un cuadro de marco de color sin llenar el fondo?).
Tienes que tener un poco de cuidado con el ^
personaje, así que agregué string
antes para asegurarse de que salga correctamente.
Recuerde, debe adjuntar mycfboxred....
en el escapechar
que he configurado para "
. Puede cambiar esto si es necesario.
Actualizado: debe adjuntar el fbox
comando en smash
para eliminar el espacio vertical añadido a su alrededor. Además, puede controlar el grosor de la línea de la caja usando fboxrule
y puedes controlar el tamaño de la caja usando fboxsep
.
documentclassarticle
usepackage[T1]fontenc
usepackage[numbered,framed]matlab-prettifier
usepackagexcolor % <--- Added
renewcommandfboxsep2pt % <--- Size of box
setlengthfboxrule1.5pt % <--- Line thickness of box
newcommandmycfbox[2]%
colorletcurrentcolor.%
color#1%
smashfboxcolorcurrentcolor#2%
usepackagefilecontents
beginfilecontents*person.m
classdef person
properties %(here, properties is a keyword)
mass=80;
height=1.80;
end
methods
function BMI = getBMI(height,weight)
"mycfboxred BMI = person.mass/person.massstring^2;"
end
end
end
endfilecontents*
lstset
style = Matlab-editor,
basicstyle = mlttfamily,
escapechar = ",
mlshowsectionrules = true,
begindocument
lstinputlisting[caption = Some class definition]person.m
enddocument
Esta pregunta está relativamente cerca de los listados de fbox inside. Simplemente utilicé la respuesta de Martin Scharrer y la adapté para el color del cuadro con otra respuesta sobre fcolorbox
.
documentclassarticle
usepackagelistings
usepackagenewverbs
usepackage[numbered,framed]matlab-prettifier
usepackagexcolor
newsaveboxmybox
beginfilecontentsperson.m
classdef person
properties %(here, properties is a keyword)
mass=80;
height=1.80;
end
methods
function BMI = getBMI(height,weight)
!smashfcolorboxredwhiteuseboxmybox!
end
end
end
endfilecontents
begindocument
beginlrboxmybox
lstinline[style=Matlab-editor]BMI = person.mass/person.mass^2;%
endlrbox
lstinputlisting[style=Matlab-editor,escapechar=!]person.m
enddocument
Reseñas y puntuaciones
Puedes añadir valor a nuestra información participando con tu veteranía en las explicaciones.