"Salome Soedergran" <salome.soederg...@gmx.ch> writes: > Hi Eric, > > Eric Abrahamsen <e...@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