Hi, here is a feature request about the LaTeX export. With ~(setq org-latex-listings t)~, code blocks such as: ┌──── │ #+BEGIN_SRC ⟨language⟩ :exports code │ ... │ #+END_SRC └──── are exported to LaTeX into: ┌──── │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none} │ \begin{lstlisting} │ ... │ \end{lstlisting} └──── But the: ┌──── │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none} └──── systematically added before each of the ~lstlisting~ LaTeX environments is not always desirable and let me explain why. Sometimes, you want the ~listings~ package to have some global settings that are overridden by this ~\lstset{...}~ added by Org. Typically, you may define some dialects ⟨dialect1⟩, ..., ⟨dialectN⟩ of a given ⟨language⟩ and you want to load them in addition to the (main) ⟨language⟩. This can be done by the following global setting: ┌──── │ \lstset{ │ language=⟨language⟩, │ alsolanguage=[⟨dialect1⟩]⟨language⟩, │ ... │ alsolanguage=[⟨dialectN⟩]⟨language⟩, │ } └──── Unfortunately, it is overridden by each ~\lstset{...}~ added by Org. So would it be possible to provide an option that prevents Org to add these systematic: ┌──── │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none} └──── Thanks! -- Denis
Denis Bitouzé <denis.bitouze@univ-littoral.fr> writes: > here is a feature request about the LaTeX export. > > With ~(setq org-latex-listings t)~, code blocks such as: > > ┌──── > │ #+BEGIN_SRC ⟨language⟩ :exports code > │ ... > │ #+END_SRC > └──── > > are exported to LaTeX into: > > ┌──── > │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none} > │ \begin{lstlisting} > │ ... > │ \end{lstlisting} > └──── > > But the: > > ┌──── > │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none} > └──── > > systematically added before each of the ~lstlisting~ LaTeX environments > is not always desirable and let me explain why. Confirmed. Is there a way to apply \lstset locally for the environment? -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
Le 18/10/22 à 04h14, Ihor Radchenko a écrit :
> Denis Bitouzé <denis.bitouze@univ-littoral.fr> writes:
>
>> here is a feature request about the LaTeX export.
>>
>> With ~(setq org-latex-listings t)~, code blocks such as:
>>
>> ┌────
>> │ #+BEGIN_SRC ⟨language⟩ :exports code
>> │ ...
>> │ #+END_SRC
>> └────
>>
>> are exported to LaTeX into:
>>
>> ┌────
>> │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none}
>> │ \begin{lstlisting}
>> │ ...
>> │ \end{lstlisting}
>> └────
>>
>> But the:
>>
>> ┌────
>> │ \lstset{language=⟨language⟩,label= ,caption= ,captionpos=b,numbers=none}
>> └────
>>
>> systematically added before each of the ~lstlisting~ LaTeX environments
>> is not always desirable and let me explain why.
>
> Confirmed.
> Is there a way to apply \lstset locally for the environment?
It is enough to put it in a group:
┌────
│ \bgroup
│ \lstset{...}
│ \begin{lstlisting}
│ ...
│ \end{lstlisting}
│ \egroup
└────
Otherwise, all the options specified by `\lstset` can be applied as an
option of the `lstlisting` environment:
┌────
│ \begin{lstlisting}[language=⟨language⟩,...]
└────
--
Denis
[-- Attachment #1: Type: text/plain, Size: 421 bytes --] Denis Bitouzé <denis.bitouze@univ-littoral.fr> writes: > Otherwise, all the options specified by `\lstset` can be applied as an > option of the `lstlisting` environment: > > ┌──── > │ \begin{lstlisting}[language=⟨language⟩,...] > └──── This should be the safest and the least verbose. I implemented the suggestion in the attached patch. Let me know if it works for you. [-- Attachment #2: 0001-org-latex-src-block-listings-Put-options-within-lstl.patch --] [-- Type: text/x-patch, Size: 1958 bytes --] From f1905d7e854c8a1788f92326b453ebd1e2b4a21b Mon Sep 17 00:00:00 2001 Message-Id: <f1905d7e854c8a1788f92326b453ebd1e2b4a21b.1666080680.git.yantar92@posteo.net> From: Ihor Radchenko <yantar92@posteo.net> Date: Tue, 18 Oct 2022 16:09:19 +0800 Subject: [PATCH] org-latex-src-block--listings: Put options within lstlisting environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lisp/ox-latex.el (org-latex-src-block--listings): Do not use global \lstset to set options. Prefer optional argument to lstlisting environment instead. Reported-by: Denis Bitouzé <denis.bitouze@univ-littoral.fr> Link: https://orgmode.org/list/87pmepvb7u.fsf@example.com --- lisp/ox-latex.el | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el index dc8477d14..38bdbf661 100644 --- a/lisp/ox-latex.el +++ b/lisp/ox-latex.el @@ -3577,9 +3577,9 @@ (cl-defun org-latex-src-block--listings (org-export-data main info)))))) (lst-opt (plist-get info :latex-listings-options))) (concat - ;; Options. (format - "\\lstset{%s}\n" + "\\begin{lstlisting}[%s]\n%s\\end{lstlisting}" + ;; Options. (concat (org-latex--make-option-string (append @@ -3600,10 +3600,8 @@ (cl-defun org-latex-src-block--listings (t `(("firstnumber" ,(number-to-string (1+ num-start))) ("numbers" "left")))))) (let ((local-options (plist-get attributes :options))) - (and local-options (concat "," local-options))))) - ;; Source code. - (format - "\\begin{lstlisting}\n%s\\end{lstlisting}" + (and local-options (concat "," local-options)))) + ;; Source code. (let* ((code-info (org-export-unravel-code src-block)) (max-width (apply 'max -- 2.35.1 [-- Attachment #3: Type: text/plain, Size: 225 bytes --] -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>
Ihor Radchenko <yantar92@posteo.net> writes: > Denis Bitouzé <denis.bitouze@univ-littoral.fr> writes: > >> Otherwise, all the options specified by `\lstset` can be applied as an >> option of the `lstlisting` environment: >> >> ┌──── >> │ \begin{lstlisting}[language=⟨language⟩,...] >> └──── > > This should be the safest and the least verbose. > > I implemented the suggestion in the attached patch. Applied onto main. https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=6ef33b6dd6e61d5e8bccb5b086f9f09500e81fab Fixed. -- Ihor Radchenko // yantar92, Org mode contributor, Learn more about Org mode at <https://orgmode.org/>. Support Org development at <https://liberapay.com/org-mode>, or support my work at <https://liberapay.com/yantar92>