Tengo un fichero de entrada (latex) del cual deseo eliminar una lista de palabras desde que inicia el documento hasta que encuentra la primera aparición de la palabra \begin{document}, para ello leo el archivo completo y los divido con split(); luego busco las palabras que deseo y con una expresión regular las elimino.
La lista de palabras es algo así:
- pstricks, pstricks-add, psfrag, auto-pst-pdf, graphicx,pst-algo1, pst-algo2, pst-algo(n)
Using latex Syntax Highlighting
- % Caso 1, en lineas separadas, incluye []
- \usepackage{pstricks-add}
- \usepackage{pst-algo1}
- \usepackage[opcion=1, opcion=2]{psfrag}
- \usepackage{auto-pst-pdf}
- \usepackage[opcion]{graphicx}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Using latex Syntax Highlighting
- % Caso 2a, varios de la misma familia en una misma linea (sin [])
- \usepackage{pst-algo1,pst-algo2,pst-algo3,pst-algo4,pstricks-add,pstricks}
- % Caso 2b, varios de la misma familia en distintas lineas; sin [] y comienza (o termina) con (o sin) salto de linea.
- \usepackage{
- pst-algo1,
- pst-algo1,
- pst-algo1,
- pst-algo1,
- pstricks-add,
- pstricks
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Using latex Syntax Highlighting
- % Caso 3a, uno o varios en una misma linea, pero de distinta familia (sin [])
- \usepackage{lmodern,pstricks,amsmath,fourier,etc,graphicx}
- % Caso 3b, uno o varios en una distintas lineas y de distintas familias; sin [] y comienza (o termina) con (o sin) salto de linea.
- \usepackage{
- lmodern,
- pstricks,
- amsmath,
- fourier,
- etc,
- graphicx
- }
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Con el siguiente script, logro resolver el caso 1 y el caso 2a:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use v5.16;
- use autodie;
- # Abro y leo todo el archivo
- open my $IPDF, '<', "test.tex";
- undef $/; # read all file
- # Lo divido en dos y cierro
- my ( $uno, $dos ) = split( /\\begin\{document\}/, <$IPDF>, 2 );
- close $IPDF;
- my @coment = $uno; # me quedo con $uno
- my @preamb; # acá guardo las líneas modificadas
- # Lo recorro y aplico las expresiones regulares
- foreach my $line (@coment) {
- #chomp($line); # quito los finales de línea
- # Esta expresión es para \usepackage[...]{pst-algo}, cuando tiene [...]
- $line =~ s/\\usepackage(?:\[.+?\])?\{pst.+?}//gx; # elimino
- $line =~ s/(\\usepackage(?:\[.+?\])?)\{auto-pst.+?}//gx; # elimino
- # Esta expresión es para \usepackage[...]{psfrag}, cuando tiene [...]
- $line =~ s/\\usepackage(?:\[.+?\])?\{psfrag}//gx; # elimino
- $line =~ s/(\\usepackage(?:\[.+?\])?)\{vaucanson-.+?}//gx; # elimino
- $line =~ s/(\\usepackage(?:\[.+?\])?)\{psgo}//gx; # elimino
- # Esta expresión es para \usepackage[...]{graph}, cuando tiene [...]
- $line =~ s/(\\usepackage(?:\[.+?\])?)\{graph/\%$1\{graph/gx; # añado %
- # Quito las líneas que deje en blanco al eliminar
- $line =~ s/\n+/\n/g;
- # Añado las líneas a @preamb
- push( @preamb, $line );
- } # cierro foreach
- # Uno y añado las líneas que necesito
- my $clean = join( "\n",
- @preamb,
- "\\usepackage{grfext}\n\\\PrependGraphicsExtensions*{pdf}\n\\usepackage{graphicx}\n\\graphicspath{{images/}}\n\\begin{document}"
- . $dos );
- # Abro otro archivo y guardo los cambios
- open my $OPDF, '>', "test-out.tex"; # escribo la salida
- print $OPDF $clean;
- close $OPDF;
- __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
- \usepackage{pstricks-add}
- \usepackage{pst-algo1}
- \usepackage[opcion]{graphicx}
- \usepackage{pst-algo1,pst-algo2,pst-algo3,pst-algo4,pstricks-add,pstricks,auto-pst-pdf}
- \usepackage{ pst-algo1,
- pst-algo1,
- pstricks-add,
- pstricks
- }
- \usepackage{lmodern,pstricks,amsmath,fourier,etc,graphicx}
- \usepackage{
- lmodern,
- pstricks,
- amsmath,
- fourier,graphicx
- }
- \begin{document}
- Esta sección del archivo no debe ser modificada
- \begin{verbatim}
- \usepackage{pstricks-add}
- \usepackage{lmodern}
- \usepackage{pstexample}
- \usepackage[opcion]{graphicx}
- \begin{document}
- \begin{pspicture}
- Algo
- \begin{pspicture*}
- \end{document}
- \end{verbatim}
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Debería obtener este fichero de salida
Using latex Syntax Highlighting
- \documentclass{article}
- \usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
- %\usepackage[opcion]{graphicx}
- \usepackage{lmodern,amsmath,fourier,etc}
- \usepackage{
- lmodern,
- amsmath,
- fourier
- }
- \usepackage{grfext}
- \PrependGraphicsExtensions*{pdf}
- \usepackage{graphicx}
- \graphicspath{{images/}}
- \begin{document}
- Esta sección del archivo no debe ser modificada
- \begin{verbatim}
- \usepackage{pstricks-add}
- \usepackage{lmodern}
- \usepackage{pstexample}
- \usepackage[opcion]{graphicx}
- \begin{document}
- \begin{pspicture}
- Algo
- \begin{pspicture*}
- \end{document}
- \end{verbatim}
- \end{document}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Tengo una idea de cómo resolverlo más menos así:
- Crear una lista con las palabras que deseo buscar (no son tantas y puedo ir agregando otras en el futuro)
- Crear una expresión regular para buscar las palabras de la lista y eliminarlas
- Dentro de la expresión regular crear un test para que quite la coma si está a la derecha o izquierda según sea el caso.
Agradecido de antemano,
Pablo