From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rainer M Krug Subject: Re: [BUG?][babel] Re: Including source when exporting in PDF Date: Wed, 18 Jan 2012 10:03:03 +0100 Message-ID: <4F168AC7.4030409@gmail.com> References: <8739bt1dhe.fsf@gmx.com> <4F0DAAAC.50607@gmail.com> <4F0EA3B5.6080903@gmail.com> <4F140821.4090509@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]:58454) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RnRQJ-0007Yj-Ls for emacs-orgmode@gnu.org; Wed, 18 Jan 2012 04:03:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RnRQE-0001Wm-M1 for emacs-orgmode@gnu.org; Wed, 18 Jan 2012 04:03:15 -0500 Received: from mail-ey0-f169.google.com ([209.85.215.169]:42186) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RnRQE-0001Wa-BM for emacs-orgmode@gnu.org; Wed, 18 Jan 2012 04:03:10 -0500 Received: by eaan1 with SMTP id n1so1736667eaa.0 for ; Wed, 18 Jan 2012 01:03:09 -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 18/01/12 01:57, Frozenlock wrote: > I'm sorry, but I don't quite understand... > > Would it be possible to send a minimum working example of your org > file? > The example is below: ################################################ * 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 put the text in the ### lines in a new org file and export it, it is modified as described below. My guess is that it has to do with the fact that on export, a temporary copy is created, and some confusion is happening with which file is tangled. Cheers, Rainer > > > On Mon, Jan 16, 2012 at 6:21 AM, Rainer M Krug > wrote: 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/ iEYEARECAAYFAk8WisYACgkQoYgNqgF2egpFsACfYejaRRCaCy312UKqY1L4i7ZE NkkAnRv0jffw++k8rvky+xckPKeMWqps =VaDt -----END PGP SIGNATURE-----