Thanks, you're right, I forgot you don't need to escape the bracket.
Updated patch attached!

Cheers,

Derek



On Thu, May 21, 2026 at 11:58 PM Pedro Andres Aranda Gutierrez <
[email protected]> wrote:

> Ah, I see. However, tried this in the scratch buffer:
>
> (let  ((str
> "\\documentclass[11pt]{article}\n\n\n\\usepackage[utf8]{inputenc}
> \\usepackage[french]{babel}\n"))
>   (if (string-match "\\\\usepackage\\[\\([^]]*\\)\\]{babel}" str)
>     (message (match-string 1 str))
>     (message "???")))
>
> Ad it printed
> french
>
> So, apparently, you don't need the extra escape inside the charset,
> \\([^]]*\\)
> should be enough...
>
> Cheers, /PA
>
> On Fri, 22 May 2026 at 04:31, Derek Chen-Becker <[email protected]>
> wrote:
>
>> Hi Pedro,
>>
>> Thanks, I did try the non-greedy capture and it didn't work. I'm actually
>> just realizing that it probably didn't work because it's not that it's
>> greedy, it's that "]{babel}"doesn't sufficiently constrain the contents
>> ahead of it.
>>
>> Cheers,
>>
>> Derek
>>
>>
>>
>> On Thu, May 21, 2026 at 9:30 AM Pedro Andres Aranda Gutierrez <
>> [email protected]> wrote:
>>
>>> Hi Derek,
>>>
>>> the ox-latex.el part can be simplified as
>>>
>>>  (not (string-match "\\\\usepackage\\[\\(.*?\\)\\]{babel}" header)))
>>>
>>> That will make the regex stop before the ']' and is easier to read (at
>>> least for me-TM),
>>>
>>> Best,
>>> /PA
>>> ox-latex.el maintainer
>>>
>>>
>>> On Thu, 21 May 2026 at 15:30, Derek Chen-Becker <[email protected]>
>>> wrote:
>>>
>>>> Confirmed, against d34e34f3e.
>>>>
>>>> The replacement text of "utf8]{inputenc} \\usepackage[french, english"
>>>> makes it appear that the regex patterns used in
>>>> `org-latex-guess-babel-language' aren't sufficiently constrained. Checking
>>>> the regex, it's using "\\[.*\\]", which is why you're only seeing this when
>>>> you have more than one extra header (with only one, there's only one set of
>>>> braces).
>>>>
>>>> I took a look and think I have a fix but I want a second opinion. The
>>>> attached patch fixes the regex by changing the greedy match for the
>>>> language to one that only captures what's between the "[...]". I tried
>>>> using a non-greedy qualifier (".*?") and that didn't work, but I feel like
>>>> I always get tripped up by Elisp regex patterns. If someone has a better
>>>> suggestion for the regex I'm open to changing it.
>>>>
>>>> Owned.
>>>>
>>>> Cheers,
>>>>
>>>> Derek
>>>>
>>>> On Wed, May 20, 2026 at 11:41 AM <[email protected]> wrote:
>>>>
>>>>>
>>>>> With the following Org file
>>>>>
>>>>> ----------------------
>>>>> #
>>>>> * subtree
>>>>> :PROPERTIES:
>>>>> :EXPORT_LATEX_HEADER: \usepackage[utf8]{inputenc}
>>>>> :EXPORT_LATEX_HEADER+: \usepackage[french]{babel}
>>>>>                        :END:
>>>>>
>>>>> bak
>>>>> ----------------------
>>>>>
>>>>> upon subtree export (C-c C-e C-s lp), I get an error, the beginning of
>>>>> the
>>>>> backtrace of which is
>>>>>
>>>>> Debugger entered--Lisp error: (error "Invalid use of ‘\\’ in
>>>>> replacement
>>>>>   text")
>>>>>
>>>>> org-latex-guess-babel-language("\\documentclass[11pt]{article}\n\n\n\\usepackage[utf8]{inputenc}
>>>>>   \\usepackage[french]{babel}\n" (:export-options (subtree) :back-end
>>>>>   #s(org-export-backend :name latex :parent nil :transcoders (... ...
>>>>> ... .
>>>>>
>>>>>
>>>>> This occurs with
>>>>>
>>>>> GNU Emacs 30.2 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.43,
>>>>> cairo version 1.18.2) of 2025-08-18
>>>>>
>>>>> with either
>>>>>
>>>>> - a void .emacs and
>>>>>
>>>>> Org mode version 9.8.4 (9.8.4-2f6959 @
>>>>> /home/cochard/.emacs.d/elpa/org-9.8.2/)
>>>>>
>>>>> - a void .emacs and
>>>>>
>>>>> Org mode version 9.8.2 (9.8.2-2ef390 @
>>>>> /home/cochard/.emacs.d/elpa/org-9.8.2/)
>>>>>
>>>>> - emacs -Q and
>>>>>
>>>>> Org mode version 9.7.11 (release_9.7.11 @
>>>>> /usr/share/emacs/30.2/lisp/org/)
>>>>>
>>>>> For what it's worth: (1) the problem does not show up for every
>>>>> combination
>>>>> of
>>>>>
>>>>> :EXPORT_LATEX_HEADER:
>>>>> :EXPORT_LATEX_HEADER+:
>>>>>
>>>>> (2) I did not succeed in exhibiting the problem with a single
>>>>>
>>>>> :EXPORT_LATEX_HEADER:
>>>>>
>>>>> --
>>>>> EOST (École et Observatoire des Sciences de la Terre)
>>>>> ITE (Institut Terre & Environnement) | [email protected]
>>>>> 5 rue René Descartes                 | Phone: +33 (0)3 68 85 50 44
>>>>> F-67084 Strasbourg Cedex, France     | bureau 110, ancien bât.
>>>>>
>>>>>
>>>>
>>>> --
>>>> +---------------------------------------------------------------+
>>>> | Derek Chen-Becker                                             |
>>>> | GPG Key available at https://keybase.io/dchenbecker and       |
>>>> | https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
>>>> | Fngrprnt: EB8A 6480 F0A3 C8EB C1E7  7F42 AFC5 AFEE 96E4 6ACC  |
>>>> +---------------------------------------------------------------+
>>>>
>>>>
>>>
>>> --
>>> Fragen sind nicht da, um beantwortet zu werden,
>>> Fragen sind da um gestellt zu werden
>>> Georg Kreisler
>>>
>>> "Sagen's Paradeiser" (ORF: Als Radiohören gefährlich war) => write BE!
>>> Year 2 of the New Koprocracy
>>>
>>>
>>
>> --
>> +---------------------------------------------------------------+
>> | Derek Chen-Becker                                             |
>> | GPG Key available at https://keybase.io/dchenbecker and       |
>> | https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
>> | Fngrprnt: EB8A 6480 F0A3 C8EB C1E7  7F42 AFC5 AFEE 96E4 6ACC  |
>> +---------------------------------------------------------------+
>>
>>
>
> --
> Fragen sind nicht da, um beantwortet zu werden,
> Fragen sind da um gestellt zu werden
> Georg Kreisler
>
> "Sagen's Paradeiser" (ORF: Als Radiohören gefährlich war) => write BE!
> Year 2 of the New Koprocracy
>
>

-- 
+---------------------------------------------------------------+
| Derek Chen-Becker                                             |
| GPG Key available at https://keybase.io/dchenbecker and       |
| https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org |
| Fngrprnt: EB8A 6480 F0A3 C8EB C1E7  7F42 AFC5 AFEE 96E4 6ACC  |
+---------------------------------------------------------------+

Attachment: 0001-Fix-LaTeX-babel-language-detection-regex.patch
Description: Binary data

Reply via email to