كيف يمكن للمرء أن تتحول نقلت العادية (أي، ") إلى مطاط ونقلت / تكس (أي`، `` '')

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’?”

وفكرتي الأولى هي أن أنتقل إلى التعابير المنطقية. ومع ذلك، أنا لا تحصل على أي ضربات من جوجل أو المكتبات التعبير العادي ل "نقلت مطاط التعبير العادية"، وبالطبع "تكس يقتبس التعبير العادي" يبدو أن العودة كثيرة جدا.

وشكرا لكم.

هل كانت مفيدة؟

المحلول

في عام، هذه المشكلة هو أصعب مما يبدو.

وأبسط الحالات <م> يمكن أن تعامل مع التعابير العادية، ولكن في حالات أكثر العامة التي من شبه المؤكد بحاجة إلى بناء محلل العودية: سوف التعبير العادية تعمل فقط إذا لم يكن هناك تداخل

والمشكلة الكبرى ستكون المرتبطة بتحديد "'"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 استبدال علامات الاقتباس حسب الاقتضاء.


ولقد استخدمت تعبيرات عادية تليها الإصلاح المنبثقة الإنسان لبسيطة الى حد كبير لمرة واحدة، ولكن ذلك سيكون كثيفة العمالة للالعمل الجاري.

نصائح أخرى

وهنا هو التعبير المعتاد الثعبان التي تستخدم لوثائق مطاط لي:

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

وهناك بيثون السيناريو الذي ينطبق التعبير المعتاد على ملف اللاتكس ( هنا ). يعمل معظم الوقت. التنضيد سعيد! :)

وهنا بعض بيرل استبدال التعبير العادية التي قد تكون جيدة بما فيه الكفاية على ما تريد القيام به.

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

والرمز يفترض أن علامة اقتباس مفردة أو مزدوجة تليها الطابع أبجدية يبدأ الاقتباس. أيضا، فإنه يفترض أن اقتباس مزدوجة بعد حرف أو علامات الترقيم علامة أبجدية ينتهي الاقتباس. هذه الافتراضات هي على الارجح الحقيقية أكثر من مرة ولكن قد تكون هناك استثناءات.

وشكرا للمدخلات - مفيدة وتقدير

وجئت أيضا عبر هذه، من <أ href على كبان ل= "http://search.cpan.org/src/ANDREWF/LaTeX-Encode-0.03/lib/LaTeX/Encode.pm" يختلط = "نوفولو noreferrer "> مطاط :: 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

لا تستخدم التعابير العادية لهذا النوع من مهمة!

وربما يمكنك الحصول على بعض الإلهام من محنك ؟

وكنت أبحث عن إجابة لهذه المشكلة، وقررت أن تتعلم قليلا لثغة اليوم. أضع هذه الوظيفة ثغة في بلدي ~ / ملف .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