From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Abrahamsen Subject: Re: export to latex without labels Date: Sun, 20 Jul 2014 11:18:37 +0800 Message-ID: <87pph0vhte.fsf@ericabrahamsen.net> References: <21450.54299.595454.644227@gargle.gargle.HOWL> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:57667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X8haR-0004lg-I6 for emacs-orgmode@gnu.org; Sat, 19 Jul 2014 23:15:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X8haM-0002zv-7r for emacs-orgmode@gnu.org; Sat, 19 Jul 2014 23:14:55 -0400 Received: from plane.gmane.org ([80.91.229.3]:42295) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X8haL-0002yt-UC for emacs-orgmode@gnu.org; Sat, 19 Jul 2014 23:14:50 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1X8haF-0001Af-0N for emacs-orgmode@gnu.org; Sun, 20 Jul 2014 05:14:43 +0200 Received: from 111.197.167.73 ([111.197.167.73]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 20 Jul 2014 05:14:43 +0200 Received: from eric by 111.197.167.73 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 20 Jul 2014 05:14:43 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org "Salome Soedergran" writes: > Hi Eric, > > Eric Abrahamsen 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