Как сделать неразрывные пробелы (связи) в режиме Org, который правильно экспортирует в LaTeX - PullRequest
22 голосов
/ 16 февраля 2012

В (La) неразрывные пробелы TeX называются связями, и они создаются как ~. Связи, например, используются после сокращений, чтобы сразу после них не было разрыва строки и чтобы точки, заканчивающиеся сокращениями, не рассматривались как конечные предложения. Последнее использование важно, потому что стандартно LaTeX ставит больше пробела после точек, чем между словами.

При экспорте из режима Org в LaTeX ~ обрабатывается как явный символ, а не как связь. Игнорирование использования неразрывных пробелов не является альтернативой, поскольку приводит к неправильному интервалу (см. Второе предложение в приведенном выше примере). Одна альтернатива - заставить Org-mode обрабатывать ~ как LaTeX с #+BEGIN_LaTeX ~ #+END_LaTeX, но это многословно и экспорт в другие форматы прерывается. Наконец, использование неразрывных пробелов UTF-8, как предложено в http://comments.gmane.org/gmane.emacs.orgmode/24716,, не работает, потому что LaTeX не рассматривает его как пробел. Итак, как я могу использовать неразрывные пробелы в режиме Org, которые правильно экспортируются в LaTeX?

Вот пример для пояснения. Первое предложение не выполняется, потому что ~ трактуется как явный символ. Второе предложение не выполняется, очевидно, потому что последняя точка трактуется как окончание предложения LaTeX. Третье предложение экспортирует правильно, но оно многословно и прерывает экспорт в другие форматы. Четвертая строка (разделенная неразрывным пробелом UTF-8, который вставляется с помощью C-x 8 Пробел ) завершается сбоем, поскольку LaTeX не рассматривает ее как пробел:

#+title:Title

e.g.~example

e.g. example

#+BEGIN_LaTeX
e.g.~example
#+END_LaTeX

e.g. example

Этот экспорт ( C-x C-e L ) в следующий код LaTeX:

e.g.\~{}example

e.g. example

e.g.~example

e.g. example

Что отображается как:

LaTeX rendered

Я использую Org-mode 7.6 в Emacs 23.3.1.

Ответы [ 4 ]

17 голосов
/ 23 апреля 2013

Вкл. http://orgmode.org/manual/Special-symbols.html Я нашел решение проблемы двойного расстояния:

Org

e.g.\nbsp{}example

Латекс

e.g.~example
7 голосов
/ 07 июня 2015

Все остальные ответы работают хорошо, однако я хотел бы упомянуть org-entities для полноты картины.Более того, поскольку вы можете использовать этот механизм для выполнения более общих настроек экспорта, а также для поддержки нескольких бэкэндов.

Установите для org-entities что-то вроде этого:

(setq org-entities-user
      '(("space" "~" nil " " " " " " " ")))

Следующая организацияsource:

E.g.\space{}a, b, c

экспортирует в LaTeX как:

E.g.~a, b, c

и экспортирует в HTML как:

<p>
E.g.&nbsp;a, b, c</p>
7 голосов
/ 16 февраля 2012

Ответ намекается в теме gmane, которую вы связали.В частности, последний ответ говорит об использовании \nbsp в качестве неразрывного пробела.Само по себе это не сработает, поскольку после \nbsp вам нужен пробел, чтобы он распознал его как команду, а не только часть вашего текста.

Однако работает следующее (добавление в список попыток):

#+title:Title

* Test
1) e.g.~example

2) e.g. example

3) 
  #+BEGIN_LaTeX
    e.g.~example
  #+END_LaTeX

4) e.g. example

5) e.g.\nbsp example
   (non-breaking \240 space between \nbsp and example)

Что выводит в LaTeX как:

\item e.g.\~{}example
\item e.g. example
\item e.g.~example
\item e.g. example
\item e.g.~ example %\240 non-breaking between ~ and example

И это выглядит как:

Rendered


РЕДАКТИРОВАТЬ

Я просто перепроверил свои результаты, так как мои неразрывные пробелы не экспортировались должным образом с первого раза, и мои результаты изменились (в сторону того, что следует ожидать, а не того, что было показано). Новые результаты ниже, чтобы сохранить историю и сохранитькомментарии, имеющие смысл.

Org
#+title:Title

* Test
1) e.g.~example

2) e.g. example

3) 
  #+BEGIN_LaTeX
    e.g.~example
  #+END_LaTeX

4) e.g. example   %Space is non-breaking

5) e.g.\nbsp example    %Space is non-breaking
LaTeX
\item e.g.\~{}example
\item e.g. example
\item e.g.~example    
\item e.g. example    %Space is non-breaking
\item e.g.~ example   %Space is non-breaking
Rendered

enter image description here

Это соответствует указанному двойному интервалу (а также правильному экспорту неразрывного пробела)

5 голосов
/ 21 февраля 2014

Я включил в заголовок моего документа / шаблона / скелета следующее:

\#+LaTeX_HEADER: \DeclareUnicodeCharacter{00A0}{~}

И я использую C-x 8 SPC для вставки неразрывного пробела в тексте. Это должно работать при экспорте в LaTeX или в HTML.

Пояснение:

Макрос DeclareUnicodeCharacter определен в файле utf8.def (файл, используемый inputenc для определения отображения utf8) для определения значения символов Unicode. Первый аргумент - это шестнадцатеричный код символа, а второй - замещающий код LaTeX.

Непрерывный пробел - U+00A0, поэтому первый аргумент - 00A0. В LaTeX неразрывный пробел генерируется тильдой, поэтому вторым аргументом является одиночная тильда.

...