Dear Diego, Gracias! I slightly modified your solution. I added the #+INCLUDE line to the end of #+LATEX_HEADER, because then it will overwrite any previous \printanswers and \noprintanswers defined in the HEADER. #+TITLE:... ... #+LATEX_HEADER: \usepackage{hyperref} #+INCLUDE: ./latex-exam-printanswers-switch.org I used the file name latex-exam-printanswers-switch.org, instead of printanswers.org, because it gives a better indication of what it does. I used your function as it was, except that I changed the function name and updated the switch org file. (defun org-latex-export-to-pdf-exam () (interactive) (write-region "#+LATEX_HEADER: \\printanswers" nil "latex-exam-printanswers-switch.org") (org-latex-export-to-pdf) (rename-file (org-export-output-file-name ".pdf") (org-export-output-file-name "-with_answers.pdf")) (write-region "" nil "latex-exam-printanswers-switch.org") (org-latex-export-to-pdf) ) It works very fine! Have a nice Easter! Yours sincerely, Xianwen On 2021-03-24 13:16, Diego Zamboni wrote: > Hi Xianwen, > > I think the easiest way to conditionally include text in the preamble > of the document would be by including a file which can be empty > sometimes, and contain the appropriate text when needed. For example, > you could have something like this in your Org file: > >> #+include: ./printanswers.org [1] >> #+TITLE: Test >> ... > > Then the following function will automatically export the file twice, > one with the \printanswers command inserted then rename the resulting > file, and export again without: > >> (defun org-latex-export-exams () >> (interactive) >> (write-region "#+latex_header: \\printanswers" nil "printanswers.org >> [1]") >> (org-latex-export-to-pdf) >> (rename-file (org-export-output-file-name ".pdf") >> (org-export-output-file-name "-with_answers.pdf")) >> (write-region "" nil "printanswers.org [1]") >> (org-latex-export-to-pdf)) > > You can then run M-x org-latex-export-exams to generate both files. > > Hope this helps, > --Diego > > On Wed, Mar 24, 2021 at 11:21 AM Xianwen Chen (陈贤文) > wrote: > > Dear Christine (and CC list), > > Thank you! > > On 2021-03-19 10:13, Christine Köhn wrote: > Here is one way to do the latex part. You could pass a jobname to > latex. > > I have this > > \IfEndWith*{\jobname}{withsolution}{% > \usepackage{todonotes} > \printanswers > }{\usepackage[disable]{todonotes}} > > in a myexam.sty file to switch between modes (with or without solutions > and todo notes) and use it in the latex file with > > \usepackage{myexam} > > You could add your own latex class to org-latex-classes and add this > line there. > > The jobname has to be passed to latex with something like -jobname > withsolution if you want it to be with solutions. I use a Makefile for > this purpose which calls latexmk > > latexmk -pdf -pdflatex="pdflatex --interaction=errorstopmode" -use-make > > and adds -jobname=$(basename $@) if asked to create a pdf ending with > withsolution.pdf. I can send you the Makefile if you're interested. > > That's very interesting way to solve the problem using LaTeX. Thank you > for sharing this. At the moment I'm leaning more towards solving it > using emacs lisp. > > To use the jobname from within orgmode, you'll have to change > org-latex-pdf-process to use the jobname if needed. I think one way to > achieve this is to add a new export backend which is derived from latex > (see org-export-define-derived-backend) and which sets > org-latex-pdf-process accordingly (and resets it afterwards). > > Thank you again. I'm thinking of a function like following. I'm using > comments to express the programming detail that I don't know how to do > yet. > > (deffun org-latex-export-to-pdf-exam () > (interactive) > # do some emacs lisp to add \printanswers to the end of org document > header, i.e., adding a line of #+LATEX_HEADER: \printanswers > (org-latex-export-to-pdf) > # do some emacs lips to move the foo.pdf to foo-with_solutions.pdf > # do some emacs lisp to add \noprintanswers to the end of org document > header, i.e., removing the line of #+LATEX_HEADER: \printanswers and > adding a line of #+LATEX_HEADER: \noprintanswers > (org-latex-export-to-pdf) > # remove the line of #+LATEX_HEADER: \noprintanswers > ) > > I don't know enough emacs lisp to fill in the details here for now. > However, I think this would be a way to do it within emacs. So each > time I call org-latex-export-to-pdf-exam, it would export two PDF > files, one with solutions and one without. > > What do you think? > > Yours sincerely, > Xianwen Links: ------ [1] http://printanswers.org