Встроенный дословно и код с кавычками в режиме Org
37
В режиме Org я могу окружать текст =или ~помещать текст в режиме inline или inline .
Однако это не удается, если в тексте есть кавычки, и я не смог найти объяснения или обходного пути в документации .
Например:
=hello= Отображается как дословно
~hello~ Отображается как код
=hello'= Не выводится как дословно
~hello'~ Не в состоянии отобразить как код
Единственное решение, которое я нашел до сих пор, это вставка невидимых символов, например, ввод текста C-x 8 <RET> 200b <RET>, как объяснено в этом вопросе .
Почему это (это ошибка?) И как я могу избежать этой проблемы, не вставляя невидимые символы?
Прежде всего: это Emacs. Это не ошибка, это настройка!
Во-вторых, @glucas правильно говорит, что вам нужно изменить,org-emphasis-regexp-components чтобы получить то, что вы хотите. Тем не менее, я хотел бы предложить две модификации его (@ Malabarba's) кода и предоставить немного больше контекста:
Вам не нужно копировать все значение org-emphasis-regexp-componentsв ваш init-файл, чтобы изменить один компонент. Для вашего случая использования достаточно:
Вам не нужно изменять org-emphasis-regexp-componentsперед загрузкой org-modeчерез (require 'org). Просто добавьте следующую строку после ваших изменений:
Если вы хотите настроить другие аспекты работы разметки выделения org-mode, знайте это:
Значение org-emphasis-regexp-componentsпредставляет собой список с пятью записями.
Первая запись определяет, какие символы могут непосредственно предшествовать символам разметки. Если вы хотите, чтобы что-то вроде why=hello=рендера было правильно, вам нужно изменить эту запись.
(setcar org-emphasis-regexp-components "...")
Вторая запись определяет, каким символам разрешено следовать сразу за символами разметки. Если вы хотите, чтобы что-то вроде =hello=thereрендера было правильно, вам нужно изменить эту запись.
Третья запись определяет символы, которые не допускаются в качестве пограничных символов , то есть символы, которые следуют сразу за открывающим символом разметки или предшествуют закрывающему символу разметки. Вам нужно будет изменить это, чтобы сделать такие вещи, как ='hello'=рендер правильно.
Четвертая запись перечисляет символы, которые разрешены в теле размеченной строки, то есть символы, которые появляются между символами границы. Вам редко понадобится изменить это; по умолчанию любой символ допускается как символ тела.
Пятая запись указывает, сколько новых строк разрешено внутри размеченного выражения. По умолчанию org-modeдопускается один перевод строки. Поэтому, если вы хотите иметь возможность добавлять разметку к тексту, который занимает более двух последовательных строк, вам нужно изменить эту запись.
... где Nколичество строк, которые вы хотите разрешить.
Похожие сообщения
Люди, кажется, сталкиваются с этой проблемой довольно часто. Помимо упомянутого вами поста , в StackOverflow есть еще как минимум два вопроса, которые касаются очень похожих проблем:
Я проголосовал за ваш ответ, но также хотел бы отметить качество ответа.
Каушал Моди
Спасибо @itsjeyd. Это прекрасно работает, если я запускаю эти две строки в интерактивном режиме, когда Emacs полностью загружен с уже открытыми буферами. Тем не менее, как ни странно, я сталкиваюсь, "Symbol's value as variable is void: org-emphasis-regexp-components"даже если помещаю эти две строки полностью внизу моего .emacsфайла. Любые мысли о том, почему это может иметь место?
Амелио Васкес-Рейна
@ AmelioVazquez-Reina Добро пожаловать :) Просто чтобы убедиться: Вы (require 'org)в своем .emacsфайле, прежде чем делать какие-либо настройки org-emphasis-regexp-components?
itjeyd
1
@ AmelioVazquez-Reina Я рад, что сейчас у вас все работает нормально :) Ваши наблюдения верны - вам не нужно (require 'org)в вашем init-файле, чтобы иметь возможность его использовать. Если вы этого не сделаете, Emacs загрузит его автоматически, когда вы: (а) впервые откроете .orgфайл в текущем сеансе или (б) включите режим вручную через M-xorg-modeпервый раз в текущем сеансе, или (с ) при восстановлении сохраненного рабочего стола, который содержит хотя бы один .orgфайл. (продолжение)
itsjeyd
1
@ AmelioVazquez-Reina (продолжение). Дело в том, что Emacs не загружается org-modeавтоматически только потому, что вы добавили некоторые настройки для него в свой init-файл. Вот почему вам нужно (require 'org)перед настройкой любой из его переменных. Без полной загрузки режима Emacs не будет знать, что делать с такими переменными, как org-emphasis-regexp-components; они не определены, когда Emacs впервые сталкивается с ними, отсюда и Symbol's value as variable is voidсообщение.
"Symbol's value as variable is void: org-emphasis-regexp-components"
даже если помещаю эти две строки полностью внизу моего.emacs
файла. Любые мысли о том, почему это может иметь место?(require 'org)
в своем.emacs
файле, прежде чем делать какие-либо настройкиorg-emphasis-regexp-components
?(require 'org)
в вашем init-файле, чтобы иметь возможность его использовать. Если вы этого не сделаете, Emacs загрузит его автоматически, когда вы: (а) впервые откроете.org
файл в текущем сеансе или (б) включите режим вручную черезM-x
org-mode
первый раз в текущем сеансе, или (с ) при восстановлении сохраненного рабочего стола, который содержит хотя бы один.org
файл. (продолжение)org-mode
автоматически только потому, что вы добавили некоторые настройки для него в свой init-файл. Вот почему вам нужно(require 'org)
перед настройкой любой из его переменных. Без полной загрузки режима Emacs не будет знать, что делать с такими переменными, какorg-emphasis-regexp-components
; они не определены, когда Emacs впервые сталкивается с ними, отсюда иSymbol's value as variable is void
сообщение.Есть гораздо более простой вариант: использовать встроенные исходные блоки :
Это работает без проблем для символов, таких как кавычки, и обеспечивает подсветку синтаксиса для встроенного кода.
Чтобы включить встроенный исходный код при экспорте, вам нужно добавить это объявление в заголовок:
источник
Вы можете удалить символы кавычек,
org-emphasis-regexp-components
как описано @Malabarba в этом блоге .Соответствующий код из этого поста:
См. Строку документа для
org-emphasis-regexp-components
: по умолчанию символы кавычек считаются:источник