Saltar al contenido

Cómo resaltar una parte del código de Matlab

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

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

Reseñas y puntuaciones

Puedes añadir valor a nuestra información participando con tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *