2014-06-26 15:17 GMT+02:00 Nicolas Goaziou <mail@nicolasgoaziou.fr>:
Thibaut Verron <thibaut.verron@gmail.com> writes:

>> Now, are these "limitations of Org" really preventing it from exporting a
>> string verbatim? That would seem like the most logical default in this
>> situation, wouldn't it?

I disagree in the general case. The most logical default for Org is to
treat contents as plain text and ensure that the export conforms to what
appears in the buffer. As a bonus, it can leave LaTeX code as-is when it
recognizes some, which depends on Org's understanding of LaTeX syntax
(hence the limitations I'm talking about).

Of course, I did not mean it for org-mode buffers! ;)
 

Now, in the context of a LaTeX buffer using orgtbl minor mode, it could
make sense in some situations to treat cell contents verbatim. I don't
think it should be the default, but there could be an option for that.
Anyway, there's a solution, see below.

> Apparently not, the following quick attempt seems to be doing the job fine
> enough:
>
>   (defun tv/orgtbl-to-latex-verbatim (table params)
>     (flet ((org-export-string-as
>             (string backend &optional b e)
>             string))
>      (orgtbl-to-latex table params)))
>
> However, it is extra dirty, and ignoring so many parameters in a function
> is probably not safe. :-)

I think defining your own translator function is the way to go. For
example, the following (untested) could work:

  (defun my-orgtbl-to-latex-verbatim (table params)
    (let* ((alignment (mapconcat (lambda (x) (if x "r" "l"))
                               org-table-last-alignment ""))
         (params2
          (list
           :tstart (concat "\\begin{tabular}{" alignment "}")
           :tend "\\end{tabular}"
           :lstart "" :lend " \\\\" :sep " & "
           :efmt "%s\\,(%s)" :hline "\\hline")))
      (orgtbl-to-generic table (org-combine-plists params2 params))))


Indeed it does work. 

But, unless I am mistaken, this is exactly the definition given here: http://orgmode.org/manual/Translator-functions.html#Translator-functions
and so I was not wrong, this used to work as I expected.

I suspect that this change (regression?) will cause problems to a lot of other users when they will upgrade their org to the current version.

Would changing the last lines of `orgtbl-to-latex` to something like this work as a long-term solution?

    (require 'ox-latex)
    (let* ((*orgtbl-verbatim* (plist-get params :verbatim))
           (backend (if *orgtbl-verbatim* nil 'latex)))
      (orgtbl-to-generic table (org-combine-plists params2 params) backend))))

Thanks for your time,

Thibaut verron