조직 모드에서 따옴표가있는 인라인 축약어 및 코드


37

조직 모드 에서 텍스트를 인라인 그대로 또는 코드 모드 로 배치 =하거나 ~배치 할 수 있습니다 .

그러나 텍스트에 따옴표가 있으면 설명서 에서 설명이나 해결 방법을 찾을 수 없으면 실패합니다 .

예를 들면 다음과 같습니다.

  • =hello= 그대로 표현
  • ~hello~ 코드로 렌더링
  • =hello'= 그대로 표현하지 못함
  • ~hello'~ 코드로 렌더링하지 못함

지금까지 찾은 유일한 해결책 C-x 8 <RET> 200b <RET>이 질문에 설명 된 것처럼 보이지 않는 문자 (예 : 입력)를 삽입하는 것 입니다.

왜 이것이 버그입니까? 보이지 않는 문자를 삽입하지 않고 어떻게이 문제를 피할 수 있습니까?

답변:


47

우선 : 이맥스입니다. 버그가 아니라 설정입니다!

둘째, @glucas는 원하는 것을 얻기 위해 수정해야org-emphasis-regexp-components 한다고 말하는 것이 정확 합니다. 그러나 그의 (@Malabarba) 코드에 두 가지 수정 사항을 제안하고 좀 더 컨텍스트를 제공하고 싶습니다.

  1. org-emphasis-regexp-components단일 구성 요소를 수정하기 위해 전체 값을 init 파일에 복사 할 필요는 없습니다 . 사용 사례의 경우 다음으로 충분합니다.

    (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\r\n,\"")
  2. 를 통해 로드하기 전에 수정 하지 않아도됩니다 . 수정 후 다음 줄을 추가하십시오.org-emphasis-regexp-componentsorg-mode(require 'org)

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

더 많은 맥락

강조 마크 업이 작동하는 방식의 다른 측면을 사용자 정의하려면 다음을 org-mode알고 있어야합니다.

의 값은 org-emphasis-regexp-components5 개의 항목이있는 목록입니다.

  1. 첫 번째 항목은 마크 업 문자 바로 앞에 올 수있는 문자를 제어 합니다. why=hello=렌더링 과 같은 것을 올바르게하려면이 항목을 수정해야합니다.

    (setcar org-emphasis-regexp-components "...")
  2. 두 번째 항목은 마크 업 문자 바로 뒤에 올 수있는 문자를 제어 합니다. =hello=there렌더링 과 같은 것을 올바르게하려면이 항목을 수정해야합니다.

    (setcar (nthcdr 1 org-emphasis-regexp-components) "...")
  3. 세 번째 항목 은 테두리 문자 로 허용 되지 않는 문자 , 즉 시작 마크 업 문자 바로 다음 또는 종료 마크 업 문자 앞에 오는 문자를 지정합니다. ='hello'=렌더링 같은 것을 올바르게 하려면이를 수정해야 합니다.

    (setcar (nthcdr 2 org-emphasis-regexp-components) "...")
  4. 네 번째 항목은 마크 업 된 문자열의 본문에 허용되는 문자, 즉 테두리 문자 사이 에 나타나는 문자를 나열 합니다. 거의 수정하지 않아도됩니다. 기본적으로 모든 문자는 본문 문자로 허용됩니다.

    (setcar (nthcdr 3 org-emphasis-regexp-components) "...")
  5. 다섯 번째 항목은 마크 업 된 표현식 내에서 허용되는 줄 바꿈 수를 지정합니다. 기본적 org-mode으로 단일 줄 바꿈을 허용합니다. 따라서 두 줄 이상 연속되는 텍스트에 마크 업을 추가하려면이 항목을 수정해야합니다.

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

    ... 여기서 줄 N바꿈 수는 어디 입니까?

관련 게시물

사람들은이 문제를 상당히 자주 겪는 것 같습니다. 언급 한 게시물 외에도 StackOverflow에 대해 매우 비슷한 문제를 다루는 적어도 두 가지 이상의 질문이 있습니다.


7
귀하의 답변을 찬성했지만 답변의 질에 대해 칭찬하고 싶습니다.
Kaushal Modi

고마워 @itsjeyd 이맥스가 이미 버퍼가 열려있는 상태로 완전히로드되면 두 줄을 대화식으로 실행하면 훌륭하게 작동합니다. 그러나 이상하게도 "Symbol's value as variable is void: org-emphasis-regexp-components"두 줄을 .emacs파일 맨 아래에 배치해도 문제가 발생 합니다. 왜 그런지에 대한 생각이 있습니까?
Amelio Vazquez-Reina

@ AmelioVazquez - 레이나 당신이있는 거 환영합니다 :) 그냥이 있는지 확인하려면 다음을 수행 (require 'org)하여 년 .emacs에 모든 사용자 지정하기 전에 파일 org-emphasis-regexp-components?
itsjeyd

1
@ AmelioVazquez-Reina 나는 모든 것이 지금 당신을 위해 올바르게 작동하게되어 기쁘다 :) 당신의 관찰이 정확합니다-당신이 (require 'org)그것을 사용할 수 있도록 init 파일에 필요하지 않습니다 . 그렇지 않으면 (a) .org현재 세션에서 처음으로 파일을 열거 나 (b) M-x org-mode현재 세션에서 처음 으로 수동으로 모드를 활성화 하거나 (c ) .org파일이 하나 이상 포함 된 저장된 데스크톱을 복원 할 때 (계속)
itsjeyd

1
@ AmelioVazquez-Reina (계속) 문제는 다음과 같습니다 . inmacs 파일에 사용자 정의를 넣어서 Emacs org-mode 자동으로 로드 되지 않습니다 . 그렇기 때문에 (require 'org)변수를 사용자 정의 하기 전에 해야 합니다. 모드를 완전히로드하지 않으면 Emacs는 다음과 같은 변수로 수행 할 작업을 알 수 없습니다 org-emphasis-regexp-components. 그들은 Emacs가 처음 그들을 만날 때 정의되지 않으므로 Symbol's value as variable is void메시지입니다.
itsjeyd

11

훨씬 간단한 옵션이 있습니다 : 인라인 소스 블록 사용 :

src_python{hello'}

따옴표와 같은 문자에는 문제없이 작동하며 인라인 코드에 구문 강조 표시를 제공합니다.

내보낼 때 인라인 소스 코드를 포함하려면 헤더에 다음 선언을 추가해야합니다.

#+PROPERTY: header-args :exports code

1
이것은 좋은 팁입니다! 인라인 코드에 대한 구문 강조 표시를 얻는 것이 좋습니다!
Sone

대단해! 그것은 나에게 라텍스를 생각 나게한다 (:
Chris.Q

7

org-emphasis-regexp-components블로그 게시물 에서 @Malabarba가 설명한대로 따옴표 문자를 제거 할 수 있습니다 .

해당 게시물의 관련 코드 :

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

doc 문자열을 참조하십시오 org-emphasis-regexp-components: 기본적으로 따옴표 문자는 다음과 같습니다.

border-경계 문자로 금지 된 문자.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.