From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: org-latex filters Date: Wed, 30 Jul 2014 20:09:03 +0200 Message-ID: <87a97qsoqo.fsf@nicolasgoaziou.fr> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:44737) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCYIi-0003Ph-AE for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 14:08:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XCYIY-0000vl-05 for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 14:08:32 -0400 Received: from relay6-d.mail.gandi.net ([2001:4b98:c:538::198]:56900) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCYIX-0000vf-Ps for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 14:08:21 -0400 In-Reply-To: (Shiyuan's message of "Wed, 30 Jul 2014 00:12:31 -0700") 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: Shiyuan Cc: "emacs-orgmode@gnu.org" Hello, Shiyuan writes: > I try to understand what the filter system is for and why the > transcoders itself doesn't suffice. So I take an example and want to see > how the filters are used in real exporter. I look at ox-latex.el and try > to make sense of the filters > > 1. There are only two filters are used: > > :filters-alist '((:filter-options . org-latex-math-block-options-filter) > (:filter-parse-tree . org-latex-math-block-tree-filter)) > > The purpose of org-latex-math-block-options-filter seems to be converting > whatever in the property list of :author, :date, :title to strings of > latex commands(please correct me if I am wrong). But what is the purpose > of org-latex-math-block-tree-filter? The same as `org-latex-math-block-options-filter', but on the parse tree itself. > The org-latex--wrap-latex-math-block is quite sophisticate and I don't > get what it's doing. It merges contiguous math objects into a single one, and give it a new type (i.e, a pseudo type), which requires its own translator. For example: \(1\)\alpha$+1$ more or less becomes \(\beta\alpha+1\) > 2. For the filters of the form :filter-TYPE, there is also a transcoder for > processing the same TYPE. For example, for bold, there are :filter-bold, > but bold is also processed in the transcoder specified in the transcoder > alist when the backend is defined(by org-export-define-backend). When shall > we use a transcode and when shall we use a filter? A transcoder is mandatory. It transforms the parsed object into a string. If there is no transcoder for a given type of object, all objects of that type will be omitted from output. A filter is applied on the output of the transcoder, for further tweaking. Filters mainly target users, who do not have complete control over transcoders (unless they create their own derived back-end). There are also three special filters, which are not applied to the output of a transcoder. Among them, two can be useful even for a back-end developer: options filter and parse tree filter. For example, they permit, as in "ox-latex.el" to introduce pseudo objects into the parsed data. You can also read "The Filter System" section in "ox.el". HTH, -- Nicolas Goaziou