emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Rasmus <rasmus@gmx.us>
To: emacs-orgmode@gnu.org
Subject: Re: [PATCH (new version)][ox-latex.el] Allow AUTO argument to org-latex-guess-babel-language.
Date: Tue, 04 Jun 2013 11:25:09 +0200	[thread overview]
Message-ID: <87ppw26xe2.fsf_-_@pank.eu> (raw)
In-Reply-To: 86wqqae5n4.fsf@somewhere.org

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

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!

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Allow-AUTO-argument-to-org-latex-guess-babel-languag_v2.patch --]
[-- Type: text/x-patch, Size: 2698 bytes --]

From 4de4fde0a5ba6d0eb8a9898e7e262f3f8fa5c6ea Mon Sep 17 00:00:00 2001
From: "rasmus.pank" <rasmus.pank@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	other threads:[~2013-06-04  9:25 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-31 22:33 [PATCH][ox-latex.el] Allow AUTO argument to org-latex-guess-babel-language Rasmus
2013-06-01  5:31 ` Achim Gratz
2013-06-01 13:59   ` Rasmus
2013-06-01 14:07     ` Rasmus
2013-06-03  7:44 ` Sebastien Vauban
2013-06-03 13:47   ` Rasmus
2013-06-03 14:08     ` Sebastien Vauban
2013-06-03 15:10       ` Rasmus
2013-06-04  6:45         ` Sebastien Vauban
2013-06-04  9:25           ` Rasmus [this message]
2013-06-05 13:35             ` [PATCH (new version)][ox-latex.el] " Nicolas Goaziou
2013-06-06  7:46               ` Sebastien Vauban
2013-06-06  9:28                 ` Rasmus
2013-06-06  9:36               ` Rasmus
2013-06-06 21:30               ` [PATCH (v3)][ox-latex.el] " Rasmus
2013-06-07 12:35                 ` Nicolas Goaziou
2013-06-07 13:16                   ` Rasmus
2013-06-07 13:25                     ` Nicolas Goaziou
2013-06-07 15:26                   ` Rasmus
2013-06-09  7:55                     ` Nicolas Goaziou
2013-06-11 23:12                       ` [PATCH (v5)][ox-latex.el] " Rasmus
2013-06-12 13:27                         ` Nicolas Goaziou
2013-06-12 14:32                           ` Rasmus

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=87ppw26xe2.fsf_-_@pank.eu \
    --to=rasmus@gmx.us \
    --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).