Hi Sebastien,

>>> Behavior changes:
>>> 1.  =("AUTO" "babel" t)= works like ("AUTO" "inputenc" t) in
>>>     =`org-latex-default-packages-alist'=. I.e. the default
>>>     language is choosen (sic).
>>> 2. if #+LANGUAGE: mylang then then \usepackage[mylang]{babel} in
>>>     outpu (sic). 
>>
>> This message in five line. . .  
>
> That's much clearer.

Thanks, and sorry for not being specific enough if the first case.

> Do I understand correctly that your patch does not change anything
> for people who don't use AUTO for Babel in their
> `org-latex-default-packages-alist'?

Yes, and no, but mainly yes.

The AUTO part should be completely autonomous to the setup you
referred to.  The AUTO part is always discarded.

It changes behavior for your setup in that you can define a LANGUAGE
that isn't a known abbreviation.

Given your points the attached is a much more robust version of the
patch, so thanks a lot.  Examples, omitted from the commit message:


Behavior changes:
1.  =("AUTO" "babel" t)= works like ("AUTO" "inputenc" t) in
    =`org-latex-default-packages-alist'=. If a LANGUAGE-cookie is 
    present this will be used, otherwise the default,
    =`org-export-default-language'=  language is choose.
2. If #+LANGUAGE: mylang then then \usepackage[mylang]{babel} in
   output.

Examples: 
 1. Assume ("AUTO" "babel" t) is a member of
    =`org-latex-default-packages-alist'= and default language is en.
    If =#+LANGUAGE: fr= is in the document AUTO is replaced with french.
    If =#+LANGUAGE: mylang= then AUTO is replaced with mylang. 

2. Assume ("AUTO" "babel" t) is not a member of
   =`org-latex-default-packages-alist'= and assume LATEX_HEADER:
   \usepackage[english]{babel} and LANGUAGE: mylang.  Then the
   exported result is \usepackage[english, mylang]{babel}. 
   If \usepackage[AUTO,english]{babel} then 

As for 'robustness', the following case is handled correctly (from
emacs -q with default org-latex-default-package-alist):

#+LANGUAGE: da
#+LATEX_HEADER: \usepackage[AUTO, danish]{babel}

#+LANGUAGE: danish
#+LATEX_HEADER: \usepackage[AUTO, danish]{babel}

#+LANGUAGE: fr
#+LATEX_HEADER: \usepackage[AUTO, danish, english]{babel}

#+LANGUAGE: de
#+LATEX_HEADER: \usepackage[danish, english, AUTO]{babel}

Cheers,
Rasmus

-- 
Vote for proprietary math!
>From 4de4fde0a5ba6d0eb8a9898e7e262f3f8fa5c6ea Mon Sep 17 00:00:00 2001
From: "rasmus.pank" <rasmus.p...@gmail.com>
Date: Sat, 1 Jun 2013 00:20:18 +0200
Subject: [PATCH] Allow AUTO argument to org-latex-guess-babel-language.

* ox-latex.el (org-latex-guess-babel-language): ignore AUTO if it is
the argument to (the LaTeX package) babel.

* ox-latex.el (org-lat ex-guess-babel-language): if LANGUAGE: mylang
and mylang is not a member  =`org-latex-inputenc-alist'=
use mylang (rather than discard it).

* ox-latex.el	 (org-latex-guess-babel-language): retain case
in final regexp of function.
---
 lisp/ox-latex.el | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index ff0ca1d..09a9103 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -910,6 +910,9 @@ Insertion of guessed language only happens when Babel package has
 explicitly been loaded.  Then it is added to the rest of
 package's options.
 
+The argument to Babel may be \"AUTO\" which is then replaced with
+the language of the document or `org-export-default-language'.
+
 Return the new header."
   (let ((language-code (plist-get info :language)))
     ;; If no language is set or Babel package is not loaded, return
@@ -917,17 +920,26 @@ Return the new header."
     (if (or (not (stringp language-code))
 	    (not (string-match "\\\\usepackage\\[\\(.*\\)\\]{babel}" header)))
 	header
-      (let ((options (save-match-data
-		       (org-split-string (match-string 1 header) ",")))
-	    (language (cdr (assoc language-code
-				  org-latex-babel-language-alist))))
-	;; If LANGUAGE is already loaded, return header.  Otherwise,
+      (let ((options (save-match-data  
+		       ;; As with `org-latex-guess-inputenc' it only works with
+		       ;; uppercase "AUTO
+		       (remove "AUTO"
+			       (org-split-string 
+				;; in case of [lang_one, lang_two]
+				(replace-regexp-in-string "[ \t\n]*" ""
+							  (match-string 1 header)) ","))))
+	    (language (or
+		       (cdr (assoc language-code
+				   org-latex-babel-language-alist))
+		       language-code)))
+	;; If LANGUAGE is already loaded, return header without AUTO.  Otherwise,
 	;; append LANGUAGE to other options.
-	(if (member language options) header
-	  (replace-match (mapconcat 'identity
-				    (append options (list language))
-				    ",")
-			 nil nil header 1))))))
+	(replace-match (mapconcat 'identity    
+				  (if (member language options) 
+				      options
+				    (append options (list language)))
+				  ",")
+		       t nil header 1)))))
 
 (defun org-latex--find-verb-separator (s)
   "Return a character not used in string S.
-- 
1.8.3

Reply via email to