Nguyên văn nội tuyến và mã với dấu ngoặc kép ở chế độ Org


37

Trong chế độ Org, tôi có thể bao quanh văn bản với =hoặc ~để đặt văn bản ở nguyên văn nội tuyến hoặc chế độ mã.

Tuy nhiên, điều này không thành công nếu văn bản có dấu ngoặc kép và tôi không thể tìm thấy lời giải thích hoặc cách giải quyết trong tài liệu .

Ví dụ:

  • =hello= Hiển thị như nguyên văn
  • ~hello~ Riders dưới dạng mã
  • =hello'= Không thể hiển thị như nguyên văn
  • ~hello'~ Không thể kết xuất dưới dạng mã

Giải pháp duy nhất mà tôi tìm thấy cho đến nay là chèn các ký tự vô hình, ví dụ như gõ C-x 8 <RET> 200b <RET>, như được giải thích trong câu hỏi này .

Tại sao điều này (nó là một lỗi?) Và làm thế nào tôi có thể tránh vấn đề này mà không chèn các ký tự vô hình?

Câu trả lời:


47

Trước hết: Đây là Emacs. Đó không phải là một lỗi, đó là một thiết lập!

Thứ hai, @glucas là chính xác khi nói rằng bạn cần sửa đổiorg-emphasis-regexp-components để có được những gì bạn muốn. Tuy nhiên, tôi muốn đề xuất hai sửa đổi cho mã của anh ấy (@ Malabarba) và cung cấp thêm một chút bối cảnh:

  1. Bạn không cần phải sao chép toàn bộ giá trị org-emphasis-regexp-componentsvào tệp init của mình để sửa đổi một thành phần. Đối với trường hợp sử dụng của bạn, sau đây là đủ:

    (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\r\n,\"")
  2. Bạn không phải sửa đổi org-emphasis-regexp-componentstrước khi tải org-modequa (require 'org). Chỉ cần thêm dòng sau khi sửa đổi của bạn:

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

Thêm bối cảnh

Trong trường hợp bạn muốn tùy chỉnh các khía cạnh khác về cách đánh dấu nhấn mạnh hoạt động org-mode, hãy biết điều này:

Giá trị của org-emphasis-regexp-componentslà một danh sách với năm mục.

  1. Mục nhập đầu tiên kiểm soát các ký tự được phép đặt trước các ký tự đánh dấu. Nếu bạn muốn có thể có một cái gì đó như why=hello=kết xuất chính xác, bạn sẽ cần sửa đổi mục này.

    (setcar org-emphasis-regexp-components "...")
  2. Mục nhập thứ hai kiểm soát các ký tự được phép theo dõi ngay các ký tự đánh dấu. Nếu bạn muốn có thể có một cái gì đó như =hello=therekết xuất chính xác, bạn sẽ cần sửa đổi mục này.

    (setcar (nthcdr 1 org-emphasis-regexp-components) "...")
  3. Mục thứ ba chỉ định các ký tự không được phép là ký tự viền , nghĩa là các ký tự ngay sau ký tự đánh dấu mở hoặc trước ký tự đánh dấu đóng. Bạn sẽ cần phải sửa đổi điều này để làm cho những thứ như ='hello'=kết xuất chính xác.

    (setcar (nthcdr 2 org-emphasis-regexp-components) "...")
  4. Mục thứ tư liệt kê các ký tự được phép trong phần thân của chuỗi được đánh dấu của bạn, nghĩa là các ký tự xuất hiện giữa các ký tự viền. Bạn sẽ hiếm khi cần phải sửa đổi điều này; theo mặc định, bất kỳ ký tự nào được phép là một ký tự cơ thể.

    (setcar (nthcdr 3 org-emphasis-regexp-components) "...")
  5. Mục thứ năm chỉ định số lượng dòng mới được phép trong một biểu thức được đánh dấu. Theo mặc định, org-modecho phép một dòng mới. Vì vậy, nếu bạn muốn có thể thêm đánh dấu vào văn bản kéo dài hơn hai dòng liên tiếp, bạn sẽ cần sửa đổi mục này.

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

    ... Đâu Nlà số lượng dòng mới bạn muốn cho phép.

Bài viết liên quan

Mọi người dường như gặp vấn đề này khá thường xuyên. Ngoài bài đăng bạn đã đề cập , có ít nhất hai câu hỏi nữa về StackOverflow liên quan đến các vấn đề rất giống nhau:


7
Tôi đánh giá cao câu trả lời của bạn nhưng cũng muốn khen ngợi về chất lượng của câu trả lời.
Kaushal Modi

Cảm ơn @itsjeyd Điều này hoạt động rất tốt Nếu tôi chạy hai dòng đó một cách tương tác một khi Emacs đã tải đầy đủ bộ đệm của tôi đã mở. Tuy nhiên, và thật kỳ lạ, tôi chạy vào "Symbol's value as variable is void: org-emphasis-regexp-components"ngay cả khi tôi đặt hai dòng đó ở cuối .emacstập tin của mình . Bất kỳ suy nghĩ về lý do tại sao có thể là trường hợp?
Amelio Vazquez-Reina

@ AmelioVazquez-Reina Bạn được chào đón :) Chỉ để đảm bảo: Bạn có (require 'org)trong .emacstệp của mình trước khi thực hiện bất kỳ tùy chỉnh org-emphasis-regexp-componentsnào không?
itjeyd 13/07/2015

1
@ AmelioVazquez-Reina Tôi rất vui vì mọi thứ hiện đang hoạt động tốt với bạn :) Quan sát của bạn là chính xác - bạn không cần phải (require 'org)trong tệp init của mình để có thể sử dụng nó. Nếu bạn không, Emacs sẽ tự động tải nó khi bạn: (a) mở .orgtệp lần đầu tiên trong phiên hiện tại hoặc (b) bật chế độ thủ công qua M-x org-modelần đầu tiên trong phiên hiện tại hoặc (c ) khi nó khôi phục một máy tính để bàn đã lưu bao gồm ít nhất một .orgtệp. (tiếp tục)
itjeyd

1
@ AmelioVazquez-Reina (contd.) Vấn đề là : Emacs sẽ khôngorg-mode tự động tải chỉ vì bạn đặt một số tùy chỉnh cho nó trong tệp init của bạn. Đó là lý do tại sao bạn cần (require 'org)trước khi tùy chỉnh bất kỳ biến nào của nó. Nếu không tải đầy đủ chế độ, Emacs sẽ không biết phải làm gì với các biến như org-emphasis-regexp-components; chúng không được xác định khi Emacs lần đầu tiên gặp chúng, do đó Symbol's value as variable is voidtin nhắn.
itjeyd

11

Có một tùy chọn đơn giản hơn nhiều: sử dụng các khối nguồn nội tuyến :

src_python{hello'}

Điều này hoạt động mà không có vấn đề cho các ký tự như dấu ngoặc kép và nó cung cấp đánh dấu cú pháp cho mã nội tuyến.

Để bao gồm mã nguồn nội tuyến khi xuất, bạn sẽ muốn thêm khai báo này vào tiêu đề:

#+PROPERTY: header-args :exports code

1
Đây là một mẹo tuyệt vời! Rất đẹp để có được cú pháp tô sáng cho mã nội tuyến!
Shon

Điều đó thật tuyệt! Nó nhắc tôi latex (:
Chris.Q

7

Bạn có thể xóa các ký tự trích dẫn từ org-emphasis-regexp-componentsnhư được mô tả bởi @Malabarba trong bài đăng trên blog này .

Mã liên quan từ bài đăng đó:

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

Xem chuỗi doc cho org-emphasis-regexp-components: theo mặc định, các ký tự trích dẫn được xem xét:

viền - Các ký tự bị cấm làm ký tự viền.

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.