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

Bri*_*unt 5 regex quotes latex

鉴于用正常引号编写的文档,例如

Ben said "buttons, dear sir".
I replied "Did you say 'buttons'?" to him.
Run Code Online (Sandbox Code Playgroud)

有什么方法可以用适当的语义将这些东西变成LaTeX引号.即

Ben said ``buttons, dear sir''.
I replied ``Did you say `buttons'?'' to him.
Run Code Online (Sandbox Code Playgroud)

所以LaTeX产生:

Ben said “buttons, dear sir”.
I replied “Did you say ‘buttons’?”
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是转向正则表达式.但是,我没有从谷歌或正则表达式库获得任何点击"LaTeX引用正则表达式",当然"TeX引用正则表达式"似乎返回太多.

谢谢.

dmc*_*kee 5

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

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

最大的问题是要与识别单个关联"'"未成对的S ---因为是收缩(在"'""don't"不应改变,并且不应该被配对)。


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

input:       text+
text:        uquote|squote|dquote
squote       "'" text "'"
dquote       """ text """
uquote:      [contraction|.]+
contraction: [A-Za-z]+ "'" [A-Za-z]+
Run Code Online (Sandbox Code Playgroud)

这仅限于"'"在单词中间有 的缩写。所有关联的操作将只回显输入,除了squotedquote术语适当地替换引号。


我使用了正则表达式,然后是人工修复,这是一个相当简单的一次性工作,但这对于正在进行的工作来说是劳动密集型的。