텍스트 내용을 유지하면서 LaTeX 매크로를 삭제하는 방법은 무엇입니까?


11

TeXStudio 에서 LaTeX 매크로에서 ALT+ 를 누르면 커서가 첫 번째 바로 앞에 서서 아래의 모든 것을 삭제합니다 (아래 그림 참조). DEL\macroname{content}{content

여기에 이미지 설명을 입력하십시오
첫 번째 중괄호 바로 앞에 커서 (포인트)를 놓습니다.

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

히트 ALT+ DEL당신은 얻을 :

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

이맥스에서 이것을 달성하는 방법?

업데이트
T.Verron의 설명에 따르면 C-c C-f C-dLaTeX의 일부 매크로 내에서 실행될 때 불균형 괄호 오류로 인해 문제가 발생합니다. 아래 예를 고려하십시오.
여기에 이미지 설명을 입력하십시오

이 오류가 발생합니다 : up-list: Scan error: "Unbalanced parentheses", 8074, 1. \ textenglish {}는 폴리 글로시 아 패키지에 속합니다.

이 경고를 제거하는 방법?


헴, 현재 답변에 대한주의 사항은 오 텍스가 매크로를 글꼴로 글꼴 화하는지 여부에 관한 것이 아니라 매크로가 라텍스 글꼴 사양인지 (아마도에 의해 정의 된 TeX-font-list) 것인지 아닌지에 관한 것입니다. 예를 들어, 함께 시도 \section하거나 \footnote, AUCTeX이 매크로와 fontifies 그들에 대해 알고 있지만, C-c C-f C-d불균형 괄호에 대해 불평 할 것이다.
T. Verron

TeX-font-list새로 도입 된 매크로를 포함하도록 이것을 업데이트 할 수 있다고 해도이 방법은 차선책입니다. 그렇지 않으면, 그것을 처리하기 위해 eLISP 기능을 갖는 것이 무엇인지 잘 모르겠습니다!
박사 학위

답변:


11

이 기능을 사용해보십시오 :

(defun mg-TeX-delete-current-macro (&optional arg)
  "Remove the current macro.
With an optional argument ARG, delete just the ARG-th macro
starting from the innermost."
  (interactive "*p")
  (let (macro end)
    (when 
    (dotimes (i arg macro)
      (goto-char (TeX-find-macro-start))
      (setq macro (TeX-current-macro)
        end (TeX-find-macro-end))
      ;; If we need to look for an outer macro we have to "exit" from the
      ;; current one.
      (backward-char))
      ;; Return to the beginning of the macro to be deleted.
      (forward-char)
      (re-search-forward
       (concat (regexp-quote TeX-esc) macro "\\(?:\\[[^]]*\\]\\)?"
           TeX-grop "\\(\\(.\\|\n\\)*\\)")
       end t)
      (replace-match "\\1")
      ;; Delete the closing brace.
      (delete-backward-char 1))))

제한 사항 : 완전 유사한 매크로에서는 작동하지 않습니다. Wrong type argument: integer-or-marker-p, nil범용 인수가 매크로 둘러싸는 점의 수보다 큰 경우이 함수는 오류 ( )를 발생시킵니다.

원하는 단축키에 기능을 바인딩하십시오. 예를 들어

(eval-after-load "tex"
  '(local-set-key (kbd "M-DEL") 'mg-TeX-delete-current-macro))

그것을 묶는 것 M-DEL.

버퍼 !에 포인트 가있는 경우

\onemacro{\anothermacro{!argument}}

그럼 C-2 M-DEL당신에게 줄 것이다

\anothermacro{argument}

가장 안쪽 그룹의 점이 (gr1(gr2(gr3(gr4))))접두사 C-u2 를 의미 한다면 나에게 줄 것입니다 : (gr1(gr2))? 그렇다면, 그것은 훌륭해야합니다. 나는 당신이 그것을 할 시간이 있었기를 바랍니다.
박사 학위

나는 그것을 M-DELTexStudio 에서 좋아 하도록 묶었 다. 감사.
박사 학위

@doctorate 글쎄, 내 생각은 두 번째 매크로 만 삭제하는 것입니다 gr3. 업데이트 된 답변을 참조하십시오. 당신은 당신이 포장에 의해 제안 무엇을 구현할 수 있습니다 dotimes주위 when대답의 원래 버전을.
giordano

훌륭한 기능! 이제 스마트 매크로 팩맨 처럼 동작합니다 ! 하나의 경고; 인수가 크고 오류가 발생하면 포인트 뒤로 어딘가로 점프 합니다. 현재 위치에 서있는 동안 불만을 제기 할 수 있습니까?
박사 박사

@ giordano 이것이 AucTex로 만들 가능성이 있습니까? 매우 유용합니다!
Tyler

9

글꼴 변경AUCTeX 수동 노드에서 :

C-c C-f C-d

Delete the innermost font specification containing point.

그것은 내가 놓친 문서에서 매우 편리한 부분이었습니다. 감사.
박사 학위

그러나 글꼴 사양에서만 작동합니다 (예를 들어 확인하는 것이 의미 \emph{\randommacro{test}}가 있습니다 \emph).
T. Verron

@ T.Verron : 좋은 설명. 임의의 LaTeX 매크로에 대해이를 수행하는 기본 제공 방법을 모르겠습니다.
Dan

4

다음은 포함 매크로를 제거하는 간단한 함수입니다.

(defun TeX-remove-macro ()
  "Remove current macro and return `t'.  If no macro at point,
return `nil'."
  (interactive)
  (when (TeX-current-macro)
    (let ((bounds (TeX-find-macro-boundaries))
          (brace  (save-excursion
                    (goto-char (1- (TeX-find-macro-end)))
                    (TeX-find-opening-brace))))
      (delete-region (1- (cdr bounds)) (cdr bounds))
      (delete-region (car bounds) (1+ brace)))
    t))

따라서 *요점으로 :

\footnote{Here's a * footnote} 
  => Here's a footnote

위의 기능이 주어지면 모든 매크로를 한 지점에서 제거하는 것이 한 줄입니다.

(defun TeX-remove-all-macros ()
  "Remove all containing macros for text at point."
  (interactive)
  (while (TeX-remove-macro)))

따라서 다시 한 번 *포인트로 사용하십시오.

\footnote{Here's a \textbf{footnote with \emph{emphasized * text}}} 
  => Here's a footnote with emphasized text
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.