From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcin Borkowski Subject: Re: inter-word space in org -> latex Date: Tue, 22 Sep 2015 22:51:22 +0200 Message-ID: <87oagu2n5h.fsf@mbork.pl> References: <87pp1a2oqb.fsf@mbork.pl> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:47099) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZeUXJ-0007uS-VY for emacs-orgmode@gnu.org; Tue, 22 Sep 2015 16:51:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZeUXF-0007fx-Ri for emacs-orgmode@gnu.org; Tue, 22 Sep 2015 16:51:37 -0400 Received: from mail.mojserwer.eu ([2a01:5e00:2:52::8]:44942) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZeUXF-0007f8-HU for emacs-orgmode@gnu.org; Tue, 22 Sep 2015 16:51:33 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.mojserwer.eu (Postfix) with ESMTP id 0A1278F2009 for ; Tue, 22 Sep 2015 22:51:32 +0200 (CEST) Received: from mail.mojserwer.eu ([127.0.0.1]) by localhost (mail.mojserwer.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wNoksrLQ3fIZ for ; Tue, 22 Sep 2015 22:51:29 +0200 (CEST) Received: from localhost (103-115.echostar.pl [213.156.103.115]) by mail.mojserwer.eu (Postfix) with ESMTPSA id B6A0D6F2007 for ; Tue, 22 Sep 2015 22:51:28 +0200 (CEST) In-reply-to: <87pp1a2oqb.fsf@mbork.pl> 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 On 2015-09-22, at 22:17, Marcin Borkowski wrote: > On 2015-09-14, at 16:42, Dan Griswold wrote: > >> How should I mark in org mode that I want a space following a period >> concluding an abbreviation to be seen by LaTeX as an interword space? > > #+LATEX_HEADER: \frenchspacing > > and never worry again. > > OTOH, it would be relatively easy to write a filter which converts Emacs > rules wrt. spaces (single/double space) into LaTeX ones. And here it is: --8<---------------cut here---------------start------------->8--- ;; Convert single spaces after periods etc. to "\ " when exporting to LaTeX (defun my-latex-filter-nonfrenchspacing (text backend info) "Convert single spaces after dots to \"\ \"." (when (and (org-export-derived-backend-p backend 'latex) sentence-end-double-space) (replace-regexp-in-string (concat "\\(" sentence-end-base "\\)" "[ \u00a0]\\([^ \t\u00a0\n]\\)") "\\1\\\\ \\2" text))) (add-to-list 'org-export-filter-plain-text-functions 'my-latex-filter-nonfrenchspacing) --8<---------------cut here---------------end--------------->8--- It is a bit simplistic (after all, I wrote it just now in 15 minutes), but it seems to work fine. It makes a few assumptions, though. One of them is that you don't mess with sentence-end-base too much: I assumed that there are no non-shy groups there. (By default there are not, and I don't see any reason for them to be there, but what do I know.) Also, I assume that for the period to /not/ end the sentence, it should be followed by one space and something non-spacey. Probably the biggest drawback is that non-breaking spaces get converted to breaking ones. However, if you care about those, you can always use the filter given in the example for filters in the Org manual, and make sure it runs before the above one. (TeX considers tildes as normal-sized spaces.) Also, note that while Emacs' way of differentiating between a sentence-ending period and a non-sentence-ending period are fairly simple, (La)TeX's rules are a bit more complicated (look up "space factor" in The TeXbook). For instance, LaTeX assumes that a period after a capital letter /never/ ends the sentence, and you have to use \@ before such period to change that. The algorithm TeX uses is really clever, and can be (ab)used in funny ways to do funny stuff in low-level, hackish TeX ways (been there, done that - for instance, when I once reimplemented the theorem-like environments, I used space factor to make sure that if a theorem begins with an enumeration, it looks fine. The "standard" LaTeX implementation of theorem-like environments is kind of crazy, even if it works in typical cases. Try typesetting a theorem with a long optional argument in a narrow column and see what happens, for instance.). TL;DR: just use \frenchspacing. Everyone will be happier. Hth, -- Marcin Borkowski http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski Faculty of Mathematics and Computer Science Adam Mickiewicz University