Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

My favorite use was during my PhD. My thesis could be regenerated from the source data, through to creating plots with gnuplot/GRI and finally assembled from the Latex and eps files into the final pdf.

It was quite simple really, but really powerful to be able to tweak/replace a dataset hit make, and have a fully updated version of my thesis ready to go.



I'd go as far as to argue that such a plan is essential to reproducibility (and it makes your work faster and less error-prone).

My take on the same plan ( "make thesis" ):

It's not pretty, but it works. https://github.com/4kbt/PlateWash

Unblinding tweet: https://twitter.com/CharlieHagedorn/status/59565285891105177...

Finished product: https://digital.lib.washington.edu/researchworks/handle/1773...


> My thesis could be regenerated from the source data, through to creating plots with gnuplot/GRI and finally assembled from the Latex and eps files into the final pdf.

All research should be like this. Explaining things in words is simply so imprecise you end up spending forever to show someone something that a program can tell you quickly.

"I used xyz transformation with abc parameters" can be gleaned easily from code.


I do the same with latex when generating contracts for my company. The makefile and its corresponding python program asks for various arguments (company name, xxx, yyy). Then it generates the contract with the associated prices. I even put some automatic reduction/gifts in place (free service) if the amount is bigger than X or Y.

I quite like it !


Please could it be possible to view a snippet - just to get an idea of how you do this. Cheers!


I do something similar, here's my Makefile -- I have scripts that build figures in a separate directory, /figures. I'm sure it could be terser, but it does the job for me.

    texfiles = acronyms.tex analytical_mecs_procedure.tex analytical_mecs.tex \
               anderson_old.tex background.tex chaincap.tex \
               conclusions.tex cvici.tex gold_chain_test.tex introduction.tex \
               main.tex mcci_manual.tex methods.tex moljunc.tex \
               tb_sum_test.tex times_procedure.tex tm_mcci_workflow.tex tmo.tex \
               vici_intro.tex
 
    # dynamically generated figures
 
 
    all: main.pdf
 
    main.pdf: $(texfiles) figures/junction_occupations.pdf figures/overlaps_barplot.pdf \
                          figures/transmission_comparison.pdf \
                          figures/wigner_distributions.pdf
        pdflatex main.tex && bibtex main && pdflatex main.tex && pdflatex main.tex
 
    figures/junction_occupations.pdf: figures/junction_occupations.hs
        ghc --make figures/junction_occupations.hs
        figures/junction_occupations -w 800 -h 400 -o figures/junction_occupations.svg
        inkscape -D -A figures/junction_occupations.pdf figures/junction_occupations.svg 
 
    figures/overlaps_barplot.pdf: figures/overlaps_barplot.py
        python figures/overlaps_barplot.py
 
    figures/transmission_comparison.pdf: figures/transmission_comparison.py
        python figures/transmission_comparison.py
 
    figures/wigner_distributions.pdf: figures/wigner_distributions.py
        python figures/transmission_comparison.py
 
    clean:
        rm *.log *.aux *.blg *.bbl *.dvi main.pdf


I noticed that you have some file dependencies not encoded in the targets. Also, you might like reading up on Automatic Variables ($@, $^, $<, etc). Anyway, just for fun I tried rewriting your script in a way that should Just Work a little better.

    texfiles    = $(wildcard *.tex)

    figures_ink = figures/junction_occupations.pdf
    figures_py  = figures/overlaps_barplot.pdf        \
                  figures/transmission_comparison.pdf \
                  figures/wigner_distributions.pdf
    figures     = $(figures_ink) $(figures_py)


    main.pdf: main.tex $(texfiles) $(figures)
        pdflatex $<
        bibtex $(<:*.tex=*)
        pdflatex $<
        pdflatex $<

    figures/junction_occupations: %: %.hs
        ghc --make $^

    figures/junction_occupations.svg: figures/junction_occupations
        $< -w 800 -h 400 -o $@

    $(figures_ink): %.pdf: %.svg
        inkscape -D -A $@ $^

    $(figures_py): %.pdf: %.py
        python $^

    clean:
        rm *.log *.aux *.blg *.bbl *.dvi main.pdf


Check out latexmk: it keeps track of having to run bibtex etc, and runs latex "enough times" so that all equation refs etc have stabilised. (Latexmk -pdf to build a pdf, default is dvi.)


Yes, I don't think I'll get a chance to dig out my Makefile. But my Makefile was very much like this.


  figures/%.pdf: figures/%.py
      python $<


For what it's worth, I did something similar for my master's dissertation, but couldn't be bothered to learn make, so I used a python library called pydoit:

http://pydoit.org/

All my analysis code, plots, etc were already in python, so it fit in well. Lyx has a CLI from where I exported .tex and compiled to pdf.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: