emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: emacs-orgmode@gnu.org
Subject: Re: export to latex without labels
Date: Sat, 19 Jul 2014 22:47:36 +0800	[thread overview]
Message-ID: <87tx6dmmlz.fsf@ericabrahamsen.net> (raw)
In-Reply-To: 87y4vpmmxa.fsf@ericabrahamsen.net

Eric Abrahamsen <eric@ericabrahamsen.net> writes:

> "Salome "Södergran\"" <salome.soedergran@gmx.ch> writes:
>
>> Hello experts,
>>
>> I've been fiddling around for a while now with the following problem:
>>
>> When I export something from org to latex I get plenty of \labels that I never refer to. I'd like to get rid of all those labels.
>> I found some code [1] that uses a hook that does not work in orgmode anymore. So I tried to adapt that code to the new orgmode way with org-export-filter-final-functions:
>>
>> (defun ks/org-latex-remove-labels (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 "\\\\label{sec-[0-9][^}]*}" "")
>>    )))
>>
>> (eval-after-load 'ox-latex
>>   '(add-to-list 'org-export-filter-final-output-functions
>>             'ks/org-latex-remove-labels))
>>
>>
>> When I now try to export something from org to latex, I get the following error message:
>>  Wrong number of arguments: (lambda (backend) "Remove labels generated by org-mode" (if (org-export-derived-backend-p backend (quote latex)) (progn (let ((case-fold-search nil)) (goto-char 1) (replace-regexp "\\\\label{sec-[0-9][^}]*}" ""))))), 3
>>
>> I am just an emacs user, not a programmer, and I have no idea what's wrong and what I have to change to make it work. Can anyone give me a hint?
>> TIA, Salome
>
> 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))

  reply	other threads:[~2014-07-19 14:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-19 14:02 export to latex without labels Salome =?iso-8859-1?Q?S=F6dergran ?=
2014-07-19 14:40 ` Eric Abrahamsen
2014-07-19 14:47   ` Eric Abrahamsen [this message]
2014-07-19 16:05   ` Nick Dokos
     [not found] <mailman.83.1405785624.1721.emacs-orgmode@gnu.org>
2014-07-19 20:24 ` Salome Soedergran
2014-07-20  3:18   ` Eric Abrahamsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87tx6dmmlz.fsf@ericabrahamsen.net \
    --to=eric@ericabrahamsen.net \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).