emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] [BUG?][babel] Re: Including source when exporting in PDF


From: Rainer M Krug
Subject: Re: [O] [BUG?][babel] Re: Including source when exporting in PDF
Date: Wed, 18 Jan 2012 10:03:03 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20120111 Thunderbird/10.0

-----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 <address@hidden>
> 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
>>>> <address@hidden> wrote:
>>>>> On 12 January 2012 14:54, Frozenlock
>>>>> <address@hidden> 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 
>>>>>> <address@hidden> 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 
>>>>>>>>> <address@hidden> wrote: On 06/01/12 08:45,
>>>>>>>>> Eric Schulte wrote:
>>>>>>>>>>>> Frozenlock <address@hidden> 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:      address@hidden
>>>>> 
>>>>> 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:      address@hidden

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-----



reply via email to

[Prev in Thread] Current Thread [Next in Thread]