alan.schm...@polytechnique.org writes: > Yes, this is not satisfactory (and the email and author is also > problematic in this regard). We need to know whether an option was set > in the file, independently of its default value. Is there a way to do > this?
Thanks to Nicolas, I've been able to create a cleaner solution: we track some of the variables (ones for which we currently output something by default, typically because they are set or because we choose to always output something, like from-phone), and we only output the code if the variable was set in the file. Thus if nothing is set, the lco file wins. Note that with this approach, one can have a default in the lco that is overridden by the file, for instance for foldmarks or to display phone numbers. Regarding the name and email, we output it before the lco if they are not specified in the file, and after if they are. What do you think of this approach? Are there other variables we should track? Best, Alan
>From 9a6995fe9dcbb792a76fd8f0737a02d4d4015f82 Mon Sep 17 00:00:00 2001 From: Alan Schmitt <alan.schm...@polytechnique.org> Date: Mon, 22 Jul 2013 16:46:02 +0200 Subject: [PATCH] Koma exporter: Ensure customization to LCO files are taken into account * contrib/lisp/ox-koma-letter.el: Change default values to match the scrlttr2 default values. Track which options are set in the file and only output the corresponding options when they are changed. --- contrib/lisp/ox-koma-letter.el | 47 +++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/contrib/lisp/ox-koma-letter.el b/contrib/lisp/ox-koma-letter.el index 44626a9..ff71bd3 100644 --- a/contrib/lisp/ox-koma-letter.el +++ b/contrib/lisp/ox-koma-letter.el @@ -228,7 +228,7 @@ English manual of 2012-07-22)" -(defcustom org-koma-letter-use-backaddress t +(defcustom org-koma-letter-use-backaddress nil "Print return address in small line above to address." :group 'org-export-koma-letter :type 'boolean) @@ -243,12 +243,12 @@ Use `foldmarks:true' to activate default fold marks or :group 'org-export-koma-letter :type 'string) -(defcustom org-koma-letter-use-phone t +(defcustom org-koma-letter-use-phone nil "Print sender's phone number." :group 'org-export-koma-letter :type 'boolean) -(defcustom org-koma-letter-use-email t +(defcustom org-koma-letter-use-email nil "Print sender's email address." :group 'org-export-koma-letter :type 'boolean) @@ -287,9 +287,11 @@ Use `foldmarks:true' to activate default fold marks or org-koma-letter-default-class org-latex-default-class) t) (:author "AUTHOR" nil (org-koma-letter--get-custom org-koma-letter-author) t) + (:author-changed-in-buffer-p "AUTHOR" nil nil t) (:from-address "FROM_ADDRESS" nil nil newline) (:phone-number "PHONE_NUMBER" nil org-koma-letter-phone-number) (:email "EMAIL" nil (org-koma-letter--get-custom org-koma-letter-email) t) + (:email-changed-in-buffer-p "EMAIL" nil nil t) (:to-address "TO_ADDRESS" nil nil newline) (:place "PLACE" nil org-koma-letter-place) (:opening "OPENING" nil org-koma-letter-opening) @@ -306,9 +308,13 @@ Use `foldmarks:true' to activate default fold marks or (:with-after-letter nil "after-letter-order" org-koma-letter-special-tags-after-letter) (:with-backaddress nil "backaddress" org-koma-letter-use-backaddress) + (:with-backaddress-changed-in-buffer-p nil "backaddress" nil) (:with-foldmarks nil "foldmarks" org-koma-letter-use-foldmarks) + (:with-foldmarks-changed-in-buffer-p nil "foldmarks" nil) (:with-phone nil "phone" org-koma-letter-use-phone) + (:with-phone-changed-in-buffer-p nil "phone" nil) (:with-email nil "email" org-koma-letter-use-email) + (:with-email-changed-in-buffer-p nil "email" nil) (:with-place nil "place" org-koma-letter-use-place) (:with-subject nil "subject" org-koma-letter-subject-format)) :translate-alist '((export-block . org-koma-letter-export-block) @@ -522,11 +528,19 @@ holding export options." info))) (let ((lco (plist-get info :lco)) (author (plist-get info :author)) + (author-set (plist-get info :author-changed-in-buffer-p)) (from-address (org-koma-letter--determine-special-value info 'from)) (phone-number (plist-get info :phone-number)) (email (plist-get info :email)) + (email-set (plist-get info :email-changed-in-buffer-p)) (signature (plist-get info :signature))) (concat + ;; author or email not set in file: may be overridden by lco + (unless author-set + (when author (format "\\setkomavar{fromname}{%s}\n" + (org-export-data author info)))) + (unless email-set + (when email (format "\\setkomavar{fromemail}{%s}\n" email))) ;; Letter Class Option File (when lco (let ((lco-files (split-string lco " ")) @@ -535,11 +549,12 @@ holding export options." (setq lco-def (format "%s\\LoadLetterOption{%s}\n" lco-def lco-file))) lco-def)) ;; Define "From" data. - (when author (format "\\setkomavar{fromname}{%s}\n" - (org-export-data author info))) + (when (and author author-set) (format "\\setkomavar{fromname}{%s}\n" + (org-export-data author info))) (when from-address (format "\\setkomavar{fromaddress}{%s}\n" from-address)) - (when phone-number (format "\\setkomavar{fromphone}{%s}\n" phone-number)) - (when email (format "\\setkomavar{fromemail}{%s}\n" email)) + (when phone-number + (format "\\setkomavar{fromphone}{%s}\n" phone-number)) + (when (and email email-set) (format "\\setkomavar{fromemail}{%s}\n" email)) (when signature (format "\\setkomavar{signature}{%s}\n" signature)))) ;; Date. (format "\\date{%s}\n" (org-export-data (org-export-get-date info) info)) @@ -550,14 +565,22 @@ holding export options." (format "\\setkomavar{place}{%s}\n" (if with-place place "")))) ;; KOMA options (let ((with-backaddress (plist-get info :with-backaddress)) + (with-backaddress-set (plist-get info :with-backaddress-changed-in-buffer-p)) (with-foldmarks (plist-get info :with-foldmarks)) + (with-foldmarks-set (plist-get info :with-foldmarks-changed-in-buffer-p)) (with-phone (plist-get info :with-phone)) - (with-email (plist-get info :with-email))) + (with-phone-set (plist-get info :with-phone-changed-in-buffer-p)) + (with-email (plist-get info :with-email)) + (with-email-set (plist-get info :with-email-changed-in-buffer-p))) (concat - (format "\\KOMAoption{backaddress}{%s}\n" (if with-backaddress "true" "false")) - (format "\\KOMAoption{foldmarks}{%s}\n" (if with-foldmarks with-foldmarks "false")) - (format "\\KOMAoption{fromphone}{%s}\n" (if with-phone "true" "false")) - (format "\\KOMAoption{fromemail}{%s}\n" (if with-email "true" "false")))) + (when with-backaddress-set + (format "\\KOMAoption{backaddress}{%s}\n" (if with-backaddress "true" "false"))) + (when with-foldmarks-set + (format "\\KOMAoption{foldmarks}{%s}\n" (if with-foldmarks with-foldmarks "false"))) + (when with-phone-set + (format "\\KOMAoption{fromphone}{%s}\n" (if with-phone "true" "false"))) + (when with-email-set + (format "\\KOMAoption{fromemail}{%s}\n" (if with-email "true" "false"))))) ;; Document start "\\begin{document}\n\n" ;; Subject -- 1.8.2.1