给出用正常引号编写的文档,例如
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引用正则表达式”似乎返回太多。
谢谢。
答案 0 :(得分:4)
一般来说,这个问题比它看起来更难。
最简单的情况可以用正则表达式处理,但是对于更一般的情况,你几乎肯定需要构建一个递归解析器:正则表达式只有在没有嵌套的情况下才能工作。
最大的问题是识别未配对的单个"'"
- 与收缩一样("'"
中的"don't"
不应更改,和不应该配对。
让我们看看我们是否可以编写可用的EBNF描述:
input: text+
text: uquote|squote|dquote
squote "'" text "'"
dquote """ text """
uquote: [contraction|.]+
contraction: [A-Za-z]+ "'" [A-Za-z]+
仅限于在单词中间有"'"
的收缩。除了squote
和dquote
条款在适当时替换引号外,所有相关操作都只会回显输入。
我使用正则表达式,然后使用人工修复程序进行相当简单的一次性操作,但对于正在进行的工作而言,这将是劳动密集型的。
答案 1 :(得分:2)
答案 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)
简单地说,使用``用于打开引用,用''用于关闭