Using latex Syntax Highlighting
- Deseo modificar esto:
- \tcboxverb{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \tcboxverb[colback=blue!10!white,colupper=blue]{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \myverb[colback=blue!10!white,colupper=blue]{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \myverb{\begin{pspicture} o \begin{pspicture*}} texto
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
es decir, deseo hacer una modificación dentro de las llaves { } que van seguidas de esas palabras:
- \tcboxverb[corchete que puede o no estar]{aquí quiero cambiar las palabras}
- \myverb[corchete que puede o no estar]{aquí quiero cambiar las palabras}
Lo que deseo siempre está en una línea (no ocupa más de una).
Traté de adaptar el siguiente script con el cual hago modificaciones en condiciones parecidas, claro que los delimitadores dentro de donde deseo hacer los cambios son los mismos al inicio y al final (si abre con { cierra con {, si abre con } cierra con }).
No sé si puedo adaptarlo dentro de este mismo script o quizás baste con una expresión regular.
El script es el siguiente (las palabras del hash son las mismas que deseo modificar):
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.18.2;
- no warnings;
- use autodie;
- @ARGV == 1 or die "Uso: $0 <archivo LaTeX a procesar\n";
- my $nombre_archivo_entrada = shift;
- -f $nombre_archivo_entrada or die "ERROR: No encuentro $nombre_archivo_entrada\n";
- ## Lectura del archivo
- open my $ENTRADA, '<', $nombre_archivo_entrada;
- undef $/; # modo 'slurp'
- my $archivo_entrada = <$ENTRADA>;
- close $ENTRADA;
- ## Partición del documento
- my($cabeza,$cuerpo,$final) = $archivo_entrada =~ m/\A (.+? ^\\begin{document}) \s* (.+?) \s* (^ \\end{document}) \s* \z/msx;
- ## Cambios a realizar
- my %cambios = (
- '\pspicture' => '\TRICKS',
- '\endpspicture' => '\ENDTRICKS',
- '\begin{pspicture' => '\begin{TRICKS',
- '\end{pspicture' => '\end{TRICKS',
- '\postscript' => '\POSTRICKS',
- '\begin{postscript}' => '\begin{POSTRICKS}',
- '\end{postscript}' => '\end{POSTRICKS}',
- );
- ## Variables y constantes
- my $no_del = "\0";
- my $del = $no_del;
- ## Reglas
- my $llaves = qr/\{ .+? \} /x;
- my $no_corchete = qr/(?:\[ .+? \])? /x;
- my $delimitador = qr/\{ (?<del>.+?) \} /x;
- my $verb = qr/verb [*]? /ix;
- my $lst = qr/lstinline (?!\*) $no_corchete /ix;
- my $mint = qr/mint (?!\*) $no_corchete $llaves /ix;
- my $marca = qr/\\ (?:$verb | $lst | $mint) (\S) .+? \g{-1} /x;
- my $comentario = qr/^ \s* \%+ .+? $ /mx;
- my $definedel = qr/\\ (?: DefineShortVerb | lstMakeShortInline ) $no_corchete $delimitador /ix;
- my $indefinedel = qr/\\ (?: UndefineShortVerb | lstDeleteShortInline) $llaves /ix;
- ## Cambiar
- while ($cuerpo =~
- / $marca
- | $comentario
- | $definedel
- | $indefinedel
- | $del .+? $del
- /pgmx) {
- my($pos_inicial, $pos_final) = ($-[0], $+[0]); # posiciones
- my $encontrado = ${^MATCH}; # lo encontrado
- given ($encontrado) {
- when (/$definedel/) { # definimos delimitador
- $del = $+{del};
- $del = "\Q$+{del}" if substr($del,0,1) ne '\\'; # es necesario "escapar" el delimitador
- }
- when (/$indefinedel/) { # indefinimos delimitador
- $del = $no_del;
- }
- default { # Aquí se hacen los cambios
- while (my($busco, $cambio) = each %cambios) {
- $encontrado =~ s/\Q$busco\E/$cambio/g; # es necesario escapar $busco, ya que contiene caracteres extraños
- }
- substr $cuerpo, $pos_inicial, $pos_final-$pos_inicial, $encontrado; # insertamos los nuevos cambios
- pos($cuerpo) = $pos_inicial + length $encontrado; # re posicionamos la siguiente búsqueda
- }
- }
- }
- ## Escritura del resultado
- open my $SALIDA, '>', "test-out2.tex";
- print $SALIDA "$cabeza\n$cuerpo\n$final\n";
- close $SALIDA;
- __END__
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage{minted}
- \usepackage{pstricks-add}
- \newenvironment{postscript}{}{}
- \begin{document}
- Deseo modificar esto:
- \tcboxverb{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \tcboxverb[colback=blue!10!white,colupper=blue]{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \myverb[colback=blue!10!white,colupper=blue]{\begin{pspicture} o \begin{pspicture*}} texto
- o esto
- texto \myverb{\begin{pspicture} o \begin{pspicture*}} texto
- Usamos \verb|\begin{pspicture} o \begin{pspicture*}| o \verb*|\begin{pspicture} o \begin{pspicture*}| (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- % esta línea debería modificarse \begin{pspicture} o \begin{pspicture*}
- Usamos \lstinline[hola]+\begin{pspicture} o \begin{pspicture*}+ y seguimos (cambia)
- Usamos \lstinline-\begin{pspicture} o \begin{pspicture*}- y seguimos (cambia)
- Esta línea debería quedar intacta \lstinline*[hola]+\begin{pspicture} o \begin{pspicture*}+ (no cumple por *)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- % esta línea debería modificarse \begin{pspicture} o \begin{pspicture*}
- Usamos \mint{algo}$\begin{pspicture} o \begin{pspicture*}$ y seguimos (cambia)
- Usamos \mint[hola]{algo}$\begin{pspicture} o \begin{pspicture*}$ y seguimos (cambia)
- Esta línea debería quedar intacta \mint[holas]#\begin{pspicture} o \begin{pspicture*}# (no cumple falta {})
- Esta línea debería quedar intacta \mint*#\begin{pspicture} o \begin{pspicture*}# (no cumple por *)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- % esta línea debería modificarse \begin{pspicture} o \begin{pspicture*}
- \section{ShortVerb}
- \DefineShortVerb{\|}
- Usamos el delimitador barra |\begin{pspicture} o \begin{pspicture*}| (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- ahora lo cambiamos indefinimos
- %esta debería cambiar \begin{pspicture} o \begin{pspicture*}
- \UndefineShortVerb{\|}
- y ahora definimos el (más)+
- \DefineShortVerb{\+}
- Usamos el delimitador más +\begin{pspicture} o \begin{pspicture*}+ (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- \UndefineShortVerb{\+}
- y ahora definimos el (almohadilla)
- \DefineShortVerb{\#}
- Usamos el delimitador almohadilla #\begin{pspicture} o \begin{pspicture*}# (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- \section{ShortInline}
- \lstMakeShortInline[algo]{|}
- Usamos el delimitador barra |\begin{pspicture} o \begin{pspicture*}| (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- ahora lo cambiamos indefinimos
- \lstDeleteShortInline{|}
- y ahora definimos el (más)+
- \lstMakeShortInline[algo]{+}
- Usamos el delimitador más +\begin{pspicture} o \begin{pspicture*}+ (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- \lstDeleteShortInline{+}
- y ahora definimos el (almohadilla)
- \lstMakeShortInline[algo]{#}
- Usamos el delimitador almohadilla #\begin{pspicture} o \begin{pspicture*}# (cambia)
- esta línea debería quedar intacta \begin{pspicture} o \begin{pspicture*}
- %\begin{postscript} debería cambiar
- \begin{postscript} % queda =
- \psset{unit=1.0cm}
- \begin{pspicture}[showgrid=true](4,2)% queda =
- \psscaleboxto(8,2){foo bar baz}
- \end{pspicture}% queda =
- \end{postscript}% queda =
- \begin{pspicture*}(4,2)(8,1)% queda =
- \psset{unit=1.0cm}
- \psscaleboxto(8,2){foo bar baz}
- \end{pspicture*}% queda =
- %%% \pspicture*(4,2)(8,1) o \begin{pspicture*}(4,2)(8,1) debería cambiar
- \pspicture*(4,2)(8,1)% queda =
- \psset{unit=1.0cm}
- \psscaleboxto(8,2){foo bar baz}
- \endpspicture% queda =
- % se puede \endpspicture o \end{pspicture*} debería cambiar
- % \pspicture(4,2)(8,1) o \begin{pspicture}(4,2)(8,1) debería cambiar
- \pspicture(4,2)(8,1)% queda =
- \psset{unit=1.0cm}
- \psscaleboxto(8,2){foo bar baz}
- \endpspicture% queda =
- %\endpspicture o \end{pspicture} debería cambiar
- \end{document}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
Saludos