emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* inter-word space in org -> latex
@ 2015-09-14 14:42 Dan Griswold
  2015-09-14 16:50 ` Rasmus
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Dan Griswold @ 2015-09-14 14:42 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 759 bytes --]

Dear org-mode community,

In LaTeX, a space after a period is treated as an inter-sentence space,
which is wider than an inter-word space. This can lead to overly wide
spacing after a period that ends an abbreviation rather than a space. The
way to cover this in LaTeX is to use a backslash prior to the space, as in:

Mr.\ Henry Higgins.

I have some documents in org that have the same issue: periods concluding
abbreviations, with the result that LaTeX puts more space than I want after
the abbreviation. Yet the use of "\ " does not work, as the backslash is
exported to LaTeX as a literal backslash.

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?

Thanks,

Dan

[-- Attachment #2: Type: text/html, Size: 897 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-14 14:42 inter-word space in org -> latex Dan Griswold
@ 2015-09-14 16:50 ` Rasmus
  2015-09-16 15:32   ` Dan Griswold
  2015-09-14 16:54 ` Suvayu Ali
  2015-09-22 20:17 ` Marcin Borkowski
  2 siblings, 1 reply; 8+ messages in thread
From: Rasmus @ 2015-09-14 16:50 UTC (permalink / raw)
  To: emacs-orgmode

Hi Dan,

Dan Griswold <kc5gmr@gmail.com> writes:

> Dear org-mode community,
>
> In LaTeX, a space after a period is treated as an inter-sentence space,
> which is wider than an inter-word space. This can lead to overly wide
> spacing after a period that ends an abbreviation rather than a space. The
> way to cover this in LaTeX is to use a backslash prior to the space, as in:
>
> Mr.\ Henry Higgins.
>
> I have some documents in org that have the same issue: periods concluding
> abbreviations, with the result that LaTeX puts more space than I want after
> the abbreviation. Yet the use of "\ " does not work, as the backslash is
> exported to LaTeX as a literal backslash.
>
> 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:\ @@

Though I practice I type double space after full sentences and when
there's a single space and small letters.

    (defun rasmus/org-latex-filter-nobreaks-double-space (text backend info)
        "Tries to export \"S1. S2\" as \"S1.\\ S2\",
       while letting \"S1.  S2\" be exported without tilde"
        ;; TODO: error with this output:
        ;; [[file:nasty dir/Screenshot. from 2015-03-05 19:05:00.png]]
        (when (and text (org-export-derived-backend-p backend 'latex))
          (let ((preamble (or (string-match-p "\\\\begin{document}" text) 0))
                (case-fold-search nil))
            (concat (substring text 0 preamble)
                    (replace-regexp-in-string "\\. \\([^ A-Z\n]\\)"
                                              ".\\\\ \\1"
                                              (substring text preamble))))))

    (add-to-list 'org-export-filter-final-output-functions
                 'rasmus/org-latex-filter-nobreaks-double-space)

Or,

    (defcustom rasmus/org-latex-unicode-to-tex  '((" " "~")
                                                (" " "\\,")
                                                ("​" ""))
      "list of re rep pairs which are replaced during latex export")

    (defun rasmus/org-latex-unicode-to-tex (text backend info)
      "Replace unicode strings with their TeX equivalents.

  Currently:  ' ' (no break space) to '~'
              ' ' (thin space) to '\,'
              '​'  (zero width space) to ''."
      (when (org-export-derived-backend-p backend 'latex)
        (cl-loop for (re rep) in rasmus/org-latex-unicode-to-tex do
                 (setq text (replace-regexp-in-string re rep text t t)))
        text))

    (add-to-list 'org-export-filter-final-output-functions
                 'rasmus/org-latex-unicode-to-tex)


Rasmus

-- 
I hear there's rumors on the, uh, Internets. . .

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-14 14:42 inter-word space in org -> latex Dan Griswold
  2015-09-14 16:50 ` Rasmus
@ 2015-09-14 16:54 ` Suvayu Ali
  2015-09-16 15:33   ` Dan Griswold
  2015-09-22 20:17 ` Marcin Borkowski
  2 siblings, 1 reply; 8+ messages in thread
From: Suvayu Ali @ 2015-09-14 16:54 UTC (permalink / raw)
  To: emacs-orgmode

On Mon, Sep 14, 2015 at 10:42:25AM -0400, Dan Griswold wrote:
> Dear org-mode community,
> 
> In LaTeX, a space after a period is treated as an inter-sentence space,
> which is wider than an inter-word space. This can lead to overly wide
> spacing after a period that ends an abbreviation rather than a space. The
> way to cover this in LaTeX is to use a backslash prior to the space, as in:
> 
> Mr.\ Henry Higgins.
> 
> I have some documents in org that have the same issue: periods concluding
> abbreviations, with the result that LaTeX puts more space than I want after
> the abbreviation. Yet the use of "\ " does not work, as the backslash is
> exported to LaTeX as a literal backslash.
> 
> 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?

You can use entities.  Maybe something like this:

(setq org-entities-user	; can also use "\ "
      '(("space" "~" nil "&nbsp;" " " " " " ")))

Then the following:

  Mr.\space{}Henry Higgins.

exports as:

  Mr.~Henry Higgins.

Hope this helps,

-- 
Suvayu

Open source is the future. It sets us free.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-14 16:50 ` Rasmus
@ 2015-09-16 15:32   ` Dan Griswold
  0 siblings, 0 replies; 8+ messages in thread
From: Dan Griswold @ 2015-09-16 15:32 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 253 bytes --]

On Mon, Sep 14, 2015 at 12:50 PM, Rasmus <rasmus@gmx.us> 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:\ @@


Pretty neat. Thanks.

[-- Attachment #2: Type: text/html, Size: 645 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-14 16:54 ` Suvayu Ali
@ 2015-09-16 15:33   ` Dan Griswold
  0 siblings, 0 replies; 8+ messages in thread
From: Dan Griswold @ 2015-09-16 15:33 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 332 bytes --]

On Mon, Sep 14, 2015 at 12:54 PM, Suvayu Ali <fatkasuvayu+linux@gmail.com>
wrote:

> You can use entities.  Maybe something like this:
>
> (setq org-entities-user ; can also use "\ "
>       '(("space" "~" nil "&nbsp;" " " " " " ")))
>
> Then the following:
>
>   Mr.\space{}Henry Higgins.
>


That's also  a nice solution. Thanks.

[-- Attachment #2: Type: text/html, Size: 811 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-14 14:42 inter-word space in org -> latex Dan Griswold
  2015-09-14 16:50 ` Rasmus
  2015-09-14 16:54 ` Suvayu Ali
@ 2015-09-22 20:17 ` Marcin Borkowski
  2015-09-22 20:51   ` Marcin Borkowski
  2 siblings, 1 reply; 8+ messages in thread
From: Marcin Borkowski @ 2015-09-22 20:17 UTC (permalink / raw)
  To: Dan Griswold; +Cc: emacs-orgmode


On 2015-09-14, at 16:42, Dan Griswold <kc5gmr@gmail.com> wrote:

> Dear org-mode community,
>
> In LaTeX, a space after a period is treated as an inter-sentence space,
> which is wider than an inter-word space. This can lead to overly wide
> spacing after a period that ends an abbreviation rather than a space. The
> way to cover this in LaTeX is to use a backslash prior to the space, as in:
>
> Mr.\ Henry Higgins.
>
> I have some documents in org that have the same issue: periods concluding
> abbreviations, with the result that LaTeX puts more space than I want after
> the abbreviation. Yet the use of "\ " does not work, as the backslash is
> exported to LaTeX as a literal backslash.
>
> 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.

BTW: Bringhurst claims that using larger spaces at the end of the
sentence is Bad Style™.

> Thanks,
>
> Dan


-- 
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-22 20:17 ` Marcin Borkowski
@ 2015-09-22 20:51   ` Marcin Borkowski
  2015-09-22 20:59     ` Rasmus
  0 siblings, 1 reply; 8+ messages in thread
From: Marcin Borkowski @ 2015-09-22 20:51 UTC (permalink / raw)
  To: emacs-orgmode


On 2015-09-22, at 22:17, Marcin Borkowski <mbork@mbork.pl> wrote:

> On 2015-09-14, at 16:42, Dan Griswold <kc5gmr@gmail.com> 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: inter-word space in org -> latex
  2015-09-22 20:51   ` Marcin Borkowski
@ 2015-09-22 20:59     ` Rasmus
  0 siblings, 0 replies; 8+ messages in thread
From: Rasmus @ 2015-09-22 20:59 UTC (permalink / raw)
  To: emacs-orgmode

Marcin Borkowski <mbork@mbork.pl> writes:

> ;; 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)
>
> 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.

Here'a an alternative implementation with other limitation, e.g. only
looking at [A-Z] for capitals:

       http://permalink.gmane.org/gmane.emacs.orgmode/101176

> 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.).

But isn't a lot of the cruft from TeX "fixed" in LaTeX.  E.g. I believe
the correct space is automatically used after emphasis.


> TL;DR: just use \frenchspacing.  Everyone will be happier.

Or not.

-- 
The Kids call him Billy the Saint

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-09-22 21:00 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-14 14:42 inter-word space in org -> latex Dan Griswold
2015-09-14 16:50 ` Rasmus
2015-09-16 15:32   ` Dan Griswold
2015-09-14 16:54 ` Suvayu Ali
2015-09-16 15:33   ` Dan Griswold
2015-09-22 20:17 ` Marcin Borkowski
2015-09-22 20:51   ` Marcin Borkowski
2015-09-22 20:59     ` Rasmus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).