latex使用natbib+gbt7714包时如何不显示参考文献DOI号?

1. 说明

最近在弄毕业设计,个人不太喜欢用word写这种包含大量图片的东西,每次用word排版图片的时候都要抓狂了,经常乱跑。好在我对markdown比较了解,也听说过latex,于是搜索我们学校的latex毕设论文模板,还真找到了学长开源的github模板,便拿来使用。

现在学校的毕设论文要求有一定更新,参考文献中不需要显示DOI号了,所以需要想办法将其隐藏。

2. 问题查看

2.1. 原始模板

原始模板中采用了如下语句定义了参考文献部分的格式,使用的是natbib和gbt7714的格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% 使用gbt7714
\usepackage{natbib}
\usepackage[sort&compress]{gbt7714}
% 加载参考文献
\newcommand{\thesisreference}{
\titleformat{\chapter}[block]
{\fontsize{16pt}{16pt}\selectfont\heiti\thispagestyle{fancy}}
{\thechapter}{30pt}{}
\titlespacing{\chapter}{0pt}{0pt}{10pt} % 最后一个用于设置‘参考文献’和文献列表之间的空隙

\fontsize{10.5pt}{10.5pt}\selectfont{
\bibliographystyle{gbt7714-numerical}
\bibliography{reference}
}

\titleformat{\chapter}[block]
{\centering\fontsize{15pt}{15pt}\selectfont\heiti\thispagestyle{fancy}}
{\thechapter}{30pt}{}
\titlespacing{\chapter}{0pt}{0pt}{15pt}
}

2.2. 咨询AI

由于我在网上直接搜索没有找到解决方案,于是问起来AI,他们给出了下面两种方案

1
2
3
\usepackage[nodoi, sort&compress]{gbt7714}
% 或者
\usepackage[doi=false, sort&compress]{gbt7714}

经过测试,这两种方案都不行,虽然编译没有报错,但是DOI号还是显示出来了。

AI还给出了一个方案就是从natbib切换成biblatex,但是这个模板并不是我编写的,我不太清楚biblatex要怎么定义成现在这个样式,所以还是不做这种大规模修改了。

3. 问题解决

3.1. 方法一:取巧办法

首先说个取巧办法,那就是在参考文献列表的bib文件中把所有的doi =都给替换成note =(或者直接注释掉doi =),让它们直接不被当作DOI号,也就不会渲染出来,问题解决。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% 原始
@article{example,
author = {Author, A.},
title = {Title},
journal = {Journal},
year = {2023},
doi = {10.1234/example}
}

% 修改后
@article{example,
author = {Author, A.},
title = {Title},
journal = {Journal},
year = {2023},
note = {10.1234/example}
}

3.2. 方法二:修改bst文件

最开始我没有理解原始模板中\bibliographystyle{gbt7714-numerical}的含义,在搜索相关资料的时候无意间看到了一篇博客里面提到了\bibliographystyle会引用一个bst文件,果然,在模板目录中找到了gbt7714-numerical.bst文件,并在里面找到了输出DOI号的部分。

1
2
3
4
5
6
7
8
9
FUNCTION {output.doi}
{ doi empty$ not show.doi and
show.english.translation entry.lang lang.zh = and not and
{ new.block
format.doi output
}
'skip$
if$
}

这里面有一个判断条件是show.doi,它是一个整形变量,当这个变量为1,而且满足doi empty$ notDOI字段不为空的时候才会去显示DOI信息。

要做的就是在bst文件的开头针对show.doi变量的赋值部分,将原本赋值的1改成0就可以了!

1
2
3
4
5
FUNCTION {load.config}
{
% 原本赋值成了1(显示doi)
#1 'show.doi :=
}

修改后如下,将#1改成#0,即不显示DOI号。

1
2
3
4
FUNCTION {load.config}
{
#0 'show.doi :=
}

经过测试,确实不显示DOI号了!

image.png

这种方法肯定比把bib文件里面的doi =全都改成note =更好!