굵은 글꼴을 방지하기 위해 org-mode에서 *를 어떻게 벗어날 수 있습니까?


12

*shrug*조직 모드 와 같은 것을 쓰면 자동으로 굵은 글씨체글꼴이 지정됩니다 . 어떻게 *shrug*내보내는 경우 즉, 실제로 그대로 그대로 표시 되는 것을 방지 할 수 있습니까?

편집하다:

여전히 굵은 글꼴의 기본 스타 구문을 변경하지 않고 굵은 글씨체를 사용할 수 있기를 원하며 내 조직 파일을 내보내는 파일 형식과 상관 없습니다. 예를 들어 HTML뿐만 아니라 Markdown에서도 작동합니다 수출.

이것은 중요한 것들이므로 굵은 글씨로 쓰여 있습니다. 그러나 다른 것을 위해, 나는 아이디어 * shrug *가 없다.


1
나중에 LaTeX로 내보내는 경우 HTML을 사용하여 \ast{}shrug\ast{}또는 \star{}shrug\star{}이와 유사한 방법으로 엔티티 인코딩을 사용할 수 있습니다. &#2a;또는 별표 앞뒤에 공백을 추가하는 것이 옵션 인 경우에도 작동합니다.
wvxvw

그냥 그대로 마커로 감싸는 suvayu의 대답이 원하는 것 같습니다. 또는 다른 문자를 사용하여 텍스트를 굵게 표시하도록 org-emphasis-alist를 수정할 수 있습니다.
user2699

정확히. = * shrug * =는 내 보낸 HTML을 code-tag 로 랩핑 하고 마크 다운에는 백틱이 있습니다. 나는 어떤 식 으로든 형식화되지 않기를 원합니다.
티모르

org-emphasis-alist 변경이 실제로는 옵션이 아님을 반영하도록 편집 된 질문입니다. 내 .org 파일에 이미 존재하는 모든 것을 굵게 변경하고 싶지 않습니다.
티모르

2
\ast{}shrug\ast{}wvxvw 언급은 아마 당신의 최선의 선택입니다. 적절한 문자 엔터티 ∗shrug∗$\ast$shrug$\ast$사용하여 html로 , 라텍스로 내 보냅니다 . org-toggle-pretty-entitiesorg 버퍼에서 UTF8 문자로 표시합니다.
mutbuerger

답변:


9

이 답변은에 공동 제안 후 영감을 이맥스 조직 모드 GNU 목록 사용에 org-entity( C-h i g (org) Special symbols) \ast{}대신 제로 폭 공간 (나는에서 제시 자 여기 내 다른 대답 ).

다음은 사용자가 다양한 기호에 대한 조직 엔티티를 기억할 필요가없는 일반적인 솔루션입니다. 사용자가 할 때 조직 엔티티 (사용 가능한 경우)를 삽입합니다 C-u SYMBOL. 작품에 대한 C-u *, C-u /, C-u =, 등

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

사용자가 입력 그래서 C-u *, \ast{}삽입되고 메시지는 아래의 에코 영역에 표시되는,

기호 *에 'org-entity'\ ast {}를 삽입했습니다.

org-pretty-entities로 설정 t하면 삽입 된 \ast{}이로 표시 됩니다 *.

이 경우 org-entity않는 문자가 존재하지 X 사용자가 않는 경우 C-u X를 , X는 (단순히 4 번 삽입 C-u일반적으로 할 것).


1
이것은 정말 편리해 보입니다. 남아있는 drwaback (내 의견으로는)은 지금까지 LaTeX 구조를 포함하지 않는 .org 파일에 파일 전체에 흩어져있는 비 org-mode 구문 (LaTeX) 비트가 있다는 것입니다. 그건 그렇고, 같은 구조 \*thisisnotbold\*가 존재 하지 않는 이유 가 있습니까?
티모르

1
이것은 조직 구문이기도합니다. org-entities설명서를 확인하십시오 .
Kaushal Modi

8

ZERO WIDTH SPACE 유니 코드 문자 사용

첫 번째 별표 앞이나 두 번째 별표 뒤에 폭이 0 인 공백 문자 (아래 스 니펫에 [ZWS]로 표시)를 추가하여 굵은 강조 구문 분석에 실패 할 수 있습니다.

아래 스 니펫은 테스트에서 HTML로 잘 내보내졌습니다.

  • [ZWS] 첫 번째 별표

    This is some *bold* test and this is ​[ZWS]*not bold*.
    
  • 두 번째 별표 [ZWS]

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

을 수행하여 ZERO WIDTH SPACE (유니 코드 이름)를 입력 할 수 있습니다 C-x 8 RET 200b RET.
나는 이것을 매우 자주 사용하므로 이것을에 바인딩했습니다C-x 8 0 .


최신 정보

emacs-org-mode 메일 링리스트에 대한 논의에 따르면 , 비 ASCII 문자를 이스케이프 처리하는 것은 권장하지 않습니다. org-entities해당되는 경우 대신 사용해야합니다. 나도 그 동의와 함께했다 이 다른 솔루션 에 삽입하게 org-entities(쉽게 정말 C-u *이 경우).


기술적으로 이것은 문제를 해결하는 아주 빠른 방법입니다. ZWS를 공백으로 해석하지 않는 조직 모드에 의존합니까? 또한 해결책이 다른 사람들이 조직 파일을 편집하는 데있어 명백한 것이 아니라고 생각합니다.
timor

@timor emacs-orgmode@gnu.org메일 링리스트 에서이 토론을 시작했습니다 . 관심이 있으시면 여기 에서 토론을 팔로우 / 추가 할 수 있습니다 .
Kaushal Modi

@timor, 그것은 분명하지 않지만 여기에 제공된 모든 솔루션 중 emacs 구성을 수정하지 않고 작동하는 유일한 솔루션이므로 파일을 공유하려는 경우 가장 분명합니다.
user2699

@ user2699 FWIW, 파일에서 org 엔티티를 사용하면 사용자 설정없이 바로 작동 \ast{}합니다. 파일에서 일반 ASCII 를 사용하는 것입니다 . 내 다른 솔루션은 단순히 \ast{}더 빠르고 기억하기 쉽게 만듭니다 .
Kaushal Modi

3

구두로, 실제로 내 보낸 LaTeX에서 일부 마크 업을 사용하려는 경우을 사용할 수 있습니다 =*shrug*=. 그러나으로 내보내기 *shrug*를 원하고 항상하려는 경우 필터를 사용하는 것이 좋습니다 . 그러나의 일부 인스턴스에 대해서만 필요한 경우 *shrug*@wvxvw에서 제안한 대안을 사용해야합니다. 매크로를 사용하여이 작업을 깔끔하게 수행 할 수 있습니다. 다음은 몇 가지 예입니다.

필터

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

본질적으로 위의 필터는 \textbf{..}트랜스 코딩 된 문자열에서 마크 업을 찾아 \ast{}..\ast{}내부에 래핑 된 내용을 변경하지 않고로 바꿉니다 {..}. 정규식과 대체 문자열을 테스트하지 않았으므로 실수가있을 수 있지만 아이디어를 얻을 수 있습니다. 다른 백엔드를 포함하기 위해 다음과 같은 추가 스 니펫을 포함 할 수 있습니다.

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

위의 정규식에 대해서도 같은 경고가 있습니다.

매크로

조직 소스 :

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

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

다음과 같이 LaTeX로 내보내기 :

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

HTML로 :

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

물론 매크로에 원하는만큼 백엔드를 추가 할 수 있습니다.

편집 : Kaushal이 주석에서 지적한 것처럼이 경우 라텍스 내보내기 스 니펫은 선택 사항입니다. 그러나 org-entities조직 소스에서 베어 라텍스를 식별하는 데 대한 목록 과 특정 규칙을 추적하는 것이 다소 어렵 기 때문에 베어 라텍스가 포함될 때마다 사용하는 것을 선호합니다 .

노트 :

  • 필터 예제는 테스트되지 않았습니다.
  • 모르겠다 HTML. 따라서 각 비트에 약간의 실수가있을 수 있습니다.

이 매크로 정의로 충분하지 않아야 #+macro: nobold \ast{}$1\ast{}합니까? astorg-entities라텍스, html, ascii 등 내보내기의 모양을 지정하는 list 멤버 중 하나입니다 ("ast" "\\ast" t "&lowast;" "*" "*" "*"). 이 목록의 요소 순서는 "이름, LaTeX 대체, LaTeX mathp, HTML 대체, ASCII 대체, Latin1 대체, utf-8 대체"입니다.
Kaushal Modi

@kaushalmodi 그렇습니다. 그러나 우리는 그것이 LaTeX라는 것을 이미 알고 있기 때문에 라텍스 스 니펫 안에 넣는 데 아무런 해가 없습니다. 내 스 니펫 사용 경험은 모호하지 않기 때문에 훨씬 강력합니다.
Quarky

-1

이것은 변수 org-emphasis-alist에 의해 제어되며 쉽게 수정할 수 있습니다.

  • 굵은 체 텍스트 위에 포인트를 놓고 what-cursor-position 명령을 사용 C-u C-x =하여면을 찾고 속성이 있음에 유의하십시오 org-emphasis.
  • 전화 customize-group및 강조 강조 검색
  • org-emphasis-alist가 텍스트를 표시하기위한 다양한 옵션과 함께 나타나야합니다.
  • *에 해당하는 항목을 삭제하십시오.
  • 변경 사항을 적용하고 org-mode 또는 emacs를 다시 시작하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.