Hi all, I'm attaching a patch with a proposal to unify in a single constant (named `org-latex-language-alist') `org-latex-polyglossia-language-alist' and `org-latex-babel-language-alist', along with some necessary (minor) modifications in `org-latex-guess-polyglossia-language' and `org-latex-guess-babel-language'
The new list, which is not exhaustive, is built taking as a reference the documentation of Babel and Polyglossia in their latest versions within TeX live 2021. It also assumes the latest improvements in the babel package (on the current state of the art regarding the babel and polyglossia packages, see this previous thread: https://list.orgmode.org/87wnmv4s87....@posteo.net/). I have also corrected some minor inconsistencies in the previous two lists. This new alist supports three types of members: - Members with two elements: CODE BABEL/POLYGLOSSIA-OPTION. i.e.: ("ar" "arabic") - Members with three elements: CODE BABEL/POLYGLOSSIA-OPTION ASTERISK (the presence of the asterisk indicates that this language is not loaded in Babel using the old method of ldf files but using ini files. If Babel is loaded in an Org document with these languages, the \"AUTO \" argument is just removed, to avoid compilation errors. The new babel method with ini files is not supported, for backward compatibility with 'old' ldf method). i.e. ("bo" "tibetan" "*") - Members with four elements (for variants of languages): CODE BABEL-OPTION POLYGLOSSIA-OPTION POLYGLOSSIA-VARIANT i.e. ("es" "spanishmx" "spanish" "mexican") ==> babel: \usepackage[mexican]{babel} ==> polyglossia: \usepackage{polyglossia} \setmainlanguage[variant=mexican]{spanish} I also attach an Org document for testing. Best regards, Juan Manuel
>From 389a4e43756a7c195c2c1f751b7dc9c03447526d Mon Sep 17 00:00:00 2001 From: Juan Manuel Macias <maciasch...@posteo.net> Date: Sun, 3 Oct 2021 16:55:31 +0200 Subject: [PATCH] ox-latex.el: Unify in one list babel and polyglossia language alists * lisp/ox-latex.el (org-latex-language-alist): Unify in a single list `org-latex-polyglossia-language-alist' and `org-latex-babel-language-alist' --- lisp/ox-latex.el | 167 +++++++++++++++++++---------------------------- 1 file changed, 68 insertions(+), 99 deletions(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index 3e3967033..de03470fa 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -160,144 +160,109 @@ ;;; Internal Variables -(defconst org-latex-babel-language-alist - '(("af" . "afrikaans") - ("bg" . "bulgarian") - ("ca" . "catalan") - ("cs" . "czech") - ("cy" . "welsh") - ("da" . "danish") - ("de" . "germanb") - ("de-at" . "naustrian") - ("de-de" . "ngerman") - ("el" . "greek") - ("en" . "english") - ("en-au" . "australian") - ("en-ca" . "canadian") - ("en-gb" . "british") - ("en-ie" . "irish") - ("en-nz" . "newzealand") - ("en-us" . "american") - ("es" . "spanish") - ("et" . "estonian") - ("eu" . "basque") - ("fi" . "finnish") - ("fr" . "french") - ("fr-ca" . "canadien") - ("gl" . "galician") - ("hr" . "croatian") - ("hu" . "hungarian") - ("id" . "indonesian") - ("is" . "icelandic") - ("it" . "italian") - ("la" . "latin") - ("ms" . "malay") - ("nl" . "dutch") - ("nb" . "norsk") - ("nn" . "nynorsk") - ("no" . "norsk") - ("pl" . "polish") - ("pt" . "portuguese") - ("pt-br" . "brazilian") - ("ro" . "romanian") - ("ru" . "russian") - ("sa" . "sanskrit") - ("sb" . "uppersorbian") - ("sk" . "slovak") - ("sl" . "slovene") - ("sq" . "albanian") - ("sr" . "serbian") - ("sv" . "swedish") - ("ta" . "tamil") - ("tr" . "turkish") - ("uk" . "ukrainian")) - "Alist between language code and corresponding Babel option.") - -(defconst org-latex-polyglossia-language-alist - '(("am" "amharic") +(defconst org-latex-language-alist + '(("am" "amharic" "*") ("ar" "arabic") - ("ast" "asturian") + ("ast" "asturian" "*") ("bg" "bulgarian") - ("bn" "bengali") - ("bo" "tibetan") + ("bn" "bengali" "*") + ("bo" "tibetan" "*") ("br" "breton") ("ca" "catalan") - ("cop" "coptic") + ("cop" "coptic" "*") ("cs" "czech") ("cy" "welsh") ("da" "danish") - ("de" "german" "german") - ("de-at" "german" "austrian") - ("de-de" "german" "german") - ("dsb" "lsorbian") - ("dv" "divehi") + ("de" "ngerman" "german" "german") + ("de-at" "naustrian" "german" "austrian") + ("dsb" "lsorbian" "*") + ("dv" "divehi" "*") ("el" "greek") - ("en" "english" "usmax") - ("en-au" "english" "australian") - ("en-gb" "english" "uk") - ("en-nz" "english" "newzealand") - ("en-us" "english" "usmax") + ("el-polyton" "polutonikogreek" "greek" "polytonic") + ("en" "american" "english" "usmax") + ("en-au" "australian" "english" "australian") + ("en-gb" "british" "english" "uk") + ("en-nz" "newzealand" "english" "newzealand") + ("en-us" "american" "english" "usmax") ("eo" "esperanto") ("es" "spanish") + ("es" "spanishmx" "spanish" "mexican") ("et" "estonian") ("eu" "basque") ("fa" "farsi") ("fi" "finnish") ("fr" "french") - ("fu" "friulan") + ("fr-ca" "canadien" "french" "canadian") + ("fur" "friulan") ("ga" "irish") ("gd" "scottish") ("gl" "galician") ("he" "hebrew") ("hi" "hindi") ("hr" "croatian") - ("hsb" "usorbian") + ("hsb" "uppersorbian" "sorbian" "upper") ("hu" "magyar") - ("hy" "armenian") + ("hy" "armenian" "*") ("ia" "interlingua") - ("id" "bahasai") + ("id" "bahasai" "*") ("is" "icelandic") ("it" "italian") - ("kn" "kannada") - ("la" "latin" "modern") - ("la-classic" "latin" "classic") - ("la-medieval" "latin" "medieval") - ("la-modern" "latin" "modern") - ("lo" "lao") + ("kn" "kannada" "*") + ("la" "latin") + ("la-classic" "classiclatin" "latin" "classic") + ("la-medieval" "medievallatin" "latin" "medieval") + ("la-ecclesiastic" "ecclesiasticlatin" "latin" "ecclesiastic") + ("lo" "lao" "*") ("lt" "lithuanian") ("lv" "latvian") - ("ml" "malayalam") - ("mr" "maranthi") - ("nb" "norsk") - ("nko" "nko") + ("ml" "malayalam" "*") + ("mr" "maranthi" "*") + ("nb" "norsk" "norwegian" "bokmal") ("nl" "dutch") - ("nn" "nynorsk") + ("nn" "nynorsk" "norwegian" "nynorsk") ("no" "norsk") ("oc" "occitan") ("pl" "polish") ("pms" "piedmontese") ("pt" "portuges") ("pt-br" "brazilian") - ("rm" "romansh") + ("rm" "romansh" "*") ("ro" "romanian") ("ru" "russian") - ("sa" "sanskrit") - ("se" "samin") + ("sa" "sanskrit" "*") ("sk" "slovak") - ("sl" "slovenian") + ("sl" "slovene") ("sq" "albanian") ("sr" "serbian") ("sv" "swedish") - ("syr" "syriac") - ("ta" "tamil") - ("te" "telugu") + ("syr" "syriac" "*") + ("ta" "tamil" "*") + ("te" "telugu" "*") ("th" "thai") ("tk" "turkmen") ("tr" "turkish") ("uk" "ukrainian") - ("ur" "urdu") + ("ur" "urdu" "*") ("vi" "vietnamese")) - "Alist between language code and corresponding Polyglossia option.") + "Alist between language code and corresponding Babel/Polyglossia option. + +For the names of the languages, the Babel nomenclature is +preferred to that of Polyglossia, in those cases where both +coincide. + +The alist supports three types of members: + +- Members with two elements: CODE BABEL/POLYGLOSSIA OPTION. + +- Members with three elements: CODE BABEL/POLYGLOSSIA OPTION +ASTERISK (the presence of the asterisk indicates that this +language is not loaded in Babel using the old method of ldf +files but using ini files. If Babel is loaded in an Org +document with these languages, the \"AUTO \" argument is just +removed, to avoid compilation errors). + +- Members with four elements (for variants of languages): CODE +BABEL-OPTION POLYGLOSSIA-OPTION POLYGLOSSIA-VARIANT") (defconst org-latex-table-matrix-macros '(("bordermatrix" . "\\cr") ("qbordermatrix" . "\\cr") @@ -1409,14 +1374,16 @@ Return the new header." header (let ((options (save-match-data (org-split-string (match-string 1 header) ",[ \t]*"))) - (language (cdr (assoc-string language-code - org-latex-babel-language-alist t)))) + (language (nth 1 (assoc language-code + org-latex-language-alist)))) ;; If LANGUAGE is already loaded, return header without AUTO. ;; Otherwise, replace AUTO with language or append language if ;; AUTO is not present. (replace-match (mapconcat (lambda (option) (if (equal "AUTO" option) language option)) (cond ((member language options) (delete "AUTO" options)) + ((let ((l (assoc language-code org-latex-language-alist))) + (and (consp l) (= (length l) 3))) (delete "AUTO" options)) ((member "AUTO" options) options) (t (append options (list language)))) ", ") @@ -1462,15 +1429,17 @@ Return the new header." (concat "\\usepackage{polyglossia}\n" (mapconcat (lambda (l) - (let ((l (or (assoc l org-latex-polyglossia-language-alist) + (let ((l (or (assoc l org-latex-language-alist) l))) (format (if main-language-set "\\setotherlanguage%s{%s}\n" (setq main-language-set t) "\\setmainlanguage%s{%s}\n") - (if (and (consp l) (= (length l) 3)) - (format "[variant=%s]" (nth 2 l)) + (if (and (consp l) (= (length l) 4)) + (format "[variant=%s]" (nth 3 l)) "") - (nth 1 l)))) + (if (and (consp l) (= (length l) 4)) + (nth 2 l) + (nth 1 l))))) languages "")) t t header 0))))) -- 2.32.0
test.org
Description: Lotus Organizer