Как сделать неразрывные пробелы (привязки) в Org-режиме, которые правильно экспортируются в LaTeX - программирование
Подтвердить что ты не робот

Как сделать неразрывные пробелы (привязки) в Org-режиме, которые правильно экспортируются в LaTeX

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

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

Вот пример, чтобы уточнить. Первое предложение терпит неудачу, потому что ~ рассматривается как явный символ. Второе предложение терпит неудачу, очевидно, потому что последняя точка рассматривается как завершение предложения LaTeX. Третье предложение экспортируется правильно, но оно многословно и прерывает экспорт в другие форматы. Четвертая строка (разделенная неразрывным пространством UTF-8, которая вставлена ​​C-x 8 Space), терпит неудачу, потому что она не рассматривается как пространство 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.

4b9b3361

Ответ 2

Ответ намечен в пределах связанного вами потока 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


ИЗМЕНИТЬ

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

организация
#+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
Латекс
\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
Вынесено

enter image description here

Это соответствует заявленному двойному интервалу (а также нераспространяющемуся пространственному экспорту)

Ответ 3

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

Установите org-entities примерно так:

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

Следующий источник Org:

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

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

E.g.~a, b, c

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

<p>
E.g.&nbsp;a, b, c</p>

Ответ 4

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

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

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

Пояснение:

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

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