정기적 인 따옴표 (예 : ')를 라텍스/텍스 인용문으로 어떻게 돌릴 수 있습니까 (예 :`,``' ')

StackOverflow https://stackoverflow.com/questions/346567

  •  19-08-2019
  •  | 
  •  

문제

정상적인 인용문으로 작성된 문서가 주어졌습니다

Ben said "buttons, dear sir".
I replied "Did you say 'buttons'?" to him.

적절한 의미론으로 이런 종류의 것들을 라텍스 인용문으로 바꿀 수있는 방법. 즉

Ben said ``buttons, dear sir''.
I replied ``Did you say `buttons'?'' to him.

라텍스가 생산합니다.

Ben said “buttons, dear sir”.
I replied “Did you say ‘buttons’?”

나의 첫 번째 생각은 성폭력으로 돌아가는 것입니다. 그러나 "라텍스 인용문 정규 표현"에 대한 Google 또는 Regex 라이브러리에서 히트를받지 못하고 물론 "Tex Quotes Regal Expression"은 너무 많이 돌아 오는 것 같습니다.

고맙습니다.

도움이 되었습니까?

해결책

일반적 으로이 문제는 외모보다 어렵습니다.

가장 간단한 경우 ~할 수 있다 정기적 인 표현으로 대우 받으십시오. 그러나보다 일반적인 상황을 위해서는 재귀 파서를 구축해야합니다. 정규 표현은 중첩이없는 경우에만 작동합니다.

큰 문제는 단일 식별과 관련이있는 것입니다. "'"짝을 이루지 않은 s --- 수축과 같이 ( "'" 안에 "don't" 변경해서는 안되며 그리고 쌍을 이루지 않아야합니다).


사용 가능한 EBNF 설명을 쓸 수 있는지 확인하십시오.

input:       text+
text:        uquote|squote|dquote
squote       "'" text "'"
dquote       """ text """
uquote:      [contraction|.]+
contraction: [A-Za-z]+ "'" [A-Za-z]+

이는 수축이있는 것으로 제한됩니다 "'" 단어의 중간에. 모든 관련 조치는 squote 그리고 dquote 용어는 인용문을 적절하게 바꿉니다.


나는 정규 표현과 상당히 단순한 일회성을 위해 휴먼 픽스 업을 사용했지만, 이는 진행중인 작업에 노동 집약적 일 것입니다.

다른 팁

다음은 라텍스 문서에 사용하는 Python Regex입니다.

'([ \w-]+)'", " `\\1'

라텍스 파일에 Regex를 적용하는 Python 스크립트가 있습니다 (여기). 대부분의 시간에 작동합니다. 행복한 조판! :)

다음은 여러분이 원하는 일에 충분할 수있는 일부 Perl 정규식 대체물입니다.

s/"(\w)/``$1/g;
s/'(\w)/`$1/g;
s/([\w\.?!])"/$1''/g;

이 코드는 단일 또는 이중 인용문과 영숫자 문자가 따옴표를 시작한다고 가정합니다. 또한, 영숫자 또는 구두점 마크에 따른 이중 인용문이 인용문을 종료한다고 가정합니다. 이러한 가정은 아마도 대부분의 경우에도 사실이지만 예외가있을 수 있습니다.

입력에 감사드립니다 - 도움이되고 감사합니다.

나는 또한 CPAN에서 이것을 발견했습니다 라텍스 :: encode.pm:

    # A single or double quote before a word character, preceded
    # by start of line, whitespace or punctuation gets converted
    # to "`" or "``" respectively.

    $text =~ s{ ( ^ | [\s\p{IsPunct}] )( ['"] ) (?= \w ) }
              { $2 eq '"' ? "$1``" : "$1`" }mgxe;

    # A double quote preceded by a word or punctuation character
    # and followed by whitespace or end of line gets converted to
    # "''".  (Final single quotes are represented by themselves so
    # we don't need to worry about those.)

    $text =~ s{ (?<= [\w\p{IsPunct}] ) " (?= \s | $ ) }
              { "''" }mgxe

이런 종류의 작업에 정기적 인 표현을 사용하지 마십시오!

어쩌면 당신은 영감을 얻을 수 있습니다 smartypants?

나는이 문제에 대한 답을 찾고 있었고 오늘 약간의 LISP를 배우기로 결정했습니다. 이 lisp 함수를 내 ~/.emacs 파일에 넣은 다음 M-x tex-set-quotes:

(defun tex-set-quotes ()  
  (interactive)  
  (latex-mode)  
  (while (search-forward "\"" nil t)  
   (replace-match "" nil t)  
   (tex-insert-quote nil)))

간단히,``````, 인용문을 열고 ''닫기에 사용하십시오.

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