2011-03-21 1 views
2

총 이맥스 멍청한 놈. 그래서 지금은 이맥스에서 상당히 큰 LaTeX 프로젝트를 진행하고 있습니다.이 프로젝트에서는 makeidx 패키지를 사용하여 몇 마디로 색인을 생성해야하는 곳이 몇 군데 있습니다. 색인 된 단어를 굵은 글꼴로 사용하기를 원했기 때문에 나는 내 자신의 명령 인 \ind{}을 만들었습니다. 그러면 인수가 굵게 표시되고 색인이 생성됩니다. 하지만 지금은이 명령에 만족하지 않으므로 \textbf{whatever}\index{whatever by default}에 의해 \ind{whatever}의 모든 인스턴스를 내 텍스트로 변경하고 싶습니다.더 복잡한 작업을 수행하기 위해 이맥스의 검색 및 바꾸기를 어떻게 수정할 수 있습니까?

  1. search-and-replace
  2. 저장을 \ind의 인수 ("무엇"의를 사용하여 텍스트를 이동 \ind{의 예를 들어 보면 \textbf{에 의해 대체 :

    문제는 내가 원하는 정확히 알고있다 이 경우)

  3. \index의 인수는 무엇인지 사용자에게 질문하십시오. 기본적으로 (enter 키를 치면) 첫 번째 인수가되어야하지만 마음을 바꾸고 다른 것을 입력 할 수도 있습니다 (이 경우 기본적으로 "무엇이든간에"). 입력이 없으면 (예 : " " 공백 만) 프로그램을 중지하십시오.
  4. \index{, 새 인수 및 }을 적어주십시오.
  5. 텍스트에서 다음 발생으로 이동하십시오.

그러나 아아아!, 나는 이것을 달성하는 방법을 모르므로 누군가의 도움이 필요합니다. 그러한 일을하는 방법을 설명하는 데 너무 많은 시간이 필요하다면 내 기능을 작성하는 데 대한 자습서를 보내 주시겠습니까?

나는 분명히하고 있기를 바랍니다. 양해 해 주셔서 감사합니다.

+1

3 단계에서 replace-regex를 사용하여 인간 입력 비트 이외의 모든 것을 수행 할 수 있습니다 ([link] (http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexp -Replace.html)), 최악의 경우 정규식을 실행 한 다음 손으로 사용자 정의하려는 비트를 찾을 수 있습니다. –

답변

6

이 방법은 다소 모호한 것 같지만 일회용으로는 충분합니다.replace-regexpquery-replace-regexp (C-M-의 %)에 대한 여분의 텍스트

은 새로운 하나 이스케이프 시퀀스 ... 어떤 리스프 \,(...) 표현 될 수있다. Lisp 함수 read-from-minibuffer은 사용자가 입력 한 임의의 텍스트를 읽습니다. 선택적인 기본값이 있습니다. 그러므로 :

C-M- % : 시작 query-replace-regexp.

\\ind{\([^}]+?\)} : 검색 할 패턴.

\\textbf{\1}\\index{\,(read-from-minibuffer "index content? " \1)} : 대체 텍스트. 사용자는 \index{} 요소 다음에 중괄호 안에 넣을 텍스트를 묻는 메시지를 표시하고, 기본값으로 \ind{} 요소 뒤에 오는 중괄호 사이의 원본 텍스트를 사용합니다.

query-replace-regexp을 사용할 때는 각각 y을 입력하여 각 선택 사항을 확인해야합니다. 이 단계를 생략하려면 M-x replace-regexp을 사용하십시오.

3

\ind을 다시 정의하여 선택적 인수를 얻을 수없는 이유는 무엇입니까? 예를 들어

:

\newcommand{\ind}[2][]{% 
    \def\first{#1}% 
    \ifx\first\empty 
    \textbf{#2}\index{#2}% 
    \else 
    \textbf{#2}\index{#1}% 
    \fi 
} 

당신이 \ind{whatever} 또는 \ind[whatever-else]{whatever} 사용할 수있는이 방법.

+0

오 이런 식으로 끝낼 수 있는지 몰랐습니다. 이미'\ ind'를 140 차례 나 가지고 있으며, 대부분은 개혁 될 필요가있다. 그래서 가장 빠른 솔루션 (가장 우아함)은 내가 설명하는 것과 간단히 연결될 것이라고 생각했습니다. – Literal

3

블라드는 문제에 대한 LaTeX 답변을 제공합니다. 이맥스 솔루션은 키 매크로는 다음과 같습니다, 당신의 변화의 한 단계를 수행 새 매크로를 정의 할

C-x (

로 시작하는 말 :

C-s \ind{ 
<left>ex 

그런 다음 \textbf에 인수를 복사 및 붙여 넣기 매크로 ... 당신은 반복 할 수있는 방법으로 조심해야합니다. 표준 수정이 완료되면, 당신은 지금 C-x e 원하는 부분을 변경하려면, 당신은 단지 정의하는 매크로를 호출 올바른 위치에 커서를시키는 것이다 whatever by default 후 커서를하자

C-x) 

로 정의를 종료 변경 e을 반복하여 한 번에 여러 번 매크로를 호출 할 수도 있습니다.

관련 문제