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: Eric Abrahamsen
Subject: Re: [O] export to latex without labels
Date: Sun, 20 Jul 2014 11:18:37 +0800
User-agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.4.50 (gnu/linux)

"Salome Soedergran" <address@hidden> writes:

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

Yes, that's the danger with totally untested suggestions :) Turns out
the \labels are hard-coded, and the "target" stuff is something else
entirely.

Glad you got it working, despite that!

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