【记录】Latex|解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题

ops/2025/2/12 7:43:43/

参考:

  1. Sort References by Order of Appearance with LaTeX/BibTeX
  2. Ordering reference in bibTex - StackOverflow

文章目录

    • 问题描述
    • 解决方案 · 省流版
    • 解决方案 · 完整版《用LaTeX/BibTeX按出现顺序排序参考文献》
      • 1. 概述
      • 2. LaTeX 和 BibTeX
      • 3. 使用 LaTeX 进行参考文献样式化
        • 3.1. 使用 Natbib 包进行样式化
        • 3.2. 使用 BibLaTeX 包进行样式化
      • 4. 按照出现顺序排序引用
        • 4.1. 选择特定的参考文献样式(_unsrt_)
        • 4.2. 使用 _Makebst_ 工具
        • 4.3. 使用 _BibLaTeX_ 包工具
      • 5. 结论

问题描述

使用了 ACM-Reference-Format 之后,引用的顺序不符合原文的引用顺序了。

latex">\bibliographystyle{ACM-Reference-Format}
\bibliography{my-bib}

实际上,

ACM-Reference-Format 旨在按作者姓氏的字母顺序对条目进行排序。
所以会出现这种情况。

网上其他的解决方案有使用 \bibliographystyle{unsrt} 的,但是这种解决方案除了会解决顺序问题,还会导致引用格式发生改变,并不好用。现搬运一下英文的解决方案,并给出针对本问题的专属解决方案。

解决方案 · 省流版

为了让它不排序,有三种方案(下文会讲别的,其实就是翻译一下原文),我采用了最简单的一种(直接照着做就行了百分百解决):

  1. 第一步:找到 ACM-Reference-Format.bst 文件,这是引用格式的设置。
    在这里插入图片描述

  2. Ctrl+F 搜索大写的 SORT,并锁定大小写,如下图所示:
    在这里插入图片描述

  3. 注释掉所有的 SORT,如下图所示:
    在这里插入图片描述

  4. 回到原文中,随便新增一个 \cite,然后重新编译即可。

解决方案 · 完整版《用LaTeX/BibTeX按出现顺序排序参考文献》

1. 概述

在本教程中,我们将讨论如何在 LaTeX 文档中按出现顺序对参考文献进行排序。

我们将首先定义 BibTeX 以及它为 LaTeX 环境带来了什么。接下来,我们将概述主要类型的参考文献样式以及如何应用它们。然后,我们将识别按照使用的参考文献样式的出现顺序对参考文献进行排序的方法。在本教程结束时,我们将能够按照出现顺序显示我们的 LaTeX 文档中的参考文献,同时使用最合适的样式。

2. LaTeX 和 BibTeX

LaTeX 是一种用于文档准备的软件程序,它使用编译过程和输入(具有 .tex 扩展名的源文件)。它是一种排版工具,接受包含一组指令的纯文本文件,并在将其转换为格式化文档之前将其转换为一个 .pdf 文件。通常,它用于撰写论文。但是,它也可以用于制作演示文稿或绘制图表。该软件生成一个 .pdf 文件,可在屏幕上显示,以及一个 .ps 文件,可在打印机上打印:

在这里插入图片描述

通常,在编写 LaTeX 文档时,我们需要在文档中引用其他人的工作。为此,我们介绍 BibTeX 作为一个与 LaTeX 配合使用的文献工具,帮助我们构建引文和参考文献。为此,我们需要创建一个具有 .bib 扩展名的单独文件。在这个文件中,所有的参考文献都以特定格式存储。BibTeX 文件中的每个条目都拥有一个用于在源 .tex 文件中显示它的唯一键:

在这里插入图片描述

现在,我们应该提到,对参考文献进行样式或格式化是需要考虑的重要方面,当在 LaTeX 文档中对参考文献进行排序时。而手动完成这个过程远非实际。在这种情况下,与 LaTeX 一起使用 BibTeX 是一个非常吸引人的解决方案。我们应该提到,选择参考文献样式在很多情况下会影响排序过程。这就是为什么在进行排序之前有必要对参考文献样式进行概述的原因。

接下来,我们将看到 BibTeX 系统引入了几种工具来管理引文的样式,并以一种有效的方式按出现顺序对它们进行排序,从而避免参考文献样式和排序之间可能存在的任何冲突。

3. 使用 LaTeX 进行参考文献样式化

假设我们已经下载了一个会议 LaTeX 模板来撰写论文。我们将找到以下典型的文件扩展名:

  • 输入文件的示例:document.tex
  • 样式文档文件:style.cls
  • 样式参考文献文件:styleBiblio.bst

正如我们之前提到的,我们需要在项目文件夹中创建一个包含参考文献源的文档文件,比如一个 bibFile_.bib_ 文件。然后,我们倾向于选择参考文献样式,它代表了文档的两个主要部分的格式。这两个部分分别代表了正文内容中的缩略引文(document.tex)和参考文献列表中的相应条目(bibFile.bib)。后者允许应用于多个科学领域中的各种样式。它们可以大致分为数字引用系统(温哥华)和文本引用系统(哈佛)。

我们如何样式化我们的参考文献始终取决于我们正在撰写的文档类型以及我们正在使用的模板。例如,如果我们正在撰写学术/科学论文,我们会注意到每个会议、期刊或机构都有自己的参考文献规则和样式。

接下来,我们将介绍 LaTeX 提供的两个主要包来样式化引用,即 Natbib 和 BibLaTeX 包。

3.1. 使用 Natbib 包进行样式化

Natbib 是 LaTeX 中的一个文献管理包,它允许我们自定义引用。它提供了一套相当完整的格式。要实施该包,我们首先需要在 bibFile.bib 文件中插入引用条目。我们将在我们的 .bib 文件中使用三个引用来显示实施结果:

% ----- the bibFile.bib file -----@article{einstein,author =       "Albert Einstein",title =        "On the electrodynamics of moving bodies",journal =      "Annalen der Physik",volume =       "322",number =       "10",pages =        "891--921",year =         "1905"
}@book{latexcompanion,author    = "Michel Goossens and Frank Mittelbach and Alexander Samarin",title     = "The \LaTeX\ Companion",year      = "1993",publisher = "Addison-Wesley",address   = "Reading, Massachusetts"
}@article{cohen,author   = "P. J. Cohen",title    = "The independence of the continuum hypothesis",journal  = "Proceedings of the National Academy of Sciences",year     = 1963,volume   = "50",number   = "6",pages    = "1143--1148",
}

Then, we insert four code statements into the main document.tex file:

% ----- the document.tex file -----\documentclass{article}%% Imports the package natbib
\usepackage[square,numbers]{natbib}%% Sets the bibliography style
\bibliographystyle{abbrvnat}\title{An Article Title}
\begin{document}
\maketitle%% Prints a reference to the citation entry
Lorem ipsum dolor sit amet ... \cite{latexcompanion}. 
Nulla ... \cite{einstein} donec scelerisque semper rutrum. 
Nunc nec lacus in nisi \cite{cohen}.%% Imports the "bibFile.bib" file containing the bibliography sources
\bibliography{bibFile}\end{document}

输出的 .pdf 文件将以数字样式显示三个引用。正如我们所见,文档引用是按字母顺序排列的,基于引用键中的字母顺序:

在这里插入图片描述

Natbib 兼容标准的文献样式文件,例如 plain.bstharvardapalikechicagoastronauthordate 等。我们应该提到,该包提供了多种管理文本和作者-年份类型引用的方式,并为数字引用提供了样式文件,如 plainnatabbrvnatunsrtnat

此外,可以添加许多选项到 \usepackage 中。我们可以从值的列表中受益,例如 squarenumbers,分别用于启用方括号和数字引用。

3.2. 使用 BibLaTeX 包进行样式化

BibLaTeX 是一个完整而灵活的文献管理包,它能够在最小的努力下实现对参考文献部分的高度自定义。要实现它,我们需要在导言部分指定 .bib 文件的位置。此外,我们不应忘记插入额外的 \printbibliography 命令来显示参考文献部分:

% in the preamble 
%-----------------------------------
\documentclass{article}%% Imports the biblatex package
\usepackage[
backend=biber,
style=alphabetic,
sorting=ynt
]{biblatex}%% Imports the bibliography file "bibFile.bib" containing the sources of the citations
\bibliography{bibFile}
%-----------------------------------\begin{document}Lorem ipsum dolor sit amet ... \cite{latexcompanion}. 
Nulla ... \cite{einstein} donec scelerisque semper rutrum. 
Nunc nec lacus in nisi \cite{cohen}. %% Prints the list of cited references
\printbibliography\end{document}

The citations in the output document are displayed with a textual style:

在这里插入图片描述

事实上,在导入 BibLaTeX 包时可以添加许多选项。它们应该放在方括号内,并用逗号分隔。例如,style 选项确定了参考文献和引文的样式。示例中的 “alphabetic” 值定义了一个作者-年份引用系统。至于 sorting 选项,它指定用于对参考文献条目进行排序的度量。这将是达到我们主要目标的关键。

在下一节中,让我们介绍三种按照出现顺序排序引用的不同方法。

4. 按照出现顺序排序引用

如果我们使用数字引用样式,LaTeX 将默认应用基于字母顺序的文献排序。为了按出现顺序排序,即引用按时间顺序显示,我们有三种可能的选择。

4.1. 选择特定的参考文献样式(unsrt

按出现顺序排序引用的最简单方法是使用一个已经采用“无排序”的参考文献样式。更具体地说,我们应该使用 unsrt 样式,而不是使用 plain 样式。后者会以数字格式打印引文,并自动按升序排列。

为了演示它,让我们使用上一节中的相同文件,即 document.tex 作为主文件,bibFile.bib 作为 BibTeX 数据库。我们的 document.tex 文件是一个基本文件,不使用特定的包如 Natbib 或 BibLaTeX 进行参考文献管理。我们所需要做的就是在 document.tex 文件的末尾,即 \end{document} 行之前插入代码行 \bibliographystyle{unsrt}

% in the preamble 
%-----------------------------------
\documentclass{article}%-----------------------------------\begin{document}%% The added code line
\bibliographystyle{unsrt}\bibliography{bibFile}
\end{document}

It is as simple as that, and our bibliography will be sorted by appearance:

在这里插入图片描述
然而,这种方法的问题在于格式方面。被迫使用特定样式以达到排序标准的限制了我们选择最方便的引文样式。unsrt 提供的格式并不适用于所有类型的文档。在学术写作的情况下,它与 ACM 出版物很合适。而如果我们为 IEEE 出版物撰写科学论文,理想情况下可以考虑 ieeetr 样式。

总的来说,在结合样式和排序时,我们应该考虑不包括排序的样式值。例如,如果我们使用 Natbib 包进行样式设置,那么满足条件的是 unsrtnat 样式值。

然而,如果我们对格式样式仍然不满意,让我们继续探索本教程的其余部分。我们可能会找到更好的选择,以便在解决排序问题的同时选择更广泛的参考文献样式。

4.2. 使用 Makebst 工具

Makebst 工具是一个 LaTeX 包,它生成定制的参考文献样式。它允许我们设计自己的参考文献样式,同时管理排序偏好。对于这种替代方案,我们将在项目文件夹中有一个 .bst 文件,例如 plain.bst

在数字式参考文献样式的情况下,默认的排序(按字母顺序)将被执行。因此,我们需要访问 .bst 文件并查找包含 SORT 指令的代码片段,并将其注释掉。这样,就不会进行排序,这恰好意味着按出现顺序排序:

% ----- the plain.bst file -----
%% ITERATE {presort}
%% SORT

如果我们的 .bst 文件非常复杂,这在大多数情况下是真实的,或者如果我们没有使用这个工具进行参考文献样式设置,那么让我们考虑下一个用于引用排序的替代方案。

4.3. 使用 BibLaTeX 包工具

另一个可能的解决方案在于使用 BibLaTeX 包。正如我们在上一节中提到的,这个工具为我们提供了大量且灵活的参考文献样式选择。要将引用按时间顺序排列,我们所需做的就是在 \usepackage 行代码中定义选项 sorting=none。这将禁用按字母顺序排序,并显示基于出现顺序的排序。

这种方法的优点在于不限制格式选择。事实上,我们可以通过在上传 BibLaTeX 包时为选项 style 定义不同的值来更改参考文献的样式。许多数字引用的例子都可以找到,比如 chem-acsieeenaturenejm 等。我们只需要保持 sorting 选项的 none 值不变。

例如,我们可以将 “nature” 作为参考文献样式值:

\usepackage[style=nature, sorting=none]{biblatex}

输出的文档显示按出现顺序排序的数字引用。此外,我们可以清楚地注意到与之前示例相比,参考文献样式已经改变:

在这里插入图片描述

5. 结论

在本教程中,我们讨论了如何在 LaTeX 文档中按出现顺序对引用进行排序。此外,我们还介绍了几种与排序选项配合使用的参考文献样式管理工具。


http://www.ppmy.cn/ops/36525.html

相关文章

android native开发

framwork 一些重要的流程都是要放到native中做的 原因也很简单,效率,尤其是针对性能优化方面的,更离不开native开发 目前针对native开发也回顾下,总结下经验 1 jni开发有两种,app端一般是静态模式,要有jav…

Azure AKS日志查询KQL表达式

背景需求 Azure(Global) AKS集群中,需要查询部署服务的历史日志,例如:我部署了服务A,但服务A的上一个版本Pod已经被杀掉由于版本的更新迭代,而我在命令行中只能看到当前版本的pod日志&#xff…

《QT实用小工具·五十九》随机图形验证码,带有一些可人的交互与动画

1、概述 源码放在文章末尾 该项目实现了可交互的动画验证码控件,趣味性十足: 字符变换动画 噪音动画 可拖动交互 项目demo演示如下所示: 项目部分代码如下所示: #ifndef CAPTCHAMOVABLELABEL_H #define CAPTCHAMOVABLELABEL…

为什么现在散户在加密市场赚不到钱了?

为什么总有人说这个周期已经结束了?为什么每个人都感到痛苦?我们可以将所有问题归结为:在当前的市场结构下,散户再也赚不到真正的钱了。 关于回归本源、摆脱当前周期的一些杂谈 为什么本轮行情中没有散户的身影,答案…

纯血鸿蒙APP实战开发——短视频切换实现案例

短视频切换实现案例 介绍 短视频切换在应用开发中是一种常见场景,上下滑动可以切换视频,十分方便。本模块基于Swiper组件和Video组件实现短视频切换功能。 效果图预览 使用说明 上下滑动可以切换视频。点击屏幕暂停视频,再次点击继续播放…

Vulnhub项目:ICA: 1

1、靶机介绍 靶机地址:ICA: 1 ~ VulnHub 2、渗透过程 首先,部署好靶机后,进行探测,发现靶机ip和本机ip,靶机ip156,本机ip146。 然后查看靶机ip有哪些端口,nmap一下。 出现22、80、3306端口&a…

PHP 匿名函数和闭包在数据结构中的应用

匿名函数和闭包在数据结构处理中的应用php 中的匿名函数和闭包可用于处理数组、链表和队列等数据结构。针对数组,匿名函数可用于过滤元素;针对链表,闭包可用于创建节点;针对队列,匿名函数和闭包可实现 fifo 队列操作。…

Python基础学习之装饰器

大家好,今天我想和大家分享一下Python中一个非常强大且优雅的特性——装饰器(Decorators)。装饰器在Python中是一种高级语法,它允许你在不修改函数或类的情况下,为其添加额外的功能。这不仅让代码更加整洁,…