zepinglee / gbt7714-bibtex-style

GB/T 7714-2015 BibTeX Style
LaTeX Project Public License v1.3c
1.15k stars 196 forks source link

大括号导致作者姓名全部大写失效 #166

Open KingwithQueen opened 2 months ago

KingwithQueen commented 2 months ago

编译环境

宏包版本:gbt7714 v1.0 标注样式:super

描述问题

无法兼容NASA/ADS数据库上自动生成的引用代码。如图所示,有些姓名无法全部大写,经过测试这是由于author中作者的姓氏被大括号包围。而NASA/ADS数据库上全部都是这种引用风格,这是物理学和天文学专业经常使用的一个网站。可以考虑对此进行兼容吗?

bib 数据库代码:

@ARTICLE{1970A&A.....5..184H,
       author = {{Hagedorn}, R.},
        title = "{Thermodynamics of Strong Interactions at High Energy and its Consequences for Astrophysics}",
      journal = {Astronomy and Astrophysics},
         year = 1970,
        month = apr,
       volume = {5},
        pages = {184},
       adsurl = {https://ui.adsabs.harvard.edu/abs/1970A&A.....5..184H},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}

截图: image

zepinglee commented 2 months ago

BibTeX 中的大括号表示不改变其中的大小写,而且国标的机构作者需要此特性,所以无法在 BibTeX 这边处理。

建议使用其他工具处理该姓名。

Screenshot 2024-04-27 at 07 15 05
KingwithQueen commented 2 months ago

好的,话说我能否修改您的代码来兼容我提到或未提到的问题,并打包分发(在学校的QQ群,甚至学校官网和GITHUB上)?我会在分发的说明中注明bst的来源和作者等信息。我希望构建一个符合广西大学硕博毕业论文的模板。虽然学校要求是完全按照GB/T 7717标准的,但由于物理学院经常使用的一些网站所提供的bib引用代码不太规范,因此我可能需要做额外的修改或单独写一个文件来调整bib引用代码。我注意到许可中的第五条,所以这是否意味着我上述的计划是被默认许可的?

  1. If you are not the Current Maintainer of the Work, you may modify your copy of the Work, thus creating a Derived Work based on the Work, and compile this Derived Work, thus creating a Compiled Work based on the Derived Work.
stone-zeng commented 2 months ago

建议是在录入 bib 数据库处理大括号 / 大写小写问题,如果在 bst 里面修改,那真的需要使用小写的时候就没办法了。

KingwithQueen commented 2 months ago

建议是在录入 bib 数据库处理大括号 / 大写小写问题,如果在 bst 里面修改,那真的需要使用小写的时候就没办法了。

那个是NASA的数据库,我们肯定没法改。我也很头疼这个问题,最好的办法就是别用那个数据库提供的引用。毕竟有些期刊和NASA/ADS数据库提供的引用信息也不太兼容。但我想分发一个符合学校要求的通用latex模板给其他人使用,这个数据库我们整个系都在用,到时候很可能会出现大面积翻车。我原本计划是提供两个bst文件,一个保持默认不取修改大括号内的东西,另一个则强制全部大写。我刚才检查了一下,有些小语种名字确实出现了个别字母必须小写的情况。可能最好的办法还是在bib的数据源进行调整。

stone-zeng commented 2 months ago

我的意思是,不要自动获取 bib……

各个期刊、网站、数据库提供的 bib 格式都不尽相同,写论文的时候建议人工干预一下。

KingwithQueen commented 2 months ago

我的意思是,不要自动获取 bib……

各个期刊、网站、数据库提供的 bib 格式都不尽相同,写论文的时候建议人工干预一下。

好的,我明白了你意思了。我折腾了几天也发现这个问题了,全靠代码来解决不同网站提供bib格式不同的问题工程量太大了。

zepinglee commented 2 months ago

好的,话说我能否修改您的代码来兼容我提到或未提到的问题,并打包分发(在学校的QQ群,甚至学校官网和GITHUB上)?

当然可以。建议使用你们学校/学院的名称命名 .bst 文件。

另一个则强制全部大写。

应该也能实现,但是使用 bst 语言非常麻烦,大致是:

  1. 判断是否有 first name(排除 author = {{Online Computer Library Center}} 的情况);
  2. 判断 last name 两端是不是大括号。
  3. 检查两端的大括号是否匹配(排除 {\'E}e{\'e} 的情况)。
  4. 移除两端的大括号。
KingwithQueen commented 2 months ago

应该也能实现,但是使用 bst 语言非常麻烦,大致是:

  1. 判断是否有 first name(排除 author = {{Online Computer Library Center}} 的情况);
  2. 判断 last name 两端是不是大括号。
  3. 检查两端的大括号是否匹配(排除 {\'E}e{\'e} 的情况)。
  4. 移除两端的大括号。

bst 语言确实不好写,我也不是很熟悉这个语言。我目前有两个想法:

  1. 我应该可以写一个 C 或 Python 程序并打包成二进制文件(或修改sty文件在运行前先调用 python.exe 运行 Python 代码)。有办法让bst文件在处理bib文件中的引用数据前,先调用某个外部程序,而后接收外部程序返回的bib数据继续运行吗?
  2. 在latex中定义一个新的命令,引用bib文件时先调用外部程序,按照预先规则处理原始引用数据,并产生一个临时 .bib 文件,而后调用 \bibliography 加载临时 .bib文件。
zepinglee commented 2 months ago

刚刚想到可以使用 LaTeX 的 \MakeUppercase,这样不受 BibTeX 的大括号大小写规则影响。见 issue#166 分支。

测试效果:

https://github.com/zepinglee/gbt7714-bibtex-style/blob/e9aec44fc9318902921d10515cefb06403161a1c/test/testbst/2015-numerical.bbl#L856-L862

https://github.com/zepinglee/gbt7714-bibtex-style/blob/e9aec44fc9318902921d10515cefb06403161a1c/test/testbst/2015-numerical.bbl#L301-L305

KingwithQueen commented 2 months ago

刚刚想到可以使用 LaTeX 的 \MakeUppercase,这样不受 BibTeX 的大括号大小写规则影响。见 issue#166 分支。

测试效果:

https://github.com/zepinglee/gbt7714-bibtex-style/blob/e9aec44fc9318902921d10515cefb06403161a1c/test/testbst/2015-numerical.bbl#L856-L862

https://github.com/zepinglee/gbt7714-bibtex-style/blob/e9aec44fc9318902921d10515cefb06403161a1c/test/testbst/2015-numerical.bbl#L301-L305

非常感谢,试了一下可以