From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: [patch, ox] Unnumbered headlines Date: Mon, 11 Aug 2014 16:18:08 +0200 Message-ID: <87bnrrp0tb.fsf@nicolasgoaziou.fr> References: <87lhqzyubg.fsf@gmx.us> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:37489) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XGqPn-000175-8C for emacs-orgmode@gnu.org; Mon, 11 Aug 2014 10:17:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XGqPf-0004q9-5a for emacs-orgmode@gnu.org; Mon, 11 Aug 2014 10:17:35 -0400 Received: from relay4-d.mail.gandi.net ([2001:4b98:c:538::196]:35575) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XGqPe-0004pw-TG for emacs-orgmode@gnu.org; Mon, 11 Aug 2014 10:17:27 -0400 In-Reply-To: <87lhqzyubg.fsf@gmx.us> (rasmus@gmx.us's message of "Fri, 08 Aug 2014 15:39:15 +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: Rasmus Cc: emacs-orgmode@gnu.org, alantyree@gmail.com, tsd@tsdye.com Hello, Rasmus writes: > In a recent thread=EF=BB=BF=C2=B9 Tom and Alan mention that authors somet= imes need > unnumbered headlines, e.g. for prefaces. This patch (tries to) add > this feature via the tag :nonumber: (customizable via Custom or > in-file). Interesting. Some comments follow. > I make two assumptions. First, the tag is recursive, so if the parent > is not numbered the child is not numbered. Indeed. > Secondly, I depart from the LaTeX tradition of ignoring unnumbered > headlines in the TOC (except in the case of ox-latex.el where it > depends on org-latex-classes). (See example below). OK. > In my opinion a :nonumber: tag is a natural continuation of :export: > and :noexport: First, maybe a tag is not the best way to specify it. Tags are rather obnoxious and their length is somewhat limited by the width of the window. Another option is to use properties, e.g. "UNNUMBERED", or "NO_NUMBER" with a non-nil value * Some headline :PROPERTIES: :UNNUMBERED: t :END: It is harder to notice an unnumbered headline, but it doesn't add cruft to the tag line, and this is far less important than :noexport:. This is not perfect either, but I think the trade-off is honest. Another advantage is inheritance is already implemented for node properties (see `org-export-get-node-property'). > and unlike :ignoreheading: the implementation is fairly clean (or > maybe I'm cheating myself here). Do not underestimate it: implementing this feature is a bit tricky, and will introduce backward incompatible changes to export back-ends (possibly outside the scope of core+contrib). A major problem comes from `org-export-get-headline-number', which always returns a unique non-nil value for headlines in a parse tree. Even unnumbered headlines (e.g. with option num:2) get a number. Consequently, some back-ends use this number as a unique ID, as this excerpt from "ox-html.el" (format "%s " level (mapconcat #'number-to-string numbers ".")) It is not possible to rely on this mechanism with your patch. A solution is to create two functions for the two features: - `org-export-get-headline-number' :: the same as today, but returns nil if headline is unnumbered. - `org-export-get-headline-id' :: returns a unique ID, as an integer, for the current headline, notwithstanding its numbering status. Then `org-export-get-ordinal' should probably try to call the first one and fallback to the second one. The previous snippet from "ox-html.el" would become (format "%d " level (org-export-get-headline-id headline info)) Obviously, this implies that every back-end using this construct should be updated accordingly. WDYT? Regards, --=20 Nicolas Goaziou