emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Xianwen Chen (陈贤文)" <xianwen.chen@gmail.com>
To: "Christine Köhn" <christine@chark.eu>
Cc: emacs-orgmode@gnu.org
Subject: Re: Exam LaTeX class
Date: Wed, 24 Mar 2021 10:26:15 +0000	[thread overview]
Message-ID: <43d0c2349e6a4345f7f100b13244c0a6@gmail.com> (raw)
In-Reply-To: <87pmzvo3i4.fsf@chark.eu>

[-- Attachment #1: Type: text/plain, Size: 2457 bytes --]

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

[-- Attachment #2: Type: text/html, Size: 5126 bytes --]

  reply	other threads:[~2021-03-24 10:22 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-18 13:46 Exam LaTeX class Xianwen Chen (陈贤文)
2021-03-19 10:13 ` Christine Köhn
2021-03-24 10:26   ` Xianwen Chen (陈贤文) [this message]
2021-03-24 13:16     ` Diego Zamboni
2021-03-28 16:33       ` Xianwen Chen (陈贤文)

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=43d0c2349e6a4345f7f100b13244c0a6@gmail.com \
    --to=xianwen.chen@gmail.com \
    --cc=christine@chark.eu \
    --cc=emacs-orgmode@gnu.org \
    /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).