emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] export to latex without labels


From: Salome Soedergran
Subject: Re: [O] export to latex without labels
Date: Sat, 19 Jul 2014 22:24:59 +0200

Hi Eric,

Eric Abrahamsen <address@hidden> writes:
> The error message is telling you that the wrong number of arguments were
> passed to your filter function. If you look at the doctoring of
> org-export-filter-final-output-functions, you'll see that functions in
> this filter are passed three arguments (note the 3 at the end of your
> error message), but your function only accepts two.
> 
> Once you've sorted that out, you'll see that the argument you're missing
> is an argument representing the full exported string. That means that
> `replace-regexp' is probably the wrong function to be using inside your
> function. Actually, if you look at the docstring of replace-regexp, that
> was the wrong function to be using anyway :) It recommends using a
> combination of re-search-forward and replace-match in lisp functions.
> 
> Since you've got a string, try replace-regexp-in-string instead! See the
> docstring...
> 
> Lastly, it's possible that you could use a more narrowly-targeted filter
> for this particular case (rather than filter-final-output, which doesn't
> kick in until everything else is done). When exporting to latex, the
> element that turns into \label is a target, and that happens in
> org-latex-target. The corresponding filter is
> org-export-filter-target-functions, so you might consider putting your
> function in that variable instead. That could be much simpler: the
> function would take three arguments, the second of which is the backend,
> as a symbol. You could just check if the symbol was 'latex, and have the
> function return an empty string. The function body could be as simple
> as:
> 
> (defun org-latex-remove-labels (string backend data)
>   (if (org-export-derived-backend-p backend 'latex)
>       ""
>     string))
> 
> I haven't tested this for unexpected consequences, mind you...
> 
> Really really lastly, does it really matter if there are unused \labels
> in the output?
> 
[...]
> Hmm, that might have been too much information. What I'm proposing is
> just this:
> 
> (defun ks/org-latex-remove-labels (string backend info)
>   "Remove labels generated by org-mode"
>   (if (org-export-derived-backend-p backend 'latex)
>       ""
>     string))
> 
> (eval-after-load 'ox-latex
>   '(add-to-list 'org-export-filter-target-functions
>             'ks/org-latex-remove-labels))
> 

Thank you so much for your explanations! That was NOT too much information but 
exactly what I'd been hoping for. It's this sort of information that helps me 
to come to a better understanding of emacs.
I have tested your suggestion with just no result whatsoever. But with the help 
of your explanations I've managed to change my bit of code accordingly and now 
it works:
(defun ks/org-latex-remove-labels (string backend info)
  "Remove labels generated by org-mode"
  (when (org-export-derived-backend-p backend 'latex)
  (let ((case-fold-search nil))
   (goto-char 1)
   (replace-regexp-in-string "\\\\label{sec-[0-9][^}]*}\n" "" string)
   )))
(eval-after-load 'ox-latex
  '(add-to-list 'org-export-filter-final-output-functions
            'ks/org-latex-remove-labels))

Thanks again! Salome



reply via email to

[Prev in Thread] Current Thread [Next in Thread]