Satır içi sözdizimi ve Org modunda tırnak işaretleri içeren kod


37

Org modunda, metni satır içi konuşma veya kod modunda yerleştirmek için =veya ile çevreleyebilirim .~

Ancak, metinde alıntılar varsa bu başarısız olur ve belgelerde bir açıklama veya geçici çözüm bulamadım .

Örneğin:

  • =hello= Sözel olarak işlenir
  • ~hello~ Kod olarak oluşturur
  • =hello'= Sözlü olarak oluşturulamadı
  • ~hello'~ Kod olarak oluşturulamadı

Şimdiye kadar bulduğum tek çözüm, görünmez karakterler eklemek, örneğin bu sorudaC-x 8 <RET> 200b <RET> açıklandığı gibi yazmak .

Neden bu (bu bir hata mı?) Ve görünmez karakterler eklemeden bu sorunu nasıl önleyebilirim?

Yanıtlar:


47

Her şeyden önce: Bu Emacs. Bu bir hata değil, bir ayar!

İkincisi, @glucas istediğinizi elde etmek için değişiklik yapmanız gerektiğiniorg-emphasis-regexp-components söylerken doğrudur . Bununla birlikte, (@ Malabarba'nın) kodunda iki değişiklik önermek ve biraz daha içerik sağlamak istiyorum:

  1. org-emphasis-regexp-componentsTek bir bileşeni değiştirmek için init-file değerinin tamamını kopyalamanız gerekmez . Kullanım durumunuz için aşağıdakiler yeterlidir:

    (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\r\n,\"")
  2. Sen yok etmek zorunda değiştirmek org-emphasis-regexp-componentsyüklemeden önce org-modearacılığıyla (require 'org). Değişikliklerinizden sonra aşağıdaki satırı eklemeniz yeterlidir:

    (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)

Daha fazla içerik

Vurgu işaretlemesinin nasıl çalıştığının diğer yönlerini özelleştirmek isterseniz, şunu öğrenin org-mode:

Değeri org-emphasis-regexp-componentsbeş girişli bir listedir.

  1. İlk giriş, hangi karakterlerin hemen işaretleme karakterlerinden önce gelmesine izin verildiğini kontrol eder . why=hello=Doğru renderleme gibi bir şeye sahip olmak istiyorsanız, bu girişi değiştirmeniz gerekecektir.

    (setcar org-emphasis-regexp-components "...")
  2. İkinci giriş, hangi karakterlerin işaretleme karakterlerini hemen takip etmesine izin verildiğini kontrol eder . =hello=thereDoğru renderleme gibi bir şeye sahip olmak istiyorsanız, bu girişi değiştirmeniz gerekecektir.

    (setcar (nthcdr 1 org-emphasis-regexp-components) "...")
  3. Üçüncü giriş karakterleri belirtir değil olarak izin sınır karakterleri hemen bir açılış işaretleme karaktere eşlik veya bir kapanış biçimlendirme karakterin önüne yani, karakterler. ='hello'=Doğru şekilde oluşturulmasını sağlamak için bunu değiştirmeniz gerekecektir .

    (setcar (nthcdr 2 org-emphasis-regexp-components) "...")
  4. Dördüncü girdi işaretli dizginizin gövdesinde izin verilen karakterleri, yani kenarlık karakterleri arasında görünen karakterleri listeler . Bunu nadiren değiştirmeniz gerekecek; Varsayılan olarak, herhangi bir karakter bir gövde karakteri olarak izin verilir.

    (setcar (nthcdr 3 org-emphasis-regexp-components) "...")
  5. Beşinci giriş, işaretlenmiş bir ifadenin içinde kaç tane yeni satıra izin verildiğini belirtir. Varsayılan olarak, org-modetek bir yeni satıra izin verir. Dolayısıyla, iki ardışık çizgiden fazlasını kapsayan metne işaretleme ekleyebilmek istiyorsanız, bu girişi değiştirmeniz gerekecektir.

    (setcar (nthcdr 4 org-emphasis-regexp-components) N)

    ... Nizin vermek istediğiniz yeni hatların sayısı.

İlgili Mesajlar

İnsanlar bu konuda oldukça sık karşılaşıyor gibi görünüyor. Bahsettiğiniz gönderinin yanı sıra , StackOverflow hakkında çok benzer sorunlarla ilgilenen en az iki soru daha var:


7
Cevabınızı yükselttim ama aynı zamanda cevabın kalitesini de takdir ediyorum.
Kaushal Modi

Thanks @itsjeyd Bu harika çalışıyor Emacs arabelleğim açıkken tamamen yüklediğinde bu iki çizgiyi etkileşimli olarak çalıştırırsam. Ancak, ve yeterince garip bir şekilde, "Symbol's value as variable is void: org-emphasis-regexp-components"bu iki satırı tamamen dosyamın en altına .emacskoysam bile karşılaşıyorum. Neden böyle olabileceği hakkında bir fikriniz var mı?
Amelio Vazquez-Reina

@ AmelioVazquez-Reina Sen karşılama :) Sadece emin olmak için: mi (require 'org)senin içinde .emacsherhangi özelleştirmeler yapmadan önce dosyanın org-emphasis-regexp-components?
itsjeyd,

1
@ AmelioVazquez-Reina Her şey sizin için doğru şekilde çalıştığına sevindim :) Gözlemleriniz doğrudur - kullanmak (require 'org)için init-dosyanızda olması gerekmez. Bunu yapmazsanız, aşağıdakiler sırasında Emacs otomatik olarak yüklenir: (a) .orggeçerli oturumda ilk kez bir dosya açın veya (b) modu M-x org-modegeçerli oturumda ilk kez manuel olarak etkinleştirin veya (c) ) en az bir .orgdosya içeren kaydedilmiş bir masaüstünü geri yüklediğinde. (devam)
itsjeyd

1
@ AmelioVazquez-Reina (devam) Bir şey var : Emacs , bununorg-mode için bazı özelleştirmeler yerleştirdiğiniz için otomatik olarak yüklenmeyecek . Bu yüzden (require 'org)değişkenlerinden herhangi birini özelleştirmeden önce ihtiyacınız var . Modu tamamen yüklemeden, Emacs gibi değişkenlerle ne yapacağını bilemez org-emphasis-regexp-components; Emacs onlarla ilk karşılaştığında tanımlanmaz, dolayısıyla Symbol's value as variable is voidmesajdır.
itsjeyd,

11

Çok daha basit bir seçenek var: satır içi kaynak bloklarını kullanın :

src_python{hello'}

Bu, alıntı işaretleri gibi karakterler için sorunsuz çalışır ve satır içi kod için sözdizimi vurgulama sağlar.

Dışa aktarırken satır içi kaynak kodunu dahil etmek için bu bildirimi başlığa eklemek istersiniz:

#+PROPERTY: header-args :exports code

1
Bu harika bir ipucu! Satır içi kod için sözdizimi vurgulamak için çok güzel!
Shon

Bu harika! Bana Lateks hatırlatıyor (:
Chris.Q

7

org-emphasis-regexp-componentsBu blog gönderisinde , alıntı karakterlerini @Malabarba tarafından açıklanan şekilde kaldırabilirsiniz .

Bu gönderideki ilgili kod:

;; This HAS to come before (require 'org)
(setq org-emphasis-regexp-components
      '("     ('\"{“”"
        "-   .,!?;''“”\")}/\\“”"
        "    \r\n,"
        "."
        1))

Şunlar için doc dizgesine bakın org-emphasis-regexp-components: varsayılan olarak alıntı karakterleri dikkate alınır:

border - Karakterler sınır karakterleri olarak yasaklanmış .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.