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: Sun, 20 Jul 2014 11:18:37 +0800	[thread overview]
Message-ID: <87pph0vhte.fsf@ericabrahamsen.net> (raw)
In-Reply-To: 21450.54299.595454.644227@gargle.gargle.HOWL

"Salome Soedergran" <salome.soedergran@gmx.ch> writes:

> Hi Eric,
>
> Eric Abrahamsen <eric@ericabrahamsen.net> 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	other threads:[~2014-07-20  3:15 UTC|newest]

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

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=87pph0vhte.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).