emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] Including source when exporting in PDF


From: Frozenlock
Subject: Re: [O] Including source when exporting in PDF
Date: Sun, 15 Jan 2012 00:29:51 -0500

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


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:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> 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 :       +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/
>>>
>>> iEUEARECAAYFAk8Oo7UACgkQoYgNqgF2egpg9wCfTq04zAVki+Oh1g97/C3FERf3
>>> Ej0Al30dF8xQdyHNOmOK8y7ZolA0dzE=
>>> =IUuN
>>> -----END PGP SIGNATURE-----
>
>
>
> --
> 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



reply via email to

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