조직 모드 들여 쓰기를 사용자 정의하는 방법은 무엇입니까?


12

이 질문은 실제로 공백이 아닌 글꼴 (Sabon, Minion, Garamond 등)을 사용하기 때문에 발생합니다. 헤드 라인 아래의 텍스트가 헤드 라인과 정렬되지 않기 때문에 org-indent-mode를 사용할 때 문제가 발생합니다. 예: 여기에 이미지 설명을 입력하십시오

글꼴은 조지아입니다. 자, 내가 consolas로 바꾸면 :

여기에 이미지 설명을 입력하십시오

문제는 모노 스페이스가 아닌 글꼴에서 "space"와 *가 동일한 공간을 차지하지 않는다는 것입니다. 나는 이것을 해결하는 방법을 모른다. 인터넷을 검색했지만 들여 쓰기를 직접 조정하는 자습서를 찾을 수 없습니다. org-indent.el을 읽으려고했지만 이해하기에는 너무 깁니다. 도움을 주셔서 감사합니다!


또한 Emacs에서 비례 간격 세리프 글꼴을 사용하고 비슷한 문제가 발생했습니다. 나는 글꼴 화에 약간의 조정이 도움이 될 수 있다고 생각했지만, 아직 철저히 조사하지는 않았습니다.
Christian Gagné

1
이와 같은 소리는 Org 모드와 관련이 없으며 단 간격이 아닌 글꼴을 정렬하는 방법을 궁금합니다. 대답은 코드를 사용하여 그렇게해야한다는 것입니다. 다른 문자와 같은 너비를 가진 공백 문자에 의존 할 수는 없습니다. 간단히 말하면 일반적으로 운이 없습니다.
Drew

@Drew 당신은 "일반적으로"맞을 수도 있습니다. 그러나이 특정 문제에 대한 해결책이 있습니다. 내 대답을 참조하십시오. 들여 쓰기에 사용되는 선행 공백 org-indent은 실제로 존재하지 않으며 line-prefix속성 일뿐 이므로 보이지 않는 한 다른 문자로 대체 할 수 있습니다.
사용되지 않음

@deprecated : 알겠습니다. 수정 해 주셔서 감사합니다. BTW는 아마도 조직 자체가 기본이 될 수도 있습니다. 또는 SPC문자를 사용 하지만 기본적으로 고정 폭 글꼴이있는면을 부과하는 텍스트 (또는 오버레이) 속성과 함께 사용하십시오 . 조직 개선 요청이 주문되었을 수 있습니다. ;-)
Drew

@Drew 실제로 글꼴 잠금을 사용하여 쉽게 수행 할 수 있습니까?
Clément

답변:


9

한 가지 해결책은 org-indent-strings공백 대신 별표를 들여 쓰기 문자로 사용 하도록 수정 하는 것입니다. 즉, 비례 글꼴을 사용하더라도 들여 쓰기 너비는 항상 정확합니다. 그런 다음 들여 쓰기의 전경색을 배경색과 동일하게 설정하여 별이 보이지 않게합니다.

다음 코드를 사용하여이를 달성 할 수 있습니다 org-indent-initialize.

(require 'cl)
(defun org-indent-use-stars-for-strings ()
  "Initialize the indentation strings with stars instead of spaces."
  (setq org-indent-strings (make-vector (1+ org-indent-max) nil))
  (aset org-indent-strings 0 nil)
  (loop for i from 1 to org-indent-max do
    (aset org-indent-strings i
          (org-add-props
          (concat (make-string (1- i) ?*) ; <- THIS IS THE ONLY CHANGE
              (char-to-string org-indent-boundary-char))
          nil 'face 'org-indent))))

(advice-add 'org-indent-initialize :after #'org-indent-use-stars-for-strings)
(set-face-foreground 'org-indent "white")

결과는 다음을 사용하여 Mac OS X에서 다음 emacs -Q(set-face-font 'default :family "Gill Sans")같습니다.

여기에 이미지 설명을 입력하십시오


@@ deprecated, 답변을 제공해 주셔서 대단히 감사합니다! 이것은 어리석은 질문이지만 org-indent.el 또는 내 init.el에 코드를 배치해야합니까? 나에게도 효과가없는 것 같습니다. Windows에서 Emacs 24.4를 사용하고 있습니다. 어떤 것을 컴파일해야합니까? 감사!
Alex

멍청한 질문을 했어요 org-indent.el을 컴파일해야합니다. 미래 참고 : 가장 쉬운 방법은이 라인을 변경하는 것 (concat (make-string (1- i) ?\ ) 으로 (concat (make-string (1- i) ?*) 정의에의 org-indent-initialize예는 (defun org-indent-initialize... 다음 조직-indent.elc에 컴파일 조직-indent.el에 MX 바이트 - 컴파일 파일을 사용합니다. 그런 다음 emacs를 다시 시작하십시오.
Alex

3

더 이상 사용되지 않는 답변은 매우 좋지만 나에게는 효과가 없었습니다. 나는 현재 Emacs 24.4와 org 8.2.4를 사용하고 있으며 조언 org-indent-initialize은 아무것도하지 않았습니다. 변경된 들여 쓰기 문자로 함수를 재정의해야했고 효과가있었습니다. 어쩌면 Emacs 24.5 및 org 8.3으로 업그레이드하면 조언이 작동합니다.

그러나 다른 제목 수준에 대해 다른 크기의 가변 너비 글꼴을 사용하기 때문에 레벨 1의 제목 *이 수준 2와 같은 너비가 아니기 때문에 몇 가지 다른 조정 을 수행해야했습니다.

그래서 나는 이것을해야했다.

  1. 동일한 크기의 동일한 글꼴을 org-hide사용하도록 면 (헤드 라인을 들여 쓰는 데 사용) 및 org-indent(헤드 라인이 아닌 라인을 들여 쓰기하는 데 사용)을 설정하십시오.
  2. 변수 org-indent-boundary-character*기본값 (공백) 대신으로 설정하십시오 . 이것은 들여 쓰기 문자 뒤에 있지만 내용 앞에 삽입되는 문자입니다. 이것이 변경이 필요한지 확실하지 않지만 일관성을 유지하는 것으로 보입니다. 사용중인 글꼴, 크기 등에 따라 달라질 수 있습니다.

org-indent-initialize더 이상 사용되지 않는 것으로 변경하는 것 외에도 이러한 작업을 수행 한 것 같습니다. 나는 다음과 같은 버퍼로 끝납니다.

스크린 샷

제목 수준이 내려 가면서 들여 쓰기가 제목 텍스트와 완벽하게 정렬되지 않음을 알 수 있습니다. 저수준 제목에 더 작은 글꼴을 사용했기 때문이라고 생각하지만 쉽게 해결할 수있는 방법이 없다고 생각합니다. 이미지 및 특수 문자로 설정할 수 있지만 복잡하고 느릴 수 있으므로 line-prefixand와 같은 텍스트 속성으로 무언가를 수행하는 것이 가능할 wrap-prefix수 있습니다. 모든 제목 수준에 동일한 글꼴 크기를 사용하면 문제가되지 않을 것입니다.

어쨌든, 이것은 아마도 충분할 것입니다. :)

추신 : 요청에 따라 내 org-level얼굴이 있습니다. 이것들은에서 복사 custom-set-faces되었지만 사용하지 않으면 customize외부에서 설정할 수 있습니다.

 '(org-level-1 ((t (:inherit variable-pitch :foreground "#cb4b16" :weight bold :height 1.3))))
 '(org-level-2 ((t (:inherit variable-pitch :foreground "#859900" :weight bold :height 1.2))))
 '(org-level-3 ((t (:inherit variable-pitch :foreground "#268bd2" :weight bold :height 1.15))))
 '(org-level-4 ((t (:inherit variable-pitch :foreground "#b58900" :weight bold :height 1.1))))
 '(org-level-5 ((t (:inherit variable-pitch :foreground "#2aa198" :weight bold))))
 '(org-level-6 ((t (:inherit variable-pitch :foreground "#6c71c4" :weight bold))))
 '(org-level-7 ((t (:inherit variable-pitch :foreground "#d33682" :weight bold))))
 '(org-level-8 ((t (:inherit variable-pitch :foreground "#dc322f" :weight bold))))

@ bluejay 나는 이것이 어떻게 보이는지 좋아한다. 어딘가에 게시 할 수있는 완전한 구성이 있습니까?
erikstokes

ELPA에서 설치할 수 solarized-dark있는 solarized-theme패키지의 일부인 테마를 사용하고 있습니다. 에 관해서는 org-level-*얼굴, 나는 위의 대답에 추가 할 수 있습니다.
blujay

정말 멋지다. 기본 *을 특수 기호로 어떻게 대체합니까?
Alex

org-bullets패키지 에서 나왔습니다. 로 package-list-packages시작하는 모든 패키지를 실행 하고 확인하십시오 org-. :)
blujay

2

어떻게 든 다른 설정을 내 설정에서 사용할 수 없었지만 가장 빠르고 쉬운 해결책은 다음과 같습니다.

`M-x customize-face org-hide`

그런 다음 Font Family속성을 모노 스페이스 글꼴 (내 경우에는 Iosevka)로 변경하십시오.

그리고 그건 말 그대로 당신이해야 할 모든 때문에, org-indent자동으로부터 상속 (개요 들여 쓰기 얼굴) org-hide(얼굴이 헤드 라인에서 숨기기 최고의 별에 사용)

여기에 이미지 설명을 입력하십시오


1

훨씬 간단한 해결책 : 조직 모드 M-:에서 다음을 누르고 실행하십시오.

(font-lock-add-keywords 
 nil 
 '(("^[[:space:]*]+" 0 '(face (:family "Ubuntu Mono")) append))
 'append)

M-x font-lock-fontify-buffer그 후에 필요할 수 있습니다 . 이 솔루션은 단순히 선행 문자 (공백 및 별)가 모노 스페이스 글꼴을 사용하도록합니다.

또한 "Ubuntu Mono"를 선택한 모노 스페이스 글꼴로 바꾸고 싶을 것입니다.


다른 솔루션을 고려할 때 더 이상 필요하지 않습니다. :)
blujay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.