欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单Python函数将SCI论文中WORD版参考文献改为LaTeX格式

程序员文章站 2023-12-25 14:11:33
...

投出的某sci论文被reviewer指出公式的format不大行,其实自己之前在用word调的时候也发现了这个问题,于是打算改头换面,使用latex来重新写一遍。而LaTeX的引用格式和word是不一样的(至少调格式的方式不同),bibtex是很常用的一种方式了,但是出于某些原因十分赶时间,对文中五十余篇论文去重新找各自的bibtex格式,然后再挨个照着之前word版补充一些东西,实在太费时间。那么如何“废物利用”呢,即将原来的word版的已经写好的内容直接copy过来呢?

word版的内容拿过来自然没问题,但是格式就得调,而一个个调格式显然也是效率很低的行为,因而考虑使用python写个程序进行自动化操作。
首先,不建议大家使用这种方法。这是因为一我挺赶时间的,二是之前word版已经写好了,参考文献基本上不会再改动。更建议使用bibtex。
其次,同样由于这只是临时使用的简单脚本且赶时间,就没有去认真设计变量名,代码可读性不强,不过不大长应该不影响理解叭。将就看看。
最后,在介绍函数使用方法之前,需要提醒一下,下面代码考虑的情况并不完整,因此使用其生成latex版参考文献后仍需要人工验证一遍其格式是否正确(虽然不是100%正确但是也省了很多重复劳动了)。

示例输入:

t = '[1]	B. Ji, Y. Han, P. Li, et al., “Research on secure transmission performance of electric vehicles under Nakagamim channel,” IEEE Trans. Intell. Transp. Syst., pp 1-11, Nov. 2020.'
get_output(0, t)

输出为:

	\bibitem{[1]}
	B. Ji, Y. Han, P. Li, \emph{et al}., ``Research on secure transmission performance of electric vehicles under Nakagamim channel,"\emph{ IEEE Trans. Intell. Transp. Syst.}, pp 1-11, Nov. 2020.

作用为:

  1. 修改引号。latex中的引号为``xxx",而非word中的"xxx"
  2. 设置斜体。比如将et al设置为斜体,将期刊名设置为斜体,或者如果是会议的话,将in之后的会议名设为斜体。
  3. 拼接为latex中引用格式,包含\bibitem{[idx]},其中idx为函数输入给出,可自定义。另外加上了\n,\t等格式控制。

贴上代码:

def get_output(idx, t):
    # 用正则,去掉开头序号,保存于t内
    pt = re.compile(r'\[\d+\](\s|\t)')
    t = ''.join(re.split(pt, t))
    # 居然有中文引号...
    t = t.replace("“", '"')
    t = t.replace("”", '"')
    # 为其添加样式
    output = '\t' + r'\bibitem{' + "[" + str(idx + 1) + "]" + '}'
    output += '\n'

    # 添加斜体
    tt = t.split('"')
    if len(tt) >= 3:
        g = tt[0] + '"'
        g += tt[1] + '"'
        ttt = tt[2].split(',', 1)
        if 'in ' in ttt[0]:
            tttt = ttt[0].split('in ', 1)
            g += tttt[0] + 'in '
            g += r'\emph{' + tttt[1] + r'}' + ','
        else:
            g += r'\emph{' + ttt[0] + r'}' + ','
        g += ttt[1]
        output += g
    else:
        output += '\t' + t
    output = output.replace('et al', r'\emph{et al}')
    output = output.replace(r'&', r'\&')
    output = output.replace(r'"', r'``',1)
    return output

上一篇:

下一篇: