Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^2: repetitive latex doc: in vim or perl?

by stabu (Scribe)
on Jul 12, 2008 at 20:03 UTC ( [id://697261]=note: print w/replies, xml ) Need Help??


in reply to Re: repetitive latex doc: in vim or perl?
in thread repetitive latex doc: in vim or perl?

Ooops, sorry, I just haven't used perl in a while ... and I realised that this task is easy as pie in perl.

I cannot believe I was doing this semi-manually in vim the other day. I wasted hours of repetitive keying. I've been too long away from perl-land.

I include it for anybody stumbling in (still a bit messy, mind you, only the essentials...)
#!/usr/bin/perl $fname = shift @ARGV; open(fi,"<$fname"); @text = <fi>; close fi; # First, the header of the latex print(" \\documentclass{article} \\usepackage{graphicx} \\usepackage{fullpage} \\begin{document} "); while (@text) { $imfile = shift @text; chop($imfile); print(" \\section{$imfile} \\begin{figure}[!hbp] \\centerline{\\includegraphics[width=9cm, height=9cm]{ims/$imf +ile"."_gd.png}} \\end{figure} \\begin{figure}[!hbp] \\centerline{\\includegraphics[width=12cm, height=9cm]{$imfile +"."mfm.png}} \\end{figure} \\newpage \n"); } # And now the tail print(" \\end{document} \n");

Replies are listed 'Best First'.
Re^3: repetitive latex doc: in vim or perl?
by pc88mxer (Vicar) on Jul 13, 2008 at 01:37 UTC
    I'm glad you found a solution for this problem, especially since it uses perl. Here are just a few suggestions:

    1) Since LaTeX has uses backslashes a lot, you can make it easier on yourself by using a 'here'-document with single quotes:

    print <<'END'; \documentclass{article} \usepackage{graphicx} \usepackage{fullpage} \begin{document} END
    2) Unfortunately, perl's own variable interpolation syntax is disabled when using here-documents within single quotes. On the other hand, writing your own mini-templating system is just a few lines in perl:
    sub substitute_vars { my ($template, $hash) = @_; (my $out = $template) =~ s/\${([^}]+)}/$$hash{$1}/ge; $out; }
    and here's how you could use it (write ${imfile} whenever you want to insert the value of imfile, etc.):
    my $template = <<'TEMPLATE_END'; \section{${imfile}} \begin{figure}[!hbp] \centerline{\includegraphics[width=9cm, height=9cm]{ims/${imfile}_gd.p +ng}} \end{figure} \begin{figure}[!hbp] \centerline{\includegraphics[width=12cm, height=9cm]{${imfile}mfm.png} +} \end{figure} \newpage TEMPLATE_END for (@text) { chomp; print substitute_vars($template, { imfile => $_ } ); }
    Of course, once your needs started to get more demanding, I'd consider using an existing templating system.

    3) Finally, you can define your own macros in LaTeX with \newcommand. You might try something along the lines of this:

    \newcommand{\insert_figures}[1]{ \section{#1} ... \centerline{\includegraphics[width=9cm, height=9cm]{ims/#1_gd.png}} ... \centerline{\includegraphics[width=12cm, height=9cm]{#1mfm.png}} ... \newpage }
    However, if you have to manipulate the macro arguments, you might find using something you are familiar with (like perl) easier.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://697261]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (2)
As of 2026-03-09 03:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.