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
prev 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).