8

通常の引用符で書かれたドキュメントを考えると、例えば

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

適切なセマンティクスを使用して、これらの種類のものをLaTeX引用符に変換する方法は何ですか。すなわち

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

LaTeXが生成するように:

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

私の最初の考えは、正規表現に目を向けることです。ただし、「LaTeXは正規表現を引用します」について、Googleまたは正規表現ライブラリからヒットを取得していません。もちろん、「TeXは正規表現を引用します」は多すぎるようです。

ありがとうございました。

4

7 に答える 7

5

一般に、この問題は見た目よりも難しいです。

最も単純なケースは正規表現で処理できますが、より一般的な状況では、ほぼ確実に再帰パーサーを作成する必要があります。正規表現は、ネストがない場合にのみ機能します。

大きな問題は、ペアになっていない単一の s を識別することに関連付けられます"'"---収縮と同様に ( "'"in"don't"を変更しはならず、ペアにするべきではありません)。


使用可能な EBNF 記述を記述できるかどうか見てみましょう。

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

"'"これは、単語の途中にある短縮形に限定されます。squote関連するすべてのアクションは、必要に応じて引用符をanddquote用語で置き換えることを除いて、入力をエコーするだけです。


かなり単純な 1 回限りの修正のために、正規表現を使用した後、人間による修正が行われましたが、それは継続的な作業には多大な労力を要します。

于 2008-12-06T18:56:43.250 に答える
2

これは、Latex ドキュメントに使用する python 正規表現です。

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

ラテックス ファイルに正規表現を適用する python スクリプトがあります (こちら)。ほとんどの場合動作します。幸せな組版! :)

于 2010-12-26T22:52:28.783 に答える
1

ここでは、やりたいことに十分対応できる Perl の正規表現の置換をいくつか示します。

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

このコードは、一重引用符または二重引用符の後に英数字が続くと、引用符が始まると想定しています。また、英数字または句読点に続く二重引用符は、引用符を終了するものと見なされます。これらの仮定はほとんどの場合正しいと思われますが、例外もあるかもしれません。

于 2008-12-06T18:56:48.383 に答える
1

ご意見ありがとうございます - 役に立ち、感謝しています。

CPANのLatex::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
于 2008-12-06T19:17:05.097 に答える
0

この種のタスクには正規表現を使用しないでください。

SmartyPantsからインスピレーションを得られるかもしれません。

于 2008-12-06T19:23:17.720 に答える
0

I was looking for an answer to this problem and decided to learn a little lisp today. I put this lisp function in my ~/.emacs file and then run with 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)))
于 2010-12-18T02:48:28.067 に答える
-4

簡単に言うと、引用の開始には「」を使用し、終了には「」を使用します。

于 2011-12-13T01:16:50.860 に答える