From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rainer M Krug Subject: [BUG?][babel] Re: Including source when exporting in PDF Date: Mon, 16 Jan 2012 12:21:05 +0100 Message-ID: <4F140821.4090509@gmail.com> References: <8739bt1dhe.fsf@gmx.com> <4F0DAAAC.50607@gmail.com> <4F0EA3B5.6080903@gmail.com> Reply-To: R.M.Krug@gmail.com Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([140.186.70.92]:38057) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rmkcl-0004wn-Gj for emacs-orgmode@gnu.org; Mon, 16 Jan 2012 06:21:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rmkci-0007V4-Td for emacs-orgmode@gnu.org; Mon, 16 Jan 2012 06:21:15 -0500 Received: from mail-we0-f169.google.com ([74.125.82.169]:42239) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rmkci-0007Ut-Lp for emacs-orgmode@gnu.org; Mon, 16 Jan 2012 06:21:12 -0500 Received: by werl4 with SMTP id l4so695355wer.0 for ; Mon, 16 Jan 2012 03:21:11 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Frozenlock Cc: emacs-orgmode@gnu.org, Eric Schulte -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 15/01/12 06:29, Frozenlock wrote: > This babel block should do the following: > > - When exporting, automatically tangle the babel blocks. - Then > take the resulting files and add them to a zip file, along with the > original .org file. - Add the necessary \usepackage and latex > commands to insert the zipfile. > > Let me know if something isn't like you want. > > Here is the babel block to add to your source (org) file: > > ======================================== #+BEGIN_SRC emacs-lisp > :results org :exports results :var > buffer-file-name=(buffer-file-name) (let ((filename > (file-name-nondirectory (file-name-sans-extension > buffer-file-name)))) (shell-command (concat "zip -j " filename > ".zip " filename".org " (mapconcat '(lambda (arg) > (convert-standard-filename (expand-file-name arg))) > (org-babel-tangle) " "))) (concat > "#+LATEX_HEADER:\\usepackage{attachfile2}\n" "#+LATEX: \\vfill > \\textattachfile[print=false,color=0.5 0.5 > 0.5]{"filename".zip}{Source (.org) \\& other files...}\n")) > #+END_SRC ============================== Thanks for this code - it looks good, but there is a serious problem: src_emacs_lisp{} expressions are evaluated and replaced with the result in the org file, which does not happen when tangling from the buffer itself. Example: ################################################ * name src_emacs-lisp{(buffer-file-name)} #+BEGIN_SRC emacs-lisp :results org :exports results :var buffer-file-name=(buffer-file-name) (org-babel-tangle) #+END_SRC ################################################ If I export the file above, the file get changed to: ################################################ * name #+BEGIN_SRC emacs-lisp :results org :exports results :var buffer-file-name=(buffer-file-name) (org-babel-tangle) #+END_SRC ################################################ Is there something wrong with the code? Rainer > > > On a related note, I've added some improvements to my own way to > export in multiple format and add the files along with the source. > The latex commands and usepackage are included, so no need to add > them elswhere in the org file: > > ============================== # Make sure this babel block is the > last one in the buffer; # block after this one won't be evaluated > before the txt and html export. #+BEGIN_SRC emacs-lisp :results org > :exports results :var buffer-file-name=(buffer-file-name) (let > ((org-export-babel-evaluate nil)); don't evaluate in 'recursive' > exports (save-window-excursion ;; avoid leakage when more than one > org export in block (org-export-as-ascii > org-export-headline-levels)) (save-window-excursion > (org-export-as-html org-export-headline-levels)) (let ((filename > (file-name-nondirectory (file-name-sans-extension > buffer-file-name))) (to-include-files (directory-files > (file-name-directory buffer-file-name)))) (shell-command (concat > "zip -j " filename ".zip " (mapconcat '(lambda (arg) arg) > (remove-if '(lambda (file) (string-match > "\\.$\\|\\.pdf$\\|\\.atfi$\\|\\.tex$\\|#" file)) ;; don't include > useless files to-include-files) " "))) (concat > "#+LATEX_HEADER:\\usepackage{attachfile2}\n" "#+LATEX: \\vfill > \\textattachfile[print=false,color=0.5 0.5 > 0.5]{"filename".zip}{Source (.org) & html, txt...}\n"))) #+END_SRC > ============================== > > > Enjoy! > > > > On Thu, Jan 12, 2012 at 8:59 AM, Rainer M Krug > wrote: >> On 12 January 2012 14:54, Frozenlock >> wrote: >>> The code block I previously sent only require you to specify >>> which _extension_ you want or don't want. No need to include >>> any specific filename (other than the .zip file in the latex >>> "include" command). >>> >>> Am I to understand you want something to include *all and only* >>> tangled files? >> >> Yes - and the files do have different extensions (e.g. .R, .sh, >> .sub, none) and are not tangled necessarily in a specific >> directory. >> >> and the original org file, but that is not a problem. >> >> Rainer >> >>> >>> -- >>> >>> I tried ":exports result" with no success. I'll try to send a >>> minimum working example shortly. >>> >>> On Thu, Jan 12, 2012 at 4:11 AM, Rainer M Krug >>> wrote: > On 12/01/12 03:06, Frozenlock wrote: >>>>>> To include multiple files, I export all of the required >>>>>> files before the PDF creation and zip them. This way, I >>>>>> only need to include a single zip file. > > Good idea. > >>>>>> >>>>>> #+BEGIN_SRC emacs-lisp :exports none ;; various exports >>>>>> (save-window-excursion (org-export-as-ascii >>>>>> org-export-headline-levels)) (save-window-excursion >>>>>> (org-export-as-html org-export-headline-levels)) >>>>>> >>>>>> ;;zip the required files (let ((filename >>>>>> (file-name-sans-extension (file-name-nondirectory >>>>>> (buffer-file-name))))) (shell-command (concat "zip " >>>>>> filename ".zip " (mapconcat '(lambda (arg) arg) >>>>>> (remove-if '(lambda (filename) (string-match >>>>>> "\\.$\\|\\.pdf$\\|\\.atfi$\\|#" filename)) >>>>>> (directory-files (file-name-directory >>>>>> (buffer-file-name)))) " ")))) #+END_SRC >>>>>> >>>>>> (I've added this code in a babel block to evaluate just >>>>>> before the PDF export.) > > I actually did not want to fiddle with the file names, as it is to > easy to forget some: this concerns in my case literate programming > of a simulation model in R, resul;ting in several files of > different extensions - it is to easy to forget one. > > If I tangle, I get all the names of the tangled files, but I do > not know how I can feed them into the zip file. > >>>>>> >>>>>> As you can see, I make sure I don't include a previous >>>>>> PDF, or any other useless file. > > True. > >>>>>> >>>>>> If you wish to add only a single type of file, simply >>>>>> replace "remove-if" by "remove-if-not" and change the >>>>>> value in the string-match function. For example, >>>>>> "\\.$\\|\\.pdf$\\|\\.atfi$\\|#" would become "\\.lisp$" >>>>>> to include all your exported lisp files. >>>>>> >>>>>> Hope this helps! >>>>>> >>>>>> >>>>>> By the way, I can't get the code block to be evaluated >>>>>> automatically when I export to PDF, any clue on how to do >>>>>> that? > > I assume, it is caused by the :exports none - so no evaluation is > done on export. Try changing it to :exports result and then > generate an empty result, or a list of files included in the zip > file. > > Cheers, > > Rainer > > >>>>>> >>>>>> >>>>>> >>>>>> On Wed, Jan 11, 2012 at 10:28 AM, Rainer M Krug >>>>>> wrote: On 06/01/12 08:45, Eric >>>>>> Schulte wrote: >>>>>>>>> Frozenlock writes: >>>>>>>>> >>>>>>>>>> I am a strong advocate in keeping the source of >>>>>>>>>> everything. >>>>>>>>>> >>>>>>>>>> However, Â a source can easily be lost if it >>>>>>>>>> doesn't follow the document. In LaTeX, there's a >>>>>>>>>> package to attach a file to a PDF (like when you >>>>>>>>>> attach a file to an email). By doing so, the >>>>>>>>>> source will follow the PDF even if the common >>>>>>>>>> reader have no clue what it's for, or even how to >>>>>>>>>> use it. >>>>>>>>>> >>>>>>>>> >>>>>>>>> This sounds like a great Reproducible Research >>>>>>>>> practice. >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Here is how I attach my org source to every >>>>>>>>>> document I export to PDF: >>>>>>>>>> >>>>>>>>>> ;; Include the source file for every exported >>>>>>>>>> PDF (org-mode) (eval-after-load "org-exp" >>>>>>>>>> '(defadvice org-export-as-latex (around >>>>>>>>>> org-export-add-source-pdf activate) "Add the >>>>>>>>>> source (org file) to the resulting pdf file" (let >>>>>>>>>> ((filename (buffer-name))) ad-do-it ;do the >>>>>>>>>> function (let ((latex-buffer ad-return-value)) >>>>>>>>>> (set-buffer latex-buffer) (while >>>>>>>>>> (re-search-forward "\\\\usepackage{.+}" nil t)); >>>>>>>>>> go to the end of packages (insert >>>>>>>>>> "\n\\usepackage{attachfile2}"); the package >>>>>>>>>> needed to attach files (when (re-search-forward >>>>>>>>>> "\\\\end{document}" nil t) (forward-line -1) >>>>>>>>>> (insert (concat "\\vfill\n" "\\footnotesize\n" >>>>>>>>>> "The source of this document is an Org-Mode file >>>>>>>>>> attached here:" "\n\\attachfile" "{" filename >>>>>>>>>> "}"))) (save-buffer))))) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> This is by no mean a patch, but rather a quick >>>>>>>>>> hack. Perhaps someone with a working knowledge of >>>>>>>>>> the org-export could find a way to add a source >>>>>>>>>> option? >>>>>>>>>> >>>>>>>>> >>>>>>>>> I think this practice may not actually require any >>>>>>>>> changes to the Org-mode core. Â The attached small >>>>>>>>> Org-mode file will attach itself to pdf exports >>>>>>>>> using only features already present in Org-mode. >>>>>> >>>>>> Following this idea - how can I easily attach all files >>>>>> created by tangling? Is there a programmatic way, without >>>>>> having to specify them manually? >>>>>> >>>>>> Thanks, >>>>>> >>>>>> Rainer >>>>>> >>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> Thanks for sharing this idea! >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Cheers! >>>>>>>>>> >>>>>>>>> >>>>>> >>>>>> > >> >> >> >> -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc >> (Conservation Biology, UCT), Dipl. Phys. (Germany) >> >> Centre of Excellence for Invasion Biology Stellenbosch >> University South Africa >> >> Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 >> 59 98 Fax (F): +33 - (0)9 58 10 27 44 >> >> Fax (D): +49 - (0)3 21 21 25 22 44 >> >> email: Rainer@krugs.de >> >> Skype: RMkrug - -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer@krugs.de Skype: RMkrug -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk8UCCEACgkQoYgNqgF2egrQjQCggcFy4UASWK2ilhtaC3jndqf0 LEYAn2jZ5yWj9H7jTi51r64ZxuspsYUh =QKfm -----END PGP SIGNATURE-----