문제

EMACS에서 다음 코드를 빠르게 작성하려면 어떻게해야합니까?

\newcommand{\cA}{\mathcal A}
\newcommand{\cB}{\mathcal B}
\newcommand{\cC}{\mathcal C}
...
...
\newcommand{\cY}{\mathcal Y}
\newcommand{\cZ}{\mathcal Z}

글쓰기보다 빠른 방법이 있습니까?

A
B
C
D
.
.
.
Y
Z

그리고 각 줄에서 매크로를 수행합니까? (a newcommand로 변경 { ca} { Mathcal a})

도움이 되었습니까?

해결책

일반적으로, 처음으로 이런 종류의 문제에 직면 할 때 JB가 이미 말했듯이 키보드 매크로를 사용할 것입니다.

두 번째로 Steve Yegge의 매우 흥미로운 기사를 확인하십시오. http://steve-yegge.blogspot.com/2006/06/shiny-and-new-emacs-22.html, 여기에는 당신과 같은 문제에 대한 솔루션이 포함되어 있습니다.

당신의 편의와 내 자신의 조명을 위해, 나는 실제로 계속해서 그것을 테스트했습니다.

나는 시작할 것이다

A
...
A

26 번

그리고 a

MX REPLEC-REGEXP

A
\\newcommand{\\c\,(string (+ ?A \#))}{\\mathcal \,(string (+ ?A \#))}

다른 팁

키보드 매크로가 결과를 가장 빠르게 얻을 수 있다는 데 동의합니다.

더 재미는 프로그래밍 방식의 접근 방식입니다.

(loop 
      for n from (string-to-char "A") to (string-to-char "Z")
      for c = (char-to-string n)
      do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))

A에서 Z는 26 줄에 불과합니다. 키보드 매크로 인 IMHO를 사용하는 것보다 더 많은 시간 자동화 생성을 낭비 할 것입니다.

그것은 당신의 배경에 따라 다릅니다. 난 그냥 입력 할거야 M-! 그리고:

perl -e"print map {q(\newcommand{\c).$_.q(}{\mathcal ).qq($_}\n)} A..Z

당신은 알고 있습니까? 사각형 선택 ?

또한 있습니다 string-rectangle:

  • 텍스트의 시작 부분에 Place Point (커서) Mark (C-SPC)
  • 마지막 줄의 시작 부분에 포인트를 배치하십시오
  • 유형 M-x string-rectangle
  • 입력 문자열 ( newcommand { c)

마크 이후 각 줄 앞에 해당 문자열이 삽입됩니다.

나는 카르마가 충분하지 않거나 언급 할 것이 없지만 HD의 스타일을 약간 향상시키고 싶었습니다.

다음은 원본입니다.

(loop 
  for n from (string-to-char "A") to (string-to-char "Z")
  for c = (char-to-string n)
  do (insert (concat "\\newcommand{\\c" c "}{\\mathcal " c "}\n")))

우선, EMACS LISP에는 Chars 용 독자 구문이 있습니다. 대신에 (string-to-char "X"), 당신은 그냥 쓸 수 있습니다 ?X. 그런 다음 printf 스타일을 사용할 수 있습니다 format 대신에 char-to-string 그리고 concat 최종 결과를 생성하려면 :

(loop for n from ?A to ?Z
      do (insert (format "\\newcommand{\\c%s}{\\mathcal %s}\n" n n)))

이제 생각하지 않고 입력하기에 충분히 간결합니다. M-: 즉각적인.

나는 또한 텍사스가 실제로 텍사스라면 매크로를 가지고 있다고 지적 할 것이다.

편집 : Joe Casadonte의 또 다른 스타일 조언; (incf foo) 보다 입력하기가 훨씬 쉽습니다 (setq foo (+ foo 1)).

또는 한 번에 하나씩하고 싶다면 대화식 방법

(defun somefun(inputval)
  (interactive "sInputVal: ")
  (insert ( format "\\newcommand{\\c%s}{\\mathcal %s}" inputval inputval) )
)

텍스트를 원할 때마다 평가하고 mx somefun 만

정확히 답이 아닙니다.

EMAC 또는 VIM을 사용하지 않는 사람들의 경우 Excel을 열고 자동 제외 기능 및 텍스트 연결 기능을 사용하여 그러한 코드를 생성 할 수 있다고 덧붙이고 싶습니다.

나는 HD의 루프를 내 것보다 조금 더 좋아하지만 여기에는 대체적이고 일반화 된 접근 방식이 있습니다.

(defun my-append (str)
  "Substitute A-Z in STR and insert into current buffer.

Looks for '--HERE--' (without quotes) in string STR, substitutes the
letters A-Z in the string and then inserts the resulting string into
the current buffer."
  (interactive "sInput String: ")
  (let ((lcv 0)
        letter newstr)
    (while (< lcv 26)
      (setq letter (+ ?A lcv))

      (insert (replace-regexp-in-string "--HERE--" (char-to-string letter) str t t) "\n")

      (setq lcv (+ lcv 1)))))

둘을 결합하기에는 너무 어렵지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top