Làm cách nào tôi có thể thoát * trong chế độ org để ngăn chặn phông chữ đậm


12

Nếu tôi viết một cái gì đó giống như *shrug*trong chế độ org, nó sẽ tự động được in thành văn bản in đậm . Làm thế nào tôi có thể ngăn chặn điều đó, tức là thực sự đã *shrug*xuất hiện nguyên văn khi xuất khẩu?

Biên tập:

Tôi vẫn muốn có thể sử dụng phông chữ in đậm (mà không phải thay đổi cú pháp sao mặc định cho văn bản in đậm) và không quan trọng đối với định dạng tệp nào mà tệp org của tôi được xuất, ví dụ: nó nên hoạt động cho Markdown cũng như HTML xuất khẩu.

Đây là một số thứ quan trọng , đó là lý do tại sao nó được viết đậm. Nhưng đối với một cái gì đó khác, tôi không có ý tưởng * nhún *.


1
Nếu bạn đang xuất cái này sang LaTeX sau này, bạn có thể thử \ast{}shrug\ast{}hoặc \star{}shrug\star{}tương tự, với HTML, bạn có thể sử dụng mã hóa thực thể: &#2a;hoặc nếu thêm khoảng trắng trước hoặc sau dấu hoa thị là một tùy chọn, điều đó cũng sẽ hoạt động.
wvxvw

Có vẻ như câu trả lời của suvayu chỉ cần gói nó trong các đánh dấu nguyên văn là những gì bạn muốn. Ngoài ra, bạn có thể sửa đổi org-nhấn mạnh-alist để một ký tự khác được sử dụng để in đậm văn bản.
dùng2699

Không chính xác. = * nhún * = kết quả trong HTML đã xuất được gói trong một code-tag và trong markdown có backticks. Tôi muốn nó không được định dạng theo bất kỳ cách nào cả.
timor

Câu hỏi được chỉnh sửa để phản ánh rằng việc thay đổi org-nhấn mạnh không thực sự là một lựa chọn. Tôi không muốn thay đổi mọi thứ in đậm đã tồn tại trong tệp .org của mình.
timor

2
Các \ast{}shrug\ast{}đề cập bởi wvxvw có lẽ là lựa chọn tốt nhất của bạn. nó xuất sang html dưới dạng ∗shrug∗latex và $\ast$shrug$\ast$sử dụng các thực thể ký tự phù hợp. org-toggle-pretty-entitieshiển thị chúng dưới dạng các ký tự UTF8 trong bộ đệm org.
mutbuerger

Câu trả lời:


9

Câu trả lời này được lấy cảm hứng sau khi đề xuất tập thể trong danh sách GNU chế độ emacs-org để sử dụng ký tự org-entity( C-h i g (org) Special symbols) \ast{}thay vì ký tự không gian có chiều rộng bằng không (mà tôi đã đề xuất trong câu trả lời khác của mình ở đây ).

Dưới đây là một giải pháp chung mà người dùng không cần phải nhớ các thực thể org cho các biểu tượng khác nhau. Nó chèn thực thể org (nếu có) khi người dùng thực hiện C-u SYMBOL; làm việc cho C-u *, C-u /, C-u =vv

(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)

Vì vậy, khi người dùng nhập C-u *, \ast{}được chèn và thông báo bên dưới được hiển thị trong vùng echo,

Đã chèn 'org-entity' \ ast {} cho ký hiệu *.

Nếu org-pretty-entitiesđược đặt thành tở trên, phần chèn \ast{}sẽ được hiển thị dưới dạng *.

Nếu một org-entitykhông tồn tại cho một ký tự X và nếu người dùng thực hiện C-u X , X chỉ cần được chèn 4 lần (như C-uthường làm).


1
Điều này trông thực sự thuận tiện. Một drwaback (theo ý kiến ​​của tôi) vẫn còn đó là tệp .org, không chứa bất kỳ cấu trúc LaTeX nào, hiện có các bit cú pháp không chế độ (LaTeX) nằm rải rác trong tệp. Nhân tiện, có một lý do mà không có cấu trúc như \*thisisnotbold\*tồn tại?
timor

1
Đây là cú pháp org quá. Kiểm tra các org-entitiestài liệu.
Kaushal Modi

8

Sử dụng ZERO WIDTH SPACE unicode char

Bạn có thể không phân tích cú pháp nhấn mạnh đậm bằng cách thêm ký tự khoảng trắng có độ rộng bằng không (được biểu thị bằng [ZWS] trong đoạn trích bên dưới) trước dấu hoa thị thứ nhất hoặc sau dấu hoa thị thứ hai.

Cả hai đoạn dưới đây đều xuất tốt sang HTML trong thử nghiệm của tôi:

  • [ZWS] trước dấu sao đầu tiên

    This is some *bold* test and this is ​[ZWS]*not bold*.
    
  • [ZWS] sau dấu sao thứ hai

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

Bạn có thể nhập ZERO WIDTH SPACE (tên unicode) bằng cách thực hiện C-x 8 RET 200b RET.
Tôi sử dụng nó rất thường xuyên, vì vậy tôi đã ràng buộc điều này vớiC-x 8 0 .


Cập nhật

Theo cuộc thảo luận về danh sách gửi thư chế độ emacs-org , không nên sử dụng các ký tự không phải ASCII để thoát; thay vào đó org-entitiesnên được sử dụng nếu có. Tôi cũng đồng ý với điều đó và đã đưa ra một giải pháp khác giúp cho việc chèn org-entitiesthực sự dễ dàng ( C-u *trong trường hợp này).


Về mặt kỹ thuật đó là một cách khá nhanh để giải quyết vấn đề. Có phải nó dựa vào chế độ org không giải thích ZWS là khoảng trắng? Ngoài ra, tôi sợ giải pháp này không gây khó chịu cho người khác khi chỉnh sửa tệp org ...
timor

@timor Tôi đã đưa ra cuộc thảo luận này trong emacs-orgmode@gnu.orgdanh sách gửi thư. Nếu quan tâm, bạn có thể theo dõi / thêm vào cuộc thảo luận ở đây .
Kaushal Modi

@timor, điều đó không rõ ràng, nhưng trong tất cả các giải pháp được đưa ra ở đây, đó là giải pháp duy nhất hoạt động mà không sửa đổi cấu hình emacs, vì vậy rõ ràng nhất nếu bạn muốn chia sẻ tệp của mình.
dùng2699

@ user2699 FWIW, việc sử dụng các thực thể org trong các tệp sẽ hoạt động ngay lập tức mà không cần bất kỳ cấu hình người dùng nào .. đó chỉ là việc sử dụng ascii đơn giản \ast{}trong các tệp. Giải pháp khác của tôi chỉ đơn giản là làm cho việc nhập \ast{}nhanh hơn và dễ nhớ hơn.
Kaushal Modi

3

Theo nguyên văn, nếu bạn thực sự muốn sử dụng một số đánh dấu trong LaTeX đã xuất, thì bạn chỉ có thể sử dụng =*shrug*=. Tuy nhiên nếu bạn chỉ muốn nó được xuất dưới dạng *shrug*và bạn muốn làm điều này mọi lúc, tôi sẽ khuyên bạn nên lọc . Tuy nhiên, nếu bạn chỉ cần điều này cho một số trường hợp *shrug*, bạn nên sử dụng giải pháp thay thế được đề xuất bởi @wvxvw. Bạn có thể làm điều này một cách sạch sẽ bằng cách sử dụng macro . Một số ví dụ sau đây.

Bộ lọc

(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)

Về cơ bản, bộ lọc ở trên tìm kiếm \textbf{..}đánh dấu trong chuỗi được chuyển mã và thay thế nó bằng \ast{}..\ast{}, mà không thay đổi bất cứ thứ gì được bọc bên trong {..}. Tôi chưa kiểm tra biểu thức chính quy và chuỗi thay thế, vì vậy có thể có lỗi, nhưng bạn hiểu ý. Tương tự như vậy để bao gồm các phụ trợ khác, người ta có thể bao gồm các đoạn bổ sung như thế này:

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

Cùng cảnh báo giữ cho biểu thức thông thường ở trên.

Macro

Nguồn Org:

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

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

xuất khẩu sang LaTeX như:

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

và sang HTML dưới dạng:

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

Tất nhiên bạn có thể thêm nhiều phụ trợ như bạn muốn vào macro.

Chỉnh sửa: như Kaushal chỉ ra trong các nhận xét, đoạn xuất cho latex là tùy chọn trong trường hợp này. Tuy nhiên, tôi thích sử dụng chúng bất cứ khi nào có liên quan đến latex trần, vì tôi thấy khá khó khăn để theo dõi danh sách org-entitiesvà các quy tắc cụ thể đằng sau việc xác định latex trần trong nguồn Org.

Ghi chú:

  • các ví dụ bộ lọc chưa được kiểm tra,
  • Tôi không biết bất kỳ HTML, vì vậy có thể có một số sai lầm trong các bit tương ứng.

Không nên định nghĩa vĩ mô này là đủ : #+macro: nobold \ast{}$1\ast{}? astlà một trong những thành viên của org-entitiesdanh sách, chỉ định xuất khẩu latex, html, ascii, v.v ... sẽ như thế nào : ("ast" "\\ast" t "&lowast;" "*" "*" "*"). Thứ tự của các yếu tố trong danh sách đó là "tên, thay thế LaTeX, toán học LaTeX, thay thế HTML, thay thế ASCII, thay thế Latin1, thay thế utf-8".
Kaushal Modi

@kaushalmodi Vâng, tuy nhiên, vì chúng ta đã biết đó là LaTeX, không có hại gì khi đặt nó bên trong một đoạn cao su. Theo kinh nghiệm của tôi, sử dụng đoạn trích mạnh mẽ hơn nhiều vì tính không rõ ràng của nó.
suvayu

-1

Điều này được kiểm soát bởi biến cực đại nhấn mạnh và có thể dễ dàng sửa đổi.

  • Đặt điểm trên văn bản in đậm, sử dụng lệnh what-con trỏ-vị trí C-u C-x =để tìm mặt, lưu ý rằng nó có thuộc tính org-emphasis.
  • Gọi customize-groupvà tìm kiếm để nhấn mạnh org
  • org-nhấn-alist sẽ xuất hiện, với các tùy chọn khác nhau để đánh dấu văn bản.
  • Xóa mục tương ứng với *
  • Áp dụng các thay đổi và khởi động lại chế độ org hoặc emacs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.