Hi,

I'm OK with this patch.
@Ihor, apply when fitting.

Bestm
/PA ox-latex maintainer

On Fri, 22 May 2026 at 13:49, Derek Chen-Becker <[email protected]>
wrote:

> 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  |
> +---------------------------------------------------------------+
>
>

-- 
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

Reply via email to