Inline wörtlich und Code mit Anführungszeichen im Org-Modus
37
Im Org-Modus kann ich Text mit =oder umschließen ~, um ihn im Inline -Modus im Wort- oder Codemodus zu platzieren.
Dies schlägt jedoch fehl, wenn der Text Anführungszeichen enthält und ich in der Dokumentation keine Erklärung oder Problemumgehung gefunden habe .
Beispielsweise:
=hello= Rendert als wörtlich
~hello~ Rendert als Code
=hello'= Kann nicht als wörtlich dargestellt werden
~hello'~ Kann nicht als Code gerendert werden
Die einzige Lösung, die ich bisher gefunden habe, ist das Einfügen unsichtbarer Zeichen, z. B. Tippen C-x 8 <RET> 200b <RET>, wie in dieser Frage erläutert .
Warum ist das so (ist es ein Fehler?) Und wie kann ich dieses Problem vermeiden, ohne unsichtbare Zeichen einzufügen?
Zuallererst: Das ist Emacs. Es ist kein Fehler, es ist eine Einstellung!
Zweitens sagt @glucas zu Recht, dass Sie Änderungenorg-emphasis-regexp-components vornehmen müssen, um das zu erhalten, was Sie wollen. Ich möchte jedoch zwei Änderungen an seinem (@ Malabarbas) Code vorschlagen und etwas mehr Kontext bereitstellen:
Sie müssen nicht den gesamten Wert von org-emphasis-regexp-componentsin Ihre Init-Datei kopieren , um eine einzelne Komponente zu ändern. Für Ihren Anwendungsfall ist Folgendes ausreichend:
Sie müssen nicht müssen ändern org-emphasis-regexp-componentsvor dem Laden org-modeüber (require 'org). Fügen Sie nach Ihren Änderungen einfach die folgende Zeile hinzu:
Wenn Sie andere Aspekte der Hervorhebungsmarkierung anpassen möchten, gehen Sie folgendermaßen vor org-mode:
Der Wert von org-emphasis-regexp-componentsist eine Liste mit fünf Einträgen.
Der erste Eintrag steuert, welche Zeichen Markup-Zeichen unmittelbar vorangehen dürfen . Wenn Sie in der Lage sein möchten, etwas wie why=hello=korrekt zu rendern, müssen Sie diesen Eintrag ändern.
(setcar org-emphasis-regexp-components "...")
Der zweite Eintrag steuert, welche Zeichen unmittelbar auf Markup-Zeichen folgen dürfen . Wenn Sie in der Lage sein möchten, etwas wie =hello=therekorrekt zu rendern, müssen Sie diesen Eintrag ändern.
Der dritte Eintrag gibt die Zeichen an, die nicht als Randzeichen zulässig sind , dh Zeichen, die unmittelbar auf ein öffnendes Markup-Zeichen oder vor einem schließenden Markup-Zeichen folgen. Sie müssen dies ändern, um Dinge wie ='hello'=korrekt rendern zu können.
Der vierte Eintrag listet Zeichen auf, die im Hauptteil Ihrer markierten Zeichenfolge zulässig sind, dh Zeichen, die zwischen den Randzeichen stehen. Sie müssen dies selten ändern. Standardmäßig ist jedes Zeichen als Körperzeichen zulässig.
Der fünfte Eintrag gibt an, wie viele Zeilenumbrüche in einem markierten Ausdruck zulässig sind. Standardmäßig ist org-modeeine einzelne Zeile zulässig. Wenn Sie also Text, der mehr als zwei aufeinander folgende Zeilen umfasst, mit einem Markup versehen möchten, müssen Sie diesen Eintrag ändern.
... wo Nist die Anzahl der Zeilenumbrüche, die Sie zulassen möchten.
Zusammenhängende Posts
Leute scheinen ziemlich häufig auf dieses Problem zu stoßen. Abgesehen von dem Beitrag, den Sie erwähnt haben , gibt es mindestens zwei weitere Fragen zu StackOverflow, die sich mit sehr ähnlichen Problemen befassen:
Ich habe Ihre Antwort positiv bewertet, möchte aber auch die Qualität der Antwort loben.
Kaushal Modi
Danke @itsjeyd Das funktioniert super, wenn ich diese beiden Zeilen interaktiv starte, sobald Emacs vollständig geladen ist und meine Puffer bereits geöffnet sind. Seltsamerweise stoße ich jedoch "Symbol's value as variable is void: org-emphasis-regexp-components"auch dann auf diese beiden Zeilen, wenn ich sie ganz unten in meiner .emacsDatei platziere. Irgendwelche Gedanken darüber, warum das der Fall sein könnte?
Amelio Vazquez-Reina
@ AmelioVazquez-Reina Gern geschehen :) Nur um sicherzugehen: Machst du (require 'org)in deiner .emacsDatei noch irgendwelche Anpassungen an org-emphasis-regexp-components?
itsjeyd
1
@ AmelioVazquez-Reina Ich bin froh, dass jetzt alles richtig für dich funktioniert :) Deine Beobachtungen sind korrekt - du musst nicht (require 'org)in deiner Init-Datei sein, um sie verwenden zu können. Andernfalls wird Emacs automatisch geladen, wenn Sie: (a) eine .orgDatei zum ersten Mal in der aktuellen Sitzung öffnen oder (b) den Modus M-xorg-modezum ersten Mal in der aktuellen Sitzung manuell über aktivieren oder (c ), wenn ein gespeicherter Desktop wiederhergestellt wird, der mindestens eine .orgDatei enthält. (Forts.)
itsjeyd
1
@ AmelioVazquez-Reina (Forts.) Die Sache ist : Emacs wird nichtorg-mode automatisch geladen , nur weil Sie einige Anpassungen dafür in Ihre Init-Datei geschrieben haben. Aus diesem Grund müssen Sie (require 'org)eine der Variablen anpassen , bevor Sie sie anpassen. Ohne den Modus vollständig zu laden, weiß Emacs nicht, was mit Variablen wie zu tun ist org-emphasis-regexp-components. Sie sind nicht definiert, wenn Emacs sie zum ersten Mal trifft, daher die Symbol's value as variable is voidNachricht.
"Symbol's value as variable is void: org-emphasis-regexp-components"
auch dann auf diese beiden Zeilen, wenn ich sie ganz unten in meiner.emacs
Datei platziere. Irgendwelche Gedanken darüber, warum das der Fall sein könnte?(require 'org)
in deiner.emacs
Datei noch irgendwelche Anpassungen anorg-emphasis-regexp-components
?(require 'org)
in deiner Init-Datei sein, um sie verwenden zu können. Andernfalls wird Emacs automatisch geladen, wenn Sie: (a) eine.org
Datei zum ersten Mal in der aktuellen Sitzung öffnen oder (b) den ModusM-x
org-mode
zum ersten Mal in der aktuellen Sitzung manuell über aktivieren oder (c ), wenn ein gespeicherter Desktop wiederhergestellt wird, der mindestens eine.org
Datei enthält. (Forts.)org-mode
automatisch geladen , nur weil Sie einige Anpassungen dafür in Ihre Init-Datei geschrieben haben. Aus diesem Grund müssen Sie(require 'org)
eine der Variablen anpassen , bevor Sie sie anpassen. Ohne den Modus vollständig zu laden, weiß Emacs nicht, was mit Variablen wie zu tun istorg-emphasis-regexp-components
. Sie sind nicht definiert, wenn Emacs sie zum ersten Mal trifft, daher dieSymbol's value as variable is void
Nachricht.Es gibt eine viel einfachere Option: Verwenden Sie Inline-Quellblöcke :
Dies funktioniert problemlos für Zeichen wie Anführungszeichen und bietet Syntaxhervorhebungen für Inline-Code.
Um den Inline-Quellcode beim Export einzuschließen, fügen Sie diese Deklaration in die Kopfzeile ein:
quelle
Sie können die Anführungszeichen entfernen,
org-emphasis-regexp-components
wie von @Malabarba in diesem Blog-Beitrag beschrieben .Der relevante Code aus diesem Beitrag:
In der Dokumentzeichenfolge finden Sie
org-emphasis-regexp-components
: Standardmäßig werden die Anführungszeichen berücksichtigt:quelle