Dispongo de varios archivos de la siguiente forma:
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage{pstricks}
- \tcbuselibrary{listings,
- breakable,
- skins}
- \begin{document}
- Este texto va acá
- \begin{MYexample}[justification=\centering,pos=r,
- rframe={},hsep=1cm,varwidth=true]
- Bloque 1 que deseo extraer, acá van cosas como
- \def alguna cosa
- \psset{unit=0.5cm,
- runit=0.5cm
- }
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- % otras cosas
- \psCircleTangents(2,4)(7,7){2}
- \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT1)
- \end{postscript}
- \end{MYexample}
- Acá va más texto
- \begin{MYexample}[pos=r]
- Bloque 2 que deseo extraer, acá van cosas como
- \def alguna cosa
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- \psCircleTangents(2,4)(7,7){2}
- \end{MYexample}
- Acá va más texto
- \begin{MYexample}
- Bloque 3 que deseo extraer, acá van cosas como
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- \end{pspicture}
- \end{MYexample}
- \end{document}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Deseo copiar todo lo que esté entre
Using latex Syntax Highlighting
- \begin{MYexample}[...]
- ...
- \end{MYexample}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage{pstricks}
- \tcbuselibrary{listings,
- breakable,
- skins}
- \begin{document}
- \thispagestyle{empty}
- Bloque 1 que deseo extraer, acá van cosas como
- \def alguna cosa
- \psset{unit=0.5cm,
- runit=0.5cm
- }
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- % otras cosas
- \psCircleTangents(2,4)(7,7){2}
- \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT1)
- \end{postscript}
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
dentro del directorio (images) y modificar el fichero de entrada a:
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage{pstricks}
- \tcbuselibrary{listings,
- breakable,
- skins}
- \begin{document}
- Este texto va acá
- \begin{MYexample}[justification=\centering,pos=r,
- rframe={},hsep=1cm,varwidth=true,graphic={[scale=1]images/test-src-1}]
- Bloque 1 que deseo extraer, acá van cosas como
- \def alguna cosa
- \psset{unit=0.5cm,
- runit=0.5cm
- }
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- % otras cosas
- \psCircleTangents(2,4)(7,7){2}
- \pcline[nodesep=-1cm,linecolor=blue](2,4)(CircleT1)
- \end{postscript}
- \end{MYexample}
- Acá va más texto
- \begin{MYexample}[pos=r,graphic={[scale=1]images/test-src-2}]
- Bloque 2 que deseo extraer, acá van cosas como
- \def alguna cosa
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- \psCircleTangents(2,4)(7,7){2}
- \end{MYexample}
- Acá va más texto
- \begin{MYexample}[graphic={[scale=1]images/test-src-3}]
- Bloque 3 que deseo extraer, acá van cosas como
- \begin{pspicture}[showgrid=true](0,3)(10,10)
- \psdot(2,4)\pscircle(7,7){2}
- \end{pspicture}
- \end{MYexample}
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Es decir, para los archivos separados:
- Copio lo que está desde el inicio hasta \begin{document}
- Agrego la línea \thispagestyle{empty}
- Agrego el bloque de texto que deseo
- Agrego la línea \end{document}
y en el archivo de entrada agrego la línea graphic={[scale=1]images/test-src-...} dentro del [...] de \begin{MYexample}[...] con una coma después si está presente el corchete y, si el corchete no está presente lo creo y agrego la línea sin la coma.
Hasta aquí la explicación del problema; ahora, la parte de la solución que tengo en mente. Dispongo del siguiente script:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.14;
- use File::Basename; # separa el archivo de entrada
- use Getopt::Long; # para añadir las opciones
- use autodie; # muere si no es correcto
- my $imageDir = "images"; # directorio de imágenes (images por defecto)
- @ARGV == 0 && die "Ingresa un archivo!\n";
- my @SuffixList = (".tex","",".ltx"); # posible extensión
- my ($name,$path,$ext) = fileparse($ARGV[0],@SuffixList);
- if ( $ext eq "" ) { $ext = ".tex"; } # fijamos la extensión
- my $TeXfile = "$path$name$ext";
- ## Creamos el directorio si éste no existe
- if (! -e $imageDir) {
- mkdir($imageDir,0744) or die "No puedo crear $imageDir";
- }
- ## Lectura del archivo
- open my $ENTRADA, '<', "$name.tex";
- my $archivo;
- {
- local $/;
- $archivo = <$ENTRADA>;
- }
- close $ENTRADA;
- ## Partición del documento
- my($cabeza,$cuerpo,$final) = $archivo =~ m/\A (.+? ^\\begin{document}) \s* (.+?) \s* (^ \\end{document}) \s* \z/msx;
- ##
- ## Grabar
- open my $SALIDA, '>', "$name-tmp.tex";
- print $SALIDA $archivo;
- close $SALIDA;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Con este creo el directorio y divido el documento como yo lo deseo
- $cabeza contiene desde el inicio hasta \begin{document}
- $cuerpo contiene el texto sobre el cual deseo buscar
- $final contiene la linea \begin{document}
Using perl Syntax Highlighting
- my $id = 1; # contador para los archivos-src
- my $destino = "$imageDir/$name-src-$id.tex";
- while () {
- if ($archivo =~ /\begin{MYexample}[...] ... \end{MYexample}/) { # buscamos el bloque
- $id++; # Iniciamos el contador
- # Creamos los ficheros y copiamos lo que deseamos
- print "$cabeza\n";
- print "\\thispagestyle\{empty\}\";
- print LO QUE DESEO;
- print $final;
- }
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Espero haberme explicado de forma clara.
Saludos,
Pablo