emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Myles English <mylesenglish@gmail.com>
To: Eric Schulte <schulte.eric@gmail.com>
Cc: emacs-orgmode <emacs-orgmode@gnu.org>,
	Alan Schmitt <alan.schmitt@polytechnique.org>,
	Nicolas Goaziou <n.goaziou@gmail.com>
Subject: Re: running the new exporter asynchronously?
Date: Wed, 28 Nov 2012 20:46:33 +0000	[thread overview]
Message-ID: <87obih78wm.fsf@gmail.com> (raw)
In-Reply-To: <87y5hl264z.fsf@gmail.com>


Hi,

Eric Schulte writes:

> In the interim it, one solution which I personally like for large
> projects is to offload compilation into an external batch Emacs process.
> I find this not only useful for compilation while working, but if you
> place all relevant config into an init.el file loaded by the batch
> Emacs, this also makes it possible to share and compile the project
> separate of your personal Emacs config.
>
> Attached is a bare-bones Makefile supporting this sort of work-flow.

This is probably too complicated for your immediate requirements but it
is a good opportunity to share my solution using CMake.  It does add
more complexity though.  It is for pdf production and uses something
called UseLATEX.cmake.  The main advantages are that:

- it can also regenerate all my plots from standalone (e.g.) R scripts,
  so I don't have to do everything in org if I don't want to
- it does 'out of source' builds
- I don't know the make syntax
- it would probably work on different OS

Here is the non-barebones example:

#+BEGIN_SRC sh :tangle CMakeLists.txt
    cmake_minimum_required(VERSION 2.8)
    
    project(thesis NONE)
          
    include(/usr/share/cmake-2.8/Modules/UseLATEX.cmake)
    
    # Set R executable
    set(R_COMPILE "/usr/bin/Rscript")
          # Set the location of data files
          ##set(DATA_DIR data)
          # Set the location of the directory for image files
    set(IMAGE_DIR graphicsauto)
    
          # Get a list of R files
    file(GLOB_RECURSE R_FILES "R/*.R")
    
    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/R DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR})
    
    foreach(file ${R_FILES})
    message("proceessing ${file}")
    get_filename_component(basename "${file}" NAME_WE)
    
              # Command to run R
    if(R_COMPILE)
        message("Adding ........... ${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R")
          
        add_custom_command(
            OUTPUT
            ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
            DEPENDS
            ${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R
                    #      ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${DATA_DIR}
            COMMAND
            ${R_COMPILE}
            ARGS
            ${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R
            ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
        )
        message("Running ${R_COMPILE} ${CMAKE_CURRENT_BINARY_DIR}/R/${basename}.R ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps")
          
        endif(R_COMPILE)
          
              # Make a list of all R files (for ADD_LATEX_DOCUMENT depend)
        set(ALL_R_FILES ${ALL_R_FILES}
            ${CMAKE_CURRENT_BINARY_DIR}/${IMAGE_DIR}/${basename}.eps
        )
        endforeach(file)
          
          # ------- export mainThesis.org -----------------------
        latex_get_output_path(OUTPUT_DIR)  
        file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mainThesis.org DESTINATION ${OUTPUT_DIR}/ )
        file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/thesis.el DESTINATION ${OUTPUT_DIR}/ )
    
        add_custom_target( orgfile ALL
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.org )
    
        add_custom_target( elfile ALL
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/thesis.el )
        
        add_custom_command(
            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.tex
            COMMAND emacs -Q --batch --eval \"(progn
                (add-to-list 'load-path
                       (expand-file-name \\"~/.emacs.d/plugins/org-mode/lisp/\\"))
                     (add-to-list 'load-path
                    (expand-file-name \\"~/.emacs.d/plugins/org-mode/contrib/lisp/\\" t))
                (require 'org)
                     (require 'org-export)
                (require 'org-exp)
                     (require 'org-inlinetask)
                (require 'ob-plantuml)
                     (setq org-plantuml-jar-path \\"/home/myles/Downloads/plantuml.jar\\")
                     (org-babel-do-load-languages
                      'org-babel-load-languages
                    '((emacs-lisp . t)
                        (sh . t)
                        (plantuml . t)))
                     (setq org-confirm-babel-evaluate nil)
                   (setq org-export-with-todo-keywords nil)
               (load-library \\"/home/myles/lib/lisp/my-export.el\\")
               (add-to-list 'org-export-before-processing-hook 'my-export-delete-headlines-tagged-noheading)
            (load-file \\"thesis.el\\")
                (find-file \\"${CMAKE_CURRENT_BINARY_DIR}/mainThesis.org\\")
                (org-e-latex-export-to-latex))\"
            DEPENDS orgfile elfile
            COMMENT "Exporting orgmode file to LaTeX using emacs")
        
        add_custom_target( mainfile ALL
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mainThesis.tex )
        
        add_latex_document(master.tex
            BIBFILES texlib/mybiblatex.bib
            INPUTS tex/title.tex
            tex/FEM_ch.tex
            tex/multiphase_flow.tex
            tex/sharedMemory_sec.tex
            tex/programming_ch.tex
            tex/bibliography.tex
            texlib/mystyle.sty
            tex/linked_nodes_test.tex
            IMAGE_DIRS ${IMAGE_DIR} ../graphics/thirdParty ../graphics/VE
            DEPENDS ${ALL_R_FILES}
            DEFAULT_PDF
            USE_NOMENCL)
#+END_SRC


Myles

      parent reply	other threads:[~2012-11-28 20:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-28  8:34 running the new exporter asynchronously? Alan Schmitt
2012-11-28 13:25 ` Nicolas Goaziou
2012-11-28 13:45   ` Eric Schulte
2012-11-28 15:13     ` Alan Schmitt
2012-11-28 16:50       ` Eric Schulte
2012-11-28 20:46     ` Myles English [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87obih78wm.fsf@gmail.com \
    --to=mylesenglish@gmail.com \
    --cc=alan.schmitt@polytechnique.org \
    --cc=emacs-orgmode@gnu.org \
    --cc=n.goaziou@gmail.com \
    --cc=schulte.eric@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).