From: Rainer M Krug <r.m.krug@gmail.com>
To: Frozenlock <frozenlock@gmail.com>
Cc: emacs-orgmode@gnu.org, Eric Schulte <eric.schulte@gmx.com>
Subject: [BUG?][babel] Re: Including source when exporting in PDF
Date: Mon, 16 Jan 2012 12:21:05 +0100 [thread overview]
Message-ID: <4F140821.4090509@gmail.com> (raw)
In-Reply-To: <CACjB3dvgmxW4_obHGaEBnE2UG7ABudpVxV5PTdtO35UFqEp3kQ@mail.gmail.com>
-----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 <r.m.krug@gmail.com>
> wrote:
>> On 12 January 2012 14:54, Frozenlock <frozenlock@gmail.com>
>> 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
>>> <r.m.krug@gmail.com> 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
>>>>>> <r.m.krug@gmail.com> wrote: On 06/01/12 08:45, Eric
>>>>>> Schulte wrote:
>>>>>>>>> Frozenlock <frozenlock@gmail.com> 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-----
next prev parent reply other threads:[~2012-01-16 11:21 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-04 21:29 Including source when exporting in PDF Frozenlock
2012-01-06 7:45 ` Eric Schulte
2012-01-11 15:28 ` Rainer M Krug
2012-01-12 2:06 ` Frozenlock
2012-01-12 9:11 ` Rainer M Krug
2012-01-12 13:54 ` Frozenlock
2012-01-12 13:59 ` Rainer M Krug
2012-01-15 5:29 ` Frozenlock
2012-01-16 11:21 ` Rainer M Krug [this message]
2012-01-18 0:57 ` [BUG?][babel] " Frozenlock
2012-01-18 9:03 ` Rainer M Krug
2012-01-20 18:12 ` Eric Schulte
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=4F140821.4090509@gmail.com \
--to=r.m.krug@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=eric.schulte@gmx.com \
--cc=frozenlock@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).