如何将常规引号(即',')转换为LaTeX / TeX引号(即`',``'')

时间:2008-12-06 18:23:39

标签: regex latex quotes

给出用正常引号编写的文档,例如

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引用正则表达式”的任何点击,当然“TeX引用正则表达式”似乎返回太多。

谢谢。

7 个答案:

答案 0 :(得分:4)

一般来说,这个问题比它看起来更难。

最简单的情况可以用正则表达式处理,但是对于更一般的情况,你几乎肯定需要构建一个递归解析器:正则表达式只有在没有嵌套的情况下才能工作。

最大的问题是识别未配对的单个"'" - 与收缩一样("'"中的"don't"不应更改,不应该配对。


让我们看看我们是否可以编写可用的EBNF描述:

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

仅限于在单词中间有"'"的收缩。除了squotedquote条款在适当时替换引号外,所有相关操作都只会回显输入。


我使用正则表达式,然后使用人工修复程序进行相当简单的一次性操作,但对于正在进行的工作而言,这将是劳动密集型的。

答案 1 :(得分:2)

这是我用于Latex文档的python正则表达式:

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

有一个python脚本将正则表达式应用于latex文件(here)。大部分时间都有效。快乐排版! :)

答案 2 :(得分:1)

以下是一些Perl正则表达式替换,可能足以满足您的需要。

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

代码假定单引号或双引号后跟字母数字字符开始引用。此外,它假定字母数字字符或标点符号后面的双引号结束引号。这些假设在大多数情况下可能都是正确的,但可能有例外。

答案 3 :(得分: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

答案 4 :(得分:0)

不要将正则表达式用于此类任务!

也许你可以从SmartyPants获得灵感?

答案 5 :(得分:0)

我一直在寻找这个问题的答案,并决定今天学习一点点。我将此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)))

答案 6 :(得分:-4)

简单地说,使用``用于打开引用,用''用于关闭