emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* interaction between org-latex-custom-lang-environments and name when exporting to latex
@ 2015-11-16 12:59 Alan Schmitt
  2015-11-20  7:55 ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-16 12:59 UTC (permalink / raw)
  To: emacs-orgmode

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

Hello,

I want to export some code for a custom language environment (to be able
to use minted's global customization), and I find there is a strange
interaction with adding a name to the block. Here is an ECM.

Init file:
--8<---------------cut here---------------start------------->8---
(defvar emacsd-dir "~/.emacs.d/")
(add-to-list 'load-path (concat emacsd-dir "org/emacs/site-lisp/org"))
(require 'org)

(require 'ox-latex)

(setq org-latex-listings 'minted)

(setq org-latex-custom-lang-environments
      '((emacs-lisp "common-lisp-code")))
--8<---------------cut here---------------end--------------->8---

Org file:
--8<---------------cut here---------------start------------->8---
#+name: test
#+BEGIN_SRC emacs-lisp
(message "hello")
#+END_SRC
--8<---------------cut here---------------end--------------->8---

Exported latex (only for the source block):
--8<---------------cut here---------------start------------->8---
\begin{common-lisp-code}
(message "hello")
\label{orgsrcblock1}

\end{common-lisp-code}
--8<---------------cut here---------------end--------------->8---

The problem is the “\label” in the middle of the source block, which
plays badly with minted.

Is this a known bug?

Thanks,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 9, 2015, Mauna Loa Obs.): 399.06 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-16 12:59 interaction between org-latex-custom-lang-environments and name when exporting to latex Alan Schmitt
@ 2015-11-20  7:55 ` Alan Schmitt
  2015-11-20 10:41   ` Rasmus
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-20  7:55 UTC (permalink / raw)
  To: emacs-orgmode

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

Hello,

I was wondering if someone had been able to reproduce this, and if so
should I file it as a bug?

Thanks,

Alan

On 2015-11-16 13:59, Alan Schmitt <alan.schmitt@polytechnique.org> writes:

> Hello,
>
> I want to export some code for a custom language environment (to be able
> to use minted's global customization), and I find there is a strange
> interaction with adding a name to the block. Here is an ECM.
>
> Init file:
> (defvar emacsd-dir "~/.emacs.d/")
> (add-to-list 'load-path (concat emacsd-dir "org/emacs/site-lisp/org"))
> (require 'org)
>
> (require 'ox-latex)
>
> (setq org-latex-listings 'minted)
>
> (setq org-latex-custom-lang-environments
>       '((emacs-lisp "common-lisp-code")))
>
> Org file:
> #+name: test
> #+BEGIN_SRC emacs-lisp
> (message "hello")
> #+END_SRC
>
> Exported latex (only for the source block):
> \begin{common-lisp-code}
> (message "hello")
> \label{orgsrcblock1}
>
> \end{common-lisp-code}
>
> The problem is the “\label” in the middle of the source block, which
> plays badly with minted.
>
> Is this a known bug?
>
> Thanks,
>
> Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 9, 2015, Mauna Loa Obs.): 399.06 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-20  7:55 ` Alan Schmitt
@ 2015-11-20 10:41   ` Rasmus
  2015-11-20 11:06     ` Alan Schmitt
  2015-11-23 11:13     ` Alan Schmitt
  0 siblings, 2 replies; 15+ messages in thread
From: Rasmus @ 2015-11-20 10:41 UTC (permalink / raw)
  To: emacs-orgmode

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

> I was wondering if someone had been able to reproduce this, and if so
> should I file it as a bug?

Sure.  It's how org-latex-src-block handles custom environments (see "Case
2.").  At the moment this is hardcoded.

Perhaps the second element of org-latex-custom-lang-environments should
allow a format string, so that an element could be something like,

(emacs-lisp "\begin{common-lisp-code}[myoptions, label=%l]
%s
\end{common-lisp-code}")

(modulus escaping).

WDYT?

Rasmus

-- 
If you can mix business and politics wonderful things can happen!

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-20 10:41   ` Rasmus
@ 2015-11-20 11:06     ` Alan Schmitt
  2015-11-23 11:13     ` Alan Schmitt
  1 sibling, 0 replies; 15+ messages in thread
From: Alan Schmitt @ 2015-11-20 11:06 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

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

On 2015-11-20 11:41, Rasmus <rasmus@gmx.us> writes:

> Alan Schmitt <alan.schmitt@polytechnique.org> writes:
>
>> I was wondering if someone had been able to reproduce this, and if so
>> should I file it as a bug?
>
> Sure.  It's how org-latex-src-block handles custom environments (see "Case
> 2.").  At the moment this is hardcoded.
>
> Perhaps the second element of org-latex-custom-lang-environments should
> allow a format string, so that an element could be something like,
>
> (emacs-lisp "\begin{common-lisp-code}[myoptions, label=%l]
> %s
> \end{common-lisp-code}")
>
> (modulus escaping).
>
> WDYT?

That would be great indeed. I see the code is not too hairy there, so
I'll try to write a patch.

Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 9, 2015, Mauna Loa Obs.): 399.06 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-20 10:41   ` Rasmus
  2015-11-20 11:06     ` Alan Schmitt
@ 2015-11-23 11:13     ` Alan Schmitt
  2015-11-23 17:54       ` Rasmus
  1 sibling, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-23 11:13 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

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

Hello,

On 2015-11-20 11:41, Rasmus <rasmus@gmx.us> writes:

> Alan Schmitt <alan.schmitt@polytechnique.org> writes:
>
>> I was wondering if someone had been able to reproduce this, and if so
>> should I file it as a bug?
>
> Sure.  It's how org-latex-src-block handles custom environments (see "Case
> 2.").  At the moment this is hardcoded.

I've started to look into this, and I would like some advice regarding
the design of the solution.

What I propose is to have either a string or a function in
`org-latex-custom-lang-environments'. A string would be used as it is
currently, whereas a function would be applied. Here is what it could
look like:

#+begin_src emacs-lisp
;; Case 2.  Custom environment.
(custom-env
(let ((caption-str (org-latex--caption/label-string src-block info))
       (formatted-src (org-export-format-code-default src-block info)))
   (cond
    ((stringp custom-env) (format "\\begin{%s}\n%s\\end{%s}\n"
                                  custom-env
                                  (concat (and caption-above-p caption-str)
                                          formatted-src
                                          (and (not caption-above-p) caption-str))
                                  custom-env))
    ((functionp custom-env) (funcall custom-env
                                     formatted-src
                                     (org-latex--label src-block info)))
    (t (user-error "`org-latex-custom-lang-environments' should map %s to either a string or a function" lang)))))
#+end_src

My main design question is what the arguments to the function should be.
I thought the formatted source code and label would work, but I'm
wondering if it may be better to simply give the `src-block' and `info'
arguments directly.

WDYT?

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 22, 2015, Mauna Loa Obs.): 400.35 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-23 11:13     ` Alan Schmitt
@ 2015-11-23 17:54       ` Rasmus
  2015-11-24  8:07         ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Rasmus @ 2015-11-23 17:54 UTC (permalink / raw)
  To: emacs-orgmode

Hi Alan,

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

> What I propose is to have either a string or a function in
> `org-latex-custom-lang-environments'. A string would be used as it is
> currently, whereas a function would be applied. Here is what it could
> look like:

I think a format-string is fine, though I don’t oppose allowing a function
as well.  I don’t foresee a great necessity of the latter, though.

I'd use format-spec.  E.g. here’s how hyperref is filled

    (let ((template (plist-get info :latex-hyperref-template)))
           (and (stringp template)
                (format-spec template (org-latex--format-spec info))))

Then the cdr of an element in org-latex-custom-lang-environments can be
something like:

   \begin{%e}[label=%l, myfunkyoption=val]
    %c
    \end{%e}

The only downside is that you’d have to somehow discriminate between the
"old" case where the cdr is a single word denoting an environment.
Something like this might work:

          (string-match-p "\\`\\w+\\'" "hest1")


> My main design question is what the arguments to the function should be.
> I thought the formatted source code and label would work, but I'm
> wondering if it may be better to simply give the `src-block' and `info'
> arguments directly.

Well, functions would be user written.  In general I’d favor info and
src-block, but I don’t think it’s very user-friendly, as it requires quite
some knowledge about how ox works.  Also, when using such functions, the
user would have to write a lot of boilerplate to get e.g . the label.

Rasmus

-- 
Not everything that goes around comes back around, you know

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-23 17:54       ` Rasmus
@ 2015-11-24  8:07         ` Alan Schmitt
  2015-11-24 13:14           ` Rasmus
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-24  8:07 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

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

Hi Rasmus,

On 2015-11-23 18:54, Rasmus <rasmus@gmx.us> writes:

> Hi Alan,
>
> Alan Schmitt <alan.schmitt@polytechnique.org> writes:
>
>> What I propose is to have either a string or a function in
>> `org-latex-custom-lang-environments'. A string would be used as it is
>> currently, whereas a function would be applied. Here is what it could
>> look like:
>
> I think a format-string is fine, though I don’t oppose allowing a function
> as well.  I don’t foresee a great necessity of the latter, though.
>
> I'd use format-spec.  E.g. here’s how hyperref is filled
>
>     (let ((template (plist-get info :latex-hyperref-template)))
>            (and (stringp template)
>                 (format-spec template (org-latex--format-spec info))))

I did not know about `format-spec', it's really nice!

> Then the cdr of an element in org-latex-custom-lang-environments can be
> something like:
>
>    \begin{%e}[label=%l, myfunkyoption=val]
>     %c
>     \end{%e}

What would "%e" be bound to? Since this is a customization for a given
source block, it should be fixed, so I think we only need "%l" and "%c".

> The only downside is that you’d have to somehow discriminate between the
> "old" case where the cdr is a single word denoting an environment.
> Something like this might work:
>
>           (string-match-p "\\`\\w+\\'" "hest1")

This was the main reason why I did not want to go that route. This said,
after understanding this regexp, I see how I can explain how the two
cases are distinguished in the docstring.

>> My main design question is what the arguments to the function should be.
>> I thought the formatted source code and label would work, but I'm
>> wondering if it may be better to simply give the `src-block' and `info'
>> arguments directly.
>
> Well, functions would be user written.  In general I’d favor info and
> src-block, but I don’t think it’s very user-friendly, as it requires quite
> some knowledge about how ox works.  Also, when using such functions, the
> user would have to write a lot of boilerplate to get e.g . the label.

Yes. I'll give the template string a try and will report back.

Thanks,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 22, 2015, Mauna Loa Obs.): 400.35 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-24  8:07         ` Alan Schmitt
@ 2015-11-24 13:14           ` Rasmus
  2015-11-25  7:59             ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Rasmus @ 2015-11-24 13:14 UTC (permalink / raw)
  To: alan.schmitt; +Cc: emacs-orgmode

Hi,

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

>> Then the cdr of an element in org-latex-custom-lang-environments can be
>> something like:
>>
>>    \begin{%e}[label=%l, myfunkyoption=val]
>>     %c
>>     \end{%e}
>
> What would "%e" be bound to? Since this is a customization for a given
> source block, it should be fixed, so I think we only need "%l" and "%c".

You are right on the %e of course.  You should check the things we bind in
the top let-binding.  The useful ones should be accessible.  A quick
guess (you’ll have to decide):

- lang
- caption
- label
- float
- perhaps more from attributes?


>> The only downside is that you’d have to somehow discriminate between the
>> "old" case where the cdr is a single word denoting an environment.
>> Something like this might work:
>>
>>           (string-match-p "\\`\\w+\\'" "hest1")
>
> This was the main reason why I did not want to go that route. This said,
> after understanding this regexp, I see how I can explain how the two
> cases are distinguished in the docstring.

Perhaps it’s safer to use [[:alnum:]] or even [a-zA-Z0-9].  \w follows the
syntax table which might go weird, though I’m not sure how.

>> Well, functions would be user written.  In general I’d favor info and
>> src-block, but I don’t think it’s very user-friendly, as it requires quite
>> some knowledge about how ox works.  Also, when using such functions, the
>> user would have to write a lot of boilerplate to get e.g . the label.
>
> Yes. I'll give the template string a try and will report back.

Thanks Alan!

Rasmus

-- 
Warning: Everything saved will be lost

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-24 13:14           ` Rasmus
@ 2015-11-25  7:59             ` Alan Schmitt
  2015-11-25  9:57               ` Rasmus
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-25  7:59 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode


[-- Attachment #1.1: Type: text/plain, Size: 93 bytes --]

Hello,

Here is a patch that allows the use of a format string in
custom-lang-environments.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-ox-latex-Extend-custom-lang-environments.patch --]
[-- Type: text/x-patch, Size: 3383 bytes --]

From e4731375eaf622df0187d47d949fb9f4e53330be Mon Sep 17 00:00:00 2001
From: Alan Schmitt <alan.schmitt@polytechnique.org>
Date: Wed, 25 Nov 2015 08:48:58 +0100
Subject: [PATCH] ox-latex: Extend custom-lang-environments

* lisp/ox-latex.el (org-latex-custom-lang-environments): extend the
  documentation string.
* lisp/ox-latex.el (org-latex-src-block): allow a custom language
  environment to be a format string to be directly inserted.
---
 lisp/ox-latex.el | 50 ++++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 40 insertions(+), 10 deletions(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index bbf7f41..1b0bff5 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1025,17 +1025,40 @@ block-specific options, you may use the following syntax:
   "Alist mapping languages to language-specific LaTeX environments.
 
 It is used during export of src blocks by the listings and minted
-latex packages.  For example,
+latex packages.  The environment may either be a simple string,
+composed of only letters and numbers.  In this case, the string is
+directly the name of the latex environment to use.  The environment
+may also be a format string.  In this case the format string will be
+directly exported.  This format string may contain these elements:
+
+  %c for the formatted source
+  %C for the caption
+  %f for the float attribute
+  %l for an appropriate label 
+
+For example,
 
   (setq org-latex-custom-lang-environments
-     '((python \"pythoncode\")))
+     '((python \"pythoncode\")
+       (ocaml \"\\\\begin{listing}\\n\\\\begin{minted}{ocaml}%c\\\\end{minted}\\n\\\\caption{%C}\\n\\\\label{%l}\")))
 
 would have the effect that if org encounters begin_src python
 during latex export it will output
 
   \\begin{pythoncode}
   <src block body>
-  \\end{pythoncode}")
+  \\end{pythoncode}
+
+and if org encounters begin_src ocaml during latex export it will
+output
+
+  \\begin{listing}
+  \\begin{minted}{ocaml}
+  <src block body>
+  \\end{minted}
+  \\caption{<caption>}
+  \\label{<label>}
+  \\end{listing}")
 
 
 ;;;; Compilation
@@ -2756,13 +2779,20 @@ contextual information."
 			   (org-export-format-code-default src-block info))))))
        ;; Case 2.  Custom environment.
        (custom-env
-	(let ((caption-str (org-latex--caption/label-string src-block info)))
-	  (format "\\begin{%s}\n%s\\end{%s}\n"
-		  custom-env
-		  (concat (and caption-above-p caption-str)
-			  (org-export-format-code-default src-block info)
-			  (and (not caption-above-p) caption-str))
-		  custom-env)))
+	(let ((caption-str (org-latex--caption/label-string src-block info))
+              (formatted-src (org-export-format-code-default src-block info)))
+          (if (string-match-p "\\`[a-zA-Z0-9]+\\'" custom-env)
+	      (format "\\begin{%s}\n%s\\end{%s}\n"
+		      custom-env
+		      (concat (and caption-above-p caption-str)
+			      formatted-src
+			      (and (not caption-above-p) caption-str))
+		      custom-env)
+	    (format-spec custom-env
+			 `((?c . ,formatted-src)
+			   (?C . ,caption)
+			   (?f . ,float)
+			   (?l . ,(org-latex--label src-block info)))))))
        ;; Case 3.  Use minted package.
        ((eq listings 'minted)
 	(let* ((caption-str (org-latex--caption/label-string src-block info))
-- 
2.6.3


[-- Attachment #1.3: Type: text/plain, Size: 135 bytes --]


Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 22, 2015, Mauna Loa Obs.): 400.35 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-25  7:59             ` Alan Schmitt
@ 2015-11-25  9:57               ` Rasmus
  2015-11-27 16:27                 ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Rasmus @ 2015-11-25  9:57 UTC (permalink / raw)
  To: alan.schmitt; +Cc: emacs-orgmode

Hi Alan,

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

> Here is a patch that allows the use of a format string in
> custom-lang-environments.

Thanks.

> * lisp/ox-latex.el (org-latex-custom-lang-environments): extend the
>   documentation string.

Extend.  You don’t need the lisp prefix.

> * lisp/ox-latex.el (org-latex-src-block): allow a custom language
>   environment to be a format string to be directly inserted.

Allow.

> +  %c for the formatted source
> +  %C for the caption
> +  %f for the float attribute
> +  %l for an appropriate label 

it’s a bit sadistic to use %c and %C.  Can’t the first be (%s)ource-code?

> +For example,
>  
>    (setq org-latex-custom-lang-environments
> -     '((python \"pythoncode\")))
> +     '((python \"pythoncode\")
> +       (ocaml \"\\\\begin{listing}\\n\\\\begin{minted}{ocaml}%c\\\\end{minted}\\n\\\\caption{%C}\\n\\\\label{%l}\")))

Minor: For the sake of making the ocaml block readable you could add the
actual newlines instead of "\n".

>  would have the effect that if org encounters begin_src python
A Python source block.

>  during latex export it will output

LaTeX export it will produce,

>    \\begin{pythoncode}
>    <src block body>
> -  \\end{pythoncode}")
> +  \\end{pythoncode}
> +
> +and if org encounters begin_src ocaml during latex export it will

Likewise, if Org ... a Ocaml source block ... LaTeX 

> +output
,
> +  \\begin{listing}
> +  \\begin{minted}{ocaml}
> +  <src block body>
> +  \\end{minted}
> +  \\caption{<caption>}
> +  \\label{<label>}
> +  \\end{listing}")

Nitpick: label should be inside caption in the example to be consistent
with how captions are normally formatted by ox-latex.  Either way is fine
though.

Also, you need to denote that the defcustom was changed.

  :version "25.1"
  :package-version '(Org . "9.0")

When you are at it, please add the missing tags, :group and :type.

> +	(let ((caption-str (org-latex--caption/label-string src-block info))
> +              (formatted-src (org-export-format-code-default src-block info)))
> +          (if (string-match-p "\\`[a-zA-Z0-9]+\\'" custom-env)

I guess technically, you should use org-string-match-p for comparability
reasons.  Though I think Org-9 will drop older emacsen and xemacs support.

> +	      (Format "\\begin{%s}\n%s\\end{%s}\n"
> +		      custom-env
> +		      (concat (and caption-above-p caption-str)
> +			      formatted-src
> +			      (and (not caption-above-p) caption-str))
> +		      custom-env)
> +	    (format-spec custom-env
> +			 `((?c . ,formatted-src)

I’d use s (or anything but c) here....

> +			   (?C . ,caption)

I’d use lowercase c.

> +			   (?f . ,float)
> +			   (?l . ,(org-latex--label src-block info)))))))
>         ;; Case 3.  Use minted package.
>         ((eq listings 'minted)
>  	(let* ((caption-str (org-latex--caption/label-string src-block info))

Rasmus

-- 
Look, it is what it is because of what it was

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-25  9:57               ` Rasmus
@ 2015-11-27 16:27                 ` Alan Schmitt
  2015-11-27 21:05                   ` Rasmus
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-27 16:27 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode


[-- Attachment #1.1: Type: text/plain, Size: 890 bytes --]

Hi Rasmus,

Thanks a lot for the great comments. Here is an updated patch, with some
comments on your comments for the thing I did not change.

On 2015-11-25 10:57, Rasmus <rasmus@gmx.us> writes:

>> +  \\begin{listing}
>> +  \\begin{minted}{ocaml}
>> +  <src block body>
>> +  \\end{minted}
>> +  \\caption{<caption>}
>> +  \\label{<label>}
>> +  \\end{listing}")
>
> Nitpick: label should be inside caption in the example to be consistent
> with how captions are normally formatted by ox-latex.  Either way is fine
> though.

I chose this example because it's the code in the minted manual.

> Also, you need to denote that the defcustom was changed.
>
>   :version "25.1"
>   :package-version '(Org . "9.0")
>
> When you are at it, please add the missing tags, :group and :type.

It's not a defcustom but a defvar. (But maybe it should be a defcustom …)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-ox-latex-Extend-custom-lang-environments.patch --]
[-- Type: text/x-patch, Size: 3500 bytes --]

From 527635c2e674fe1f3ab9d5d3de96e238d0debf7b Mon Sep 17 00:00:00 2001
From: Alan Schmitt <alan.schmitt@polytechnique.org>
Date: Wed, 25 Nov 2015 08:48:58 +0100
Subject: [PATCH] ox-latex: Extend custom-lang-environments

* ox-latex.el (org-latex-custom-lang-environments): Extend the
  documentation string.
* ox-latex.el (org-latex-src-block): Allow a custom language environment
  to be a format string to be directly inserted.
---
 lisp/ox-latex.el | 58 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 46 insertions(+), 12 deletions(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index bbf7f41..0a9f7d4 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1025,17 +1025,44 @@ block-specific options, you may use the following syntax:
   "Alist mapping languages to language-specific LaTeX environments.
 
 It is used during export of src blocks by the listings and minted
-latex packages.  For example,
+latex packages.  The environment may either be a simple string,
+composed of only letters and numbers.  In this case, the string is
+directly the name of the latex environment to use.  The environment
+may also be a format string.  In this case the format string will be
+directly exported.  This format string may contain these elements:
+
+  %s for the formatted source
+  %c for the caption
+  %f for the float attribute
+  %l for an appropriate label 
+
+For example,
 
   (setq org-latex-custom-lang-environments
-     '((python \"pythoncode\")))
+     '((python \"pythoncode\")
+       (ocaml \"\\\\begin{listing}
+\\\\begin{minted}{ocaml}
+%s\\\\end{minted}
+\\\\caption{%c}
+\\\\label{%l}\")))
 
-would have the effect that if org encounters begin_src python
-during latex export it will output
+would have the effect that if org encounters a Python source block
+during LaTeX export it will produce
 
   \\begin{pythoncode}
   <src block body>
-  \\end{pythoncode}")
+  \\end{pythoncode}
+
+and if org encounters an Ocaml source block during LaTeX export it
+will produce
+
+  \\begin{listing}
+  \\begin{minted}{ocaml}
+  <src block body>
+  \\end{minted}
+  \\caption{<caption>}
+  \\label{<label>}
+  \\end{listing}")
 
 
 ;;;; Compilation
@@ -2756,13 +2783,20 @@ contextual information."
 			   (org-export-format-code-default src-block info))))))
        ;; Case 2.  Custom environment.
        (custom-env
-	(let ((caption-str (org-latex--caption/label-string src-block info)))
-	  (format "\\begin{%s}\n%s\\end{%s}\n"
-		  custom-env
-		  (concat (and caption-above-p caption-str)
-			  (org-export-format-code-default src-block info)
-			  (and (not caption-above-p) caption-str))
-		  custom-env)))
+	(let ((caption-str (org-latex--caption/label-string src-block info))
+              (formatted-src (org-export-format-code-default src-block info)))
+          (if (org-string-match-p "\\`[a-zA-Z0-9]+\\'" custom-env)
+	      (format "\\begin{%s}\n%s\\end{%s}\n"
+		      custom-env
+		      (concat (and caption-above-p caption-str)
+			      formatted-src
+			      (and (not caption-above-p) caption-str))
+		      custom-env)
+	    (format-spec custom-env
+			 `((?s . ,formatted-src)
+			   (?c . ,caption)
+			   (?f . ,float)
+			   (?l . ,(org-latex--label src-block info)))))))
        ;; Case 3.  Use minted package.
        ((eq listings 'minted)
 	(let* ((caption-str (org-latex--caption/label-string src-block info))
-- 
2.6.3


[-- Attachment #1.3: Type: text/plain, Size: 135 bytes --]


Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 22, 2015, Mauna Loa Obs.): 400.35 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-27 16:27                 ` Alan Schmitt
@ 2015-11-27 21:05                   ` Rasmus
  2015-11-30 12:12                     ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Rasmus @ 2015-11-27 21:05 UTC (permalink / raw)
  To: emacs-orgmode

Hi Alan,

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

>> Nitpick: label should be inside caption in the example to be consistent
>> with how captions are normally formatted by ox-latex.  Either way is fine
>> though.
>
> I chose this example because it's the code in the minted manual.

As you prefer.

>> Also, you need to denote that the defcustom was changed.
>>
>>   :version "25.1"
>>   :package-version '(Org . "9.0")
>>
>> When you are at it, please add the missing tags, :group and :type.
>
> It's not a defcustom but a defvar. (But maybe it should be a defcustom …)

It should be a defcustom.  Feel free to fix it, preferably in a separate
patch.

    11.5 Defining Global Variables
    A [defvar/defconst] definition is a construct that announces your
    intention to use a symbol as a global variable.
    ...
    To define a customizable variable, you should use defcustom (which
    calls defvar as a subroutine). See Variable Definitions.

> From 527635c2e674fe1f3ab9d5d3de96e238d0debf7b Mon Sep 17 00:00:00 2001
> From: Alan Schmitt <alan.schmitt@polytechnique.org>
> Date: Wed, 25 Nov 2015 08:48:58 +0100
> Subject: [PATCH] ox-latex: Extend custom-lang-environments
>
> * ox-latex.el (org-latex-custom-lang-environments): Extend the
>   documentation string.
> * ox-latex.el (org-latex-src-block): Allow a custom language environment
>   to be a format string to be directly inserted.
> ---
>  lisp/ox-latex.el | 58 ++++++++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 46 insertions(+), 12 deletions(-)
>
> diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
> index bbf7f41..0a9f7d4 100644
> --- a/lisp/ox-latex.el
> +++ b/lisp/ox-latex.el
> @@ -1025,17 +1025,44 @@ block-specific options, you may use the following syntax:
>    "Alist mapping languages to language-specific LaTeX environments.
>  
>  It is used during export of src blocks by the listings and minted
> -latex packages.  For example,
> +latex packages.  The environment may either be a simple string,

You don’t need the ’either’ IMO, but as you please. 

> +composed of only letters and numbers.  In this case, the string is
> +directly the name of the latex environment to use.  The environment
> +may also be a format string.  In this case the format string will be
> +directly exported.  This format string may contain these elements:
> +
> +  %s for the formatted source
> +  %c for the caption
> +  %f for the float attribute
> +  %l for an appropriate label 
> +
> +For example,
>  
>    (setq org-latex-custom-lang-environments
> -     '((python \"pythoncode\")))
> +     '((python \"pythoncode\")
> +       (ocaml \"\\\\begin{listing}
> +\\\\begin{minted}{ocaml}
> +%s\\\\end{minted}
> +\\\\caption{%c}
> +\\\\label{%l}\")))
>  
> -would have the effect that if org encounters begin_src python
> -during latex export it will output
> +would have the effect that if org encounters a Python source block
> +during LaTeX export it will produce
>  
>    \\begin{pythoncode}
>    <src block body>
> -  \\end{pythoncode}")
> +  \\end{pythoncode}
> +
> +and if org encounters an Ocaml source block during LaTeX export it

Org.  Perhaps the ’and’ should be capitalized.  I don’t know.

The rest looks good to me.  Feel free to push (modulus someone else saying
otherwise).

Thanks,
Rasmus

-- 
m-mm-mmm-mmmm bacon!

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-27 21:05                   ` Rasmus
@ 2015-11-30 12:12                     ` Alan Schmitt
  2015-11-30 13:11                       ` Rasmus
  0 siblings, 1 reply; 15+ messages in thread
From: Alan Schmitt @ 2015-11-30 12:12 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode


[-- Attachment #1.1: Type: text/plain, Size: 472 bytes --]

Hi,

On 2015-11-27 22:05, Rasmus <rasmus@gmx.us> writes:

>>> Also, you need to denote that the defcustom was changed.
>>>
>>>   :version "25.1"
>>>   :package-version '(Org . "9.0")
>>>
>>> When you are at it, please add the missing tags, :group and :type.
>>
>> It's not a defcustom but a defvar. (But maybe it should be a defcustom …)
>
> It should be a defcustom.  Feel free to fix it, preferably in a separate
> patch.

Here is a patch to do so.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-ox-latex-Make-org-latex-custom-lang-environments-a-d.patch --]
[-- Type: text/x-patch, Size: 1385 bytes --]

From b94b5ba0bdb619cb9047efb19432216812eaf6a2 Mon Sep 17 00:00:00 2001
From: Alan Schmitt <alan.schmitt@polytechnique.org>
Date: Mon, 30 Nov 2015 13:07:56 +0100
Subject: [PATCH] ox-latex: Make org-latex-custom-lang-environments a defcustom

* ox-latex.el (org-latex-custom-lang-environments): Change from defvar
  into a defcustom.
---
 lisp/ox-latex.el | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index eaad29f..407df6b 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -1021,7 +1021,7 @@ block-specific options, you may use the following syntax:
 	   (string :tag "Minted option name ")
 	   (string :tag "Minted option value"))))
 
-(defvar org-latex-custom-lang-environments nil
+(defcustom org-latex-custom-lang-environments nil
   "Alist mapping languages to language-specific LaTeX environments.
 
 It is used during export of src blocks by the listings and minted
@@ -1062,7 +1062,14 @@ will produce
   \\end{minted}
   \\caption{<caption>}
   \\label{<label>}
-  \\end{listing}")
+  \\end{listing}"
+  :group 'org-export-latex
+  :type '(repeat
+	  (list
+	   (symbol :tag "Language name                    ")
+	   (string :tag "Environment name or format string")))
+  :version "25.1"
+  :package-version '(Org . "9.0"))
 
 
 ;;;; Compilation
-- 
2.6.3


[-- Attachment #1.3: Type: text/plain, Size: 260 bytes --]


> The rest looks good to me.  Feel free to push (modulus someone else saying
> otherwise).

Thanks a lot, I pushed it.

Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 29, 2015, Mauna Loa Obs.): 400.37 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-30 12:12                     ` Alan Schmitt
@ 2015-11-30 13:11                       ` Rasmus
  2015-12-01  8:14                         ` Alan Schmitt
  0 siblings, 1 reply; 15+ messages in thread
From: Rasmus @ 2015-11-30 13:11 UTC (permalink / raw)
  To: alan.schmitt; +Cc: emacs-orgmode

Alan Schmitt <alan.schmitt@polytechnique.org> writes:

>> It should be a defcustom.  Feel free to fix it, preferably in a separate
>> patch.
>
> Here is a patch to do so.
>
> From b94b5ba0bdb619cb9047efb19432216812eaf6a2 Mon Sep 17 00:00:00 2001
> From: Alan Schmitt <alan.schmitt@polytechnique.org>
> Date: Mon, 30 Nov 2015 13:07:56 +0100
> Subject: [PATCH] ox-latex: Make org-latex-custom-lang-environments a defcustom
>
> * ox-latex.el (org-latex-custom-lang-environments): Change from defvar
>   into a defcustom.
> ---
>  lisp/ox-latex.el | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
> index eaad29f..407df6b 100644
> --- a/lisp/ox-latex.el
> +++ b/lisp/ox-latex.el
> @@ -1021,7 +1021,7 @@ block-specific options, you may use the following syntax:
>  	   (string :tag "Minted option name ")
>  	   (string :tag "Minted option value"))))
>  
> -(defvar org-latex-custom-lang-environments nil
> +(defcustom org-latex-custom-lang-environments nil
>    "Alist mapping languages to language-specific LaTeX environments.
>  
>  It is used during export of src blocks by the listings and minted
> @@ -1062,7 +1062,14 @@ will produce
>    \\end{minted}
>    \\caption{<caption>}
>    \\label{<label>}
> -  \\end{listing}")
> +  \\end{listing}"
> +  :group 'org-export-latex
> +  :type '(repeat
> +	  (list
> +	   (symbol :tag "Language name                    ")
> +	   (string :tag "Environment name or format string")))

I don't know if the strings have to the same width, but I assume you
tested it before hand.  For me at least this is the only way to evaluate
Custom changes.

To me it looks fine.  Thanks a lot, Alan!

Rasmus

-- 
When in doubt, do it!

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: interaction between org-latex-custom-lang-environments and name when exporting to latex
  2015-11-30 13:11                       ` Rasmus
@ 2015-12-01  8:14                         ` Alan Schmitt
  0 siblings, 0 replies; 15+ messages in thread
From: Alan Schmitt @ 2015-12-01  8:14 UTC (permalink / raw)
  To: Rasmus; +Cc: emacs-orgmode

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

On 2015-11-30 14:11, Rasmus <rasmus@gmx.us> writes:

>> +  :group 'org-export-latex
>> +  :type '(repeat
>> +	  (list
>> +	   (symbol :tag "Language name                    ")
>> +	   (string :tag "Environment name or format string")))
>
> I don't know if the strings have to the same width, but I assume you
> tested it before hand.  For me at least this is the only way to evaluate
> Custom changes.

I assume it has to be the same size because it looks like this:

Hide org-latex-custom-lang-environments:
INS DEL List:
            Language name                    : nil
            Environment name or format string: 

I'll apply the patch.

Best,

Alan

-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Athmospheric CO₂ (Updated November 29, 2015, Mauna Loa Obs.): 400.37 ppm

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2015-12-01  8:15 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-16 12:59 interaction between org-latex-custom-lang-environments and name when exporting to latex Alan Schmitt
2015-11-20  7:55 ` Alan Schmitt
2015-11-20 10:41   ` Rasmus
2015-11-20 11:06     ` Alan Schmitt
2015-11-23 11:13     ` Alan Schmitt
2015-11-23 17:54       ` Rasmus
2015-11-24  8:07         ` Alan Schmitt
2015-11-24 13:14           ` Rasmus
2015-11-25  7:59             ` Alan Schmitt
2015-11-25  9:57               ` Rasmus
2015-11-27 16:27                 ` Alan Schmitt
2015-11-27 21:05                   ` Rasmus
2015-11-30 12:12                     ` Alan Schmitt
2015-11-30 13:11                       ` Rasmus
2015-12-01  8:14                         ` Alan Schmitt

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