Kalın yazı tipini önlemek için kuruluş modunda * 'dan nasıl kaçabilirim?


12

*shrug*Kuruluş modunda olduğu gibi bir şey yazarsam, otomatik olarak kalın metin olarak yazılacaktır . Bunu nasıl önleyebilirim, yani *shrug*dışa aktarıldığında kelimesi kelimesine görünmesini nasıl sağlayabilirim ?

Düzenle:

Hala kalın yazı tipini kullanabilmek istiyorum (kalın metin için varsayılan yıldız sözdizimini değiştirmek zorunda kalmadan) ve kuruluş dosyamın hangi dosya biçiminin dışa aktarıldığına dikkat etmemeli, örneğin Markdown ve HTML için çalışmalı ihracatı.

Bu bazı önemli şeyler, bu yüzden kalın yazılmıştır. Ama başka bir şey için, hiçbir Fikrim * omuz silkme * yok.


1
Daha sonra LaTeX'in bu ihracat yapıyorsanız, deneyebilirsiniz \ast{}shrug\ast{}veya \star{}shrug\star{}HTML ile Varlık kodlamasını kullanabilirsiniz, benzer: &#2a;önce veya yıldız işareti sonra boşluk ekleyerek bir seçenek ise, ya, bu çok çalışacak.
wvxvw

Bu, suvayu'nun kelimeyi kelimesi kelimesine sarmalama cevabıdır. Alternatif olarak, metni kalınlaştırmak için başka bir karakter kullanılacak şekilde kuruluş-vurgu vurgusunu değiştirebilirsiniz.
user2699

Tam olarak değil. = * shrug * = dışa aktarılan HTML'nin bir code-tag içine sarılmasıyla sonuçlanır ve markdown'da ters vuruşlar olur. Hiçbir şekilde biçimlendirilmemesini istiyorum.
timor

Değişen org-vurgu-alistinin gerçekten bir seçenek olmadığını yansıtacak şekilde düzenlenmiş soru. .Org dosyamda zaten var olan her şeyi kalın yapmak istemiyorum.
timor

2
\ast{}shrug\ast{}Wvxvw bahsettiği muhtemelen en iyi seçenektir. uygun karakter varlıklarını kullanarak ∗shrug∗html'ye ve lateksine dışa aktarır $\ast$shrug$\ast$. org-toggle-pretty-entitiesbunları kuruluş arabelleğinde UTF8 karakterleri olarak görüntüler.
mutbuerger

Yanıtlar:


9

Bu cevap üzerine toplu önerileri sonra esinlenmiştir emacs-org-mod GNU listesinde kullanmak org-entity( C-h i g (org) Special symbols) \ast{}yerine sıfır genişlik uzay (ı önerdi karakterleri burada benim diğer yanıt ).

Aşağıda, kullanıcının çeşitli semboller için kuruluş varlıklarını hatırlaması gerekmediği genel bir çözüm bulunmaktadır. Kullanıcı yaptığında kuruluş varlığını (varsa) ekler C-u SYMBOL; işleri için C-u *, C-u /, C-u =vb

(defun modi/org-entity-get-name (char)
  "Return the entity name for CHAR. For example, return \"ast\" for *."
  (let ((ll (append org-entities-user
                    org-entities))
        e name utf8)
    (catch 'break
      (while ll
        (setq e (pop ll))
        (when (not (stringp e))
          (setq utf8 (nth 6 e))
          (when (string= char utf8)
            (setq name (car e))
            (throw 'break name)))))))

(defun modi/org-insert-org-entity-maybe (&rest args)
  "When the universal prefix C-u is used before entering any character,
    insert the character's `org-entity' name if available.

    If C-u prefix is not used and if `org-entity' name is not available, the
    returned value `entity-name' will be nil."
  ;; It would be fine to use just (this-command-keys) instead of
  ;; (substring (this-command-keys) -1) below in emacs 25+.
  ;; But if the user pressed "C-u *", then
  ;;  - in emacs 24.5, (this-command-keys) would return "^U*", and
  ;;  - in emacs 25.x, (this-command-keys) would return "*".
  ;; But in both versions, (substring (this-command-keys) -1) will return
  ;; "*", which is what we want.
  ;; http://thread.gmane.org/gmane.emacs.orgmode/106974/focus=106996
  (let ((pressed-key (substring (this-command-keys) -1))
        entity-name)
    (when (and (listp args) (eq 4 (car args)))
      (setq entity-name (modi/org-entity-get-name pressed-key))
      (when entity-name
        (setq entity-name (concat "\\" entity-name "{}"))
        (insert entity-name)
        (message (concat "Inserted `org-entity' "
                         (propertize entity-name
                                     'face 'font-lock-function-name-face)
                         " for the symbol "
                         (propertize pressed-key
                                     'face 'font-lock-function-name-face)
                         "."))))
    entity-name))

;; Run `org-self-insert-command' only if `modi/org-insert-org-entity-maybe'
;; returns nil.
(advice-add 'org-self-insert-command :before-until #'modi/org-insert-org-entity-maybe)

Kullanıcı türleri Yani C-u *, \ast{}takıldığında ve iletinin altındaki yankı alanında görüntülenir,

* Sembolü için 'org-entity' \ ast {} eklendi.

Eğer org-pretty-entitiesayarlanır tyukarıda takılı \ast{}olacak gösterilen şekilde *.

Bir Xorg-entity karakteri için a yoksa ve kullanıcı X yaparsa , X 4 kez eklenir ( genellikle olduğu gibi).C-u C-u


1
Bu gerçekten kullanışlı görünüyor. Kalan bir drwaback (bence), şimdiye kadar herhangi bir LaTeX yapısı içermeyen .org dosyasının artık dosya boyunca dağılmış mod olmayan sözdizimi (LaTeX) bitlerine sahip olmasıdır. Bu arada, böyle bir yapının olmaması için bir neden \*thisisnotbold\*var mı?
timor

1
Bu da org sözdizimidir. Check org-entitiesbelgelere.
Kaushal Modi

8

ZERO WIDTH SPACE unicode char kullanma

Birinci yıldız işaretinden önce veya ikinci yıldız işaretinden sonra sıfır genişlikli boşluk karakteri (aşağıdaki snippet'lerde [ZWS] ile gösterilir) ekleyerek kalın vurgu ayrıştırmayı başarabilirsiniz.

Aşağıdaki snippet'lerin her ikisi de testlerimde HTML'ye iyi bir şekilde dışa aktarıldı:

  • [ZWS] ilk yıldızdan önce

    This is some *bold* test and this is ​[ZWS]*not bold*.
    
  • [ZWS] ikinci yıldız işaretinden sonra

    This is some *bold* test and this is *not bold*​[ZWS].
    

Yaparak ZERO WIDTH SPACE (unicode name) girebilirsiniz C-x 8 RET 200b RET.
Bunu çok sık kullanıyorum, bu yüzden buna bağladımC-x 8 0 .


Güncelleme

Gereğince emacs-org-mod posta listesinde tartışma , tavsiye edilmez kaçmak için ASCII olmayan karakterler kullanarak; bunun yerine org-entitiesuygulanabilirse kullanılmalıdır. Ben de bunu kabul ettim ve yerleştirmeyi gerçekten kolaylaştıran başka bir çözüm buldum org-entities( C-u *bu durumda).


Teknik olarak bu sorunu çözmenin oldukça hızlı bir yoludur. ZWS'yi boşluk olarak yorumlamayan kuruluş moduna güveniyor mu? Ayrıca, çözümün org dosyasını düzenleyen diğer insanlar için zorlayıcı olmadığından korkuyorum ...
timor

@timor Bu tartışmayı emacs-orgmode@gnu.orgposta listesine ekledim . İlgileniyorsanız, tartışmayı buradan takip edebilir / ekleyebilirsiniz .
Kaushal Modi

@timor, açık değil, ancak burada verilen tüm çözümlerden emacs yapılandırmasını değiştirmeden çalışan tek çözümdür, bu nedenle dosyalarınızı paylaşmak istiyorsanız en açık olanıdır.
user2699

@ user2699 FWIW, dosyalarda kuruluş varlıklarının kullanımı, herhangi bir kullanıcı yapılandırması olmadan hemen çalışacaktır .. \ast{}Dosyalarda yalnızca düz ascii kullanımıdır . Benim diğer çözüm sadece girişini kolaylaştırıyor \ast{}daha hızlı ve kolay hatırlanır.
Kaushal Modi

3

Kelimenin tam anlamıyla, dışa aktarılan LaTeX'te bir işaretleme kullanmak istiyorsanız, o zaman kullanabilirsiniz =*shrug*=. Ancak, sadece olarak dışa aktarılmasını *shrug*istiyorsanız ve bunu her zaman yapmak istiyorsanız, filtreleri tavsiye ederim . Bununla birlikte, yalnızca bazı örneklerinde buna ihtiyacınız varsa, *shrug*@wvxvw tarafından önerilen alternatifi kullanmalısınız. Bunu makroları kullanarak temiz bir şekilde yapabilirsiniz . Aşağıda bazı örnekler verilmiştir.

Filtreler

(defun my-bold (contents backend info)
  (when (org-export-derived-backend-p backend 'latex)
    (replace-regexp-in-string "\\`\\\\textbf{\\(.+\\)}"
                              "\\\\ast{}\\1\\\\ast{}" contents)))

(add-to-list 'org-export-filter-bold-functions 'my-bold)

Esasen yukarıdaki filtre \textbf{..}, kod dönüştürülmüş dizede biçimlendirmeyi arar ve \ast{}..\ast{}içine sarılmış olanı değiştirmeden değiştirir {..}. Ben normal ifade ve yedek dize test etmedim, bu yüzden hatalar olabilir, ama fikir olsun. Benzer şekilde diğer arka uçları kapsayacak şekilde, bunun gibi ekstra snippet'ler de dahil edilebilir:

(when (org-export-derived-backend-p backend 'html)
   (replace-regexp-in-string "<b>\\(.+\\)</b>" "\&#2a;\\1\&#2a;" contents))

Aynı uyarı yukarıdaki düzenli ifade için de geçerlidir.

Makrolar

Kuruluş kaynağı:

#+macro: nobold @@latex:\ast{}$1\ast{}@@ @@html:&#2a;$1&#2a;@@

This text is *bold* this is nobold{{{not}}}

LaTeX'e şu şekilde ihracat yapıyor:

This text is \textbf{bold} this is \ast{}not\ast{}

ve HTML olarak:

This text is <b>bold</b> this is  &#2a;not&#2a;

Elbette makroya istediğiniz kadar arka uç ekleyebilirsiniz.

Düzenleme: Kaushal yorumlarda belirtildiği gibi, bu durumda lateks için ihracat snippet'i isteğe bağlıdır. Bununla birlikte, çıplak lateks söz konusu olduğunda bunları kullanmayı tercih ederim, çünkü org-entitiesOrg kaynağında çıplak lateksi tanımlamanın arkasındaki belirli kuralları ve listeyi takip etmeyi oldukça zor buluyorum .

Not:

  • filtre örnekleri test edilmemiştir,
  • Hiç bilmiyorum HTML, bu yüzden ilgili bitlerde bazı hatalar olabilir.

Bu makro tanım yeterli olmamalı mı #+macro: nobold \ast{}$1\ast{}? ast, org-entitieslateks, html, ascii vb. dışa aktarma işlemlerinin neye benzemesi gerektiğini belirten liste üyelerinden biridir ("ast" "\\ast" t "&lowast;" "*" "*" "*"). Bu listedeki öğelerin sırası "ad, LaTeX değiştirme, LaTeX mathp, HTML değiştirme, ASCII değiştirme, Latin1 değiştirme, utf-8 değiştirme" şeklindedir.
Kaushal Modi

@kaushalmodi Evet olurdu, ancak zaten LaTeX olduğunu bildiğimiz için, lateks snippet'inin içine koymanın bir zararı yoktur. Deneyimlerime göre, parçacıkları kullanma belirsizliği nedeniyle çok daha sağlam.
Quarky

-1

Bu değişken org-vurgu-alist tarafından kontrol edilir ve kolayca değiştirilebilir.

  • Kalın metin üzerine nokta koyun C-u C-x =, yüzü bulmak için ne-imleç-konumu komutunu kullanın , özelliği olduğunu unutmayın org-emphasis.
  • customize-groupKuruluş vurgusunu arayın ve arayın
  • org-vurgu-alist metni işaretlemek için çeşitli seçeneklerle görünmelidir.
  • * İle ilgili girişi silin
  • Değişiklikleri uygulayın ve kuruluş modunu veya emac'ları yeniden başlatın
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.