LaTeX 방정식에서 인라인 수학을 강조하기 위해 무지개 구분 기호 / 무지개 블록을 얻는 방법


12

LaTeX 편집을 위해 AUCTeX 와 함께 스페이스 맥을 사용 하고 있으며 무지개 구분 기호 및 / 또는 무지개 블록이 LaTeX 수학 방정식을 강조 하도록하고 싶습니다 . 불행히도 이것은 부분적으로 만 작동합니다. 즉 일부 방정식은 강조 표시되고 일부 방정식은 강조 표시되지 않습니다.

예 : 무지개 구분 기호

예제 스크린 샷에서 인라인 수학 $은 포함되어 있지만 나머지 인라인 수학은 포함되어 \(...\)있습니다.

rainbow-blocks가 악화, 가끔 가끔 문서의 한 곳에서 작업 할 것 같은 관계없이 범위 작동하지 않습니다.

예 : 무지개 블록

Q :rainbow-blocks LaTeX에서 왜 이런 일이 발생하는지 또는 인라인 수학으로 일하는 방법을 알고 있습니까? 효과적인 대안이 있습니까?


auctex의 라텍스 모드는 구문 테이블에 특수 구문을 갖도록 "$"를 정의하는 것으로 보이므로 font-lock의 구문 글꼴이 키워드 기반 글꼴을 재정의하는 것일 수 있습니다.
Kirill

highlight-parentheses글꼴 잠금 대신 오버레이를 사용하므로 오버레이 함수 기간 동안 임시 구문 테이블을 사용하는 것이 매우 간단합니다. github.com/nschum/highlight-parentheses.el 해당 라이브러리에서 변경 될 필요가 기능하는 것입니다 hl-paren-highlight: (let ((my-syntax-table (make-syntax-table))) (with-syntax-table my-syntax-table . . . 불행하게도, 당신이 지정한 것과 다른 라이브러리입니다 - 내가 해결하는 방법을 알고하지 않습니다 rainbow-delimiters- 아마도 당신이 할 수 관리자와 함께 Github에서 문제를여십시오.
법률 목록

이를 사용 (with-silent-modifications (remove-text-properties (region-beginning) (region-end) '(face nil font-lock-face nil)) (add-text-properties (region-beginning) (region-end) '(face rainbow-delimiters-depth-1-face)))하면 포함 된 수식 내에서 글꼴을 바꿀 수 있습니다. 그러나 이것의 주변 조언으로는 작동하지 않습니다 rainbow-delimiters-propertize-delimiter. 이는 latex-mode의 글꼴 화가를 통해 글꼴 화 후에 발생 함을 나타냅니다 rainbow-delimiters-mode.
Tobias

레인보우 구분 기호는 jit-lock을 직접 사용합니다. 어쩌면 구문 글꼴이 jit-lock을 사용하지 않고 타이밍 문제가 있습니까?
Tobias

답변:


2

다음은 주석과 비슷합니다.

  1. 그것은 문제의 작은 부분으로 만 해결됩니다 ( rainbow-delimiters-mode)
  2. 철저히 테스트되지는 않았습니다 (라텍스 파일 하나만 사용).
  3. 왜 작동하는지 완전히 이해하지 못합니다 ( font-lock-mode정말 복잡한 기계입니다)

처음에는 다음에 대한 솔루션입니다 rainbow-delimiters-mode.

텍스트 속성 font-lock-facefacein rainbow-delimiters-propertize-delimiter및로 바꿉니다 rainbow-delimiters-unpropertize-delimiter. defsubst패키지 대신에 패키지를 사용 하기 때문에 사용할 defun수는 defalias없지만 함수 자체를 수정해야합니다 (내가 이해하는 한-이 점에서 틀렸다면 의견을 말하십시오).

수정 된 기능은 다음과 같습니다.

(defsubst rainbow-delimiters-propertize-delimiter (loc depth)
  "Highlight a single delimiter at LOC according to DEPTH.

LOC is the location of the character to add text properties to.
DEPTH is the nested depth at LOC, which determines the face to use.

Sets text properties:
`font-lock-face' to the appropriate delimiter face.
`rear-nonsticky' to prevent color from bleeding into subsequent characters typed by the user."
  (with-silent-modifications
    (let ((delim-face (if (<= depth 0)
                          'rainbow-delimiters-unmatched-face
                        (rainbow-delimiters-depth-face depth))))
      ;; (when (eq depth -1) (message "Unmatched delimiter at char %s." loc))
      (add-text-properties loc (1+ loc)
               ;; 2015-05-24: Changed font-lock-face to face to enable rainbow after syntax fontification in latex-mode
               ;; (see http://emacs.stackexchange.com/questions/4260/how-to-get-rainbow-delimiters-rainbow-blocks-to-highlight-in-line-math-in-latex)
                           `(face ,delim-face
                             rear-nonsticky t)))))


(defsubst rainbow-delimiters-unpropertize-delimiter (loc)
  "Remove text properties set by rainbow-delimiters mode from char at LOC."
  (with-silent-modifications
    (remove-text-properties loc (1+ loc)
                ;; 2015-05-24: See corresponding line in `rainbow-delimiters-propertize-delimiter'.
                            '(face nil
                              rear-nonsticky nil))))

이제 추론 :

$ 구분 기호 사이에 포함 된 수식은 이미 Kirill이 지적했듯이 font-lock-mode로 구문이 지정된 구문입니다. 이 글꼴의 등록은 정상적으로 보입니다 (변수 font-lock-syntactic-face-function및 기능 참조 font-latex-syntactic-face-function). 그러나 describe-char포함 된 수식의 문자에서 구문 글꼴 화는 face-property 대신 -property를 사용합니다 font-lock-face.

다음은 매우 복잡한 글꼴 잠금 장치를 완전히 이해하지 못했기 때문에 가정입니다.

face보다 강한 것 같습니다 font-lock-face. 무지개의 구분 사용 font-lock-face에 의해 지배된다 face통사의 fontification. 그럼에도 불구하고, 우리는 구문 기반의 글꼴 화가 검색 (키워드) 기반의 글꼴 화에 우선하여 jit-lock을 사용한다는 이점을 가지고 있습니다 (정보 페이지 참조 font-lock-mode).

우리가 사용하는 경우 문제가 해결된다는 결론에 그 리드 나 facerainbow-delimiters대신 font-lock-face. 그리고 여기에 나는 완전한 결과를 모릅니다. 그러나을 통해 직접적으로 rainbow-delimiters사용하기 때문에 어쨌든 흔들리는 바닥에 서 있습니다.jit-lockfont-lock-mode

이미 연락을 했지만 rainbow-delimiters( https : //.com/questions/19800243/highlight-first-mismatching-paren/20022030#20022030 참조 ) 와 연락 하지 않았습니다 rainbow-blocks. 시간이 제한되어 있기 때문에에 집중하기로했습니다 rainbow-delimiters. 어쩌면 rainbow-blocks비슷한 방법으로 문제를 해결할 수도 있습니다 .

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