zepinglee / gbt7714-bibtex-style

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

中文文献标题与标识码之间有空格 #74

Closed TomBener closed 3 years ago

TomBener commented 3 years ago

编译环境

宏包版本:gbt7714 v2.1 标注样式:authoryear TeX Live: MacTeX 2020 System: macOS Big Sur 11.1

描述问题

国标第 13 页 9.2 节「著者-出版年制」部分例子中,中文文献标题与文献标识码之间没有空格,而编译后存在空格,希望去掉这个空格。

MWE:

TeX 代码:

\documentclass[12pt, a4paper]{ctexart}
\usepackage{gbt7714}
\bibliographystyle{gbt7714-author-year}

\usepackage[
    colorlinks=true,
    citecolor=blue,
    linktocpage
]{hyperref}

\begin{document}

\section*{测试参考文献}

引用中文文献\citep{baizhongke2006,chenligen2016}。\cite{creswell2014}引用英文文献\citep{ahmad2006,barnett2000}

\bibliography{ref}

\end{document}

bib 数据库代码:

@article{baizhongke2006,
  title = {{论矿区土壤环境问题}},
  author = {{白中科} and {付梅臣} and {赵中秋}},
  year = {2006},
  pages = {1122--1125},
  journal = {生态环境},
  key = {bai zhong ke  fu mei chen  zhao zhong qiu},
  number = {05}
}

@article{chenligen2016,
  title = {{采煤塌陷区生态改造利益构成及分配研究}},
  author = {{陈利根} and {童尧} and {龙开胜}},
  year = {2016},
  volume = {30},
  pages = {81--89},
  journal = {中国土地科学},
  key = {chen li gen  tong yao  long kai sheng},
  number = {10}
}

@article{ahmad2006,
  title = {Engendering {{Mining Communities}}: {{Examining}} the {{Missing Gender Concerns}} in {{Coal Mining Displacement}} and {{Rehabilitation}} in {{India}}},
  author = {Ahmad, Nesar and {Lahiri-Dutt}, Kuntala},
  year = {2006},
  volume = {10},
  pages = {313--339},
  publisher = {{Routledge}},
  doi = {10.1177/097185240601000302},
  journal = {Gender, Technology and Development},
  number = {3}
}

@article{barnett2000,
  title = {Destabilizing the {{Environment}}-{{Conflict Thesis}}},
  author = {Barnett, Jon},
  year = {2000},
  volume = {26},
  pages = {271--288},
  publisher = {{Cambridge University Press}},
  journal = {Review of International Studies},
  number = {2}
}

@book{creswell2014,
  title = {Research Design: Qualitative, Quantitative, and Mixed Methods Approaches},
  author = {Creswell, John W.},
  year = {2014},
  edition = {4th ed},
  publisher = {{SAGE Publications}},
  address = {{Thousand Oaks}},
  lccn = {H62 .C6963 2014}
}

截图:

CleanShot 2020-12-23 at 14 56 55@2x

zepinglee commented 3 years ago

这是 xeCJK 在中西文之间自动加的空白,在 bbl 文件可以看到是没有空格的。

国标在空格的处理上很不严谨,见讨论 #70 。就按目前这样处理了。

hushidong commented 3 years ago

文献类型标识的中括号前无论是西文还是中文都没有空格。

@zepinglee 给他加个\mbox{}之类的去掉xecjk加的空格。只是加了让bbl又复杂了些。

@TomBener 你自己也可以在bbl中处理,加个mbox将之删除。

zepinglee commented 3 years ago

与其用各种办法去掉空格,我宁愿中、英文统一加上空格。

hushidong commented 3 years ago

是的,到了一定阶段了就这样,不想动了。好在tex是自由的,用户可以自己动手。

@zepinglee 你之前说要写个程序把csl样式结合起来,现在怎么样了?

zepinglee commented 3 years ago

是的,到了一定阶段了就这样,不想动了。好在tex是自由的,用户可以自己动手。

@zepinglee 你之前说要写个程序把csl样式结合起来,现在怎么样了?

感觉需要实现个 citeproc-lua,咕了

TomBener commented 3 years ago

@TomBener 你自己也可以在bbl中处理,加个mbox将之删除。

@hushidong 请问在 bbl 文件里怎么加 mbox 啊?可以在 bst 文件里修改吗?谢谢!

hushidong commented 3 years ago

@TomBener 在生成bibtex编译后的bbl中修改,在[J]前加,比如“你好\mbox[J]”

TomBener commented 3 years ago

@TomBener 在生成bibtex编译后的bbl中修改,在[J]前加,比如“你好\mbox[J]”

@hushidong 这样需要一个一个地加啊,感觉有点麻烦,有简便一点的方法吗 😂

hushidong commented 3 years ago

文本处理替换一下就行,自然字符串不好表达就用正则表达式,应该很方便。

利用notepad++处理替换,勾选正则, 查找目标: (\[[A-Z]\]) 替换 \\mbox\{\}$1

比如:

图片

hushidong commented 3 years ago

是的,到了一定阶段了就这样,不想动了。好在tex是自由的,用户可以自己动手。 @zepinglee 你之前说要写个程序把csl样式结合起来,现在怎么样了?

感觉需要实现个 citeproc-lua,咕了

嗯,年底是不是很忙,验收项目很多吧?不介意了解下清华的情况吧

zepinglee commented 3 years ago

@TomBener 你自己也可以在bbl中处理,加个mbox将之删除。

@hushidong 请问在 bbl 文件里怎么加 mbox 啊?可以在 bst 文件里修改吗?谢谢!

我晚上改一下,加个选项来控制把。

TomBener commented 3 years ago

我下载了 v2.0.2 版本的 gbt7714-author-year.bst,编译之后没有这个空格的问题。

CleanShot 2020-12-23 at 18 34 57@2x

hushidong commented 3 years ago

@zepinglee 不知你有没有将那些选项放到tex中加载gbt7714红包时来设置的想法,避免在bst中修改。

一种思路是,在设置选项后,你把他转换为一些数据,存到一个辅助文件中,然后bst除了读bib文件中还把这个辅助文件中的信息读进来,从而完成控制。

好处是在tex中设置不用管bst了。坏处是有些人喜欢单用bst,这么处理后就必须结合红包使用了。

考虑bst的易用性,所以我一直也没有提。

zepinglee commented 3 years ago

我下载了 v2.0.2 版本的 gbt7714-author-year.bst,编译之后没有这个空格的问题。

这个反复改来改去的,总会有不同意见。

zepinglee commented 3 years ago

不知你有没有将那些选项放到tex中加载gbt7714红包时来设置的想法,避免在bst中修改。

一种思路是,在设置选项后,你把他转换为一些数据,存到一个辅助文件中,然后bst除了读bib文件中还把这个辅助文件中的信息读进来,从而完成控制。

好处是在tex中设置不用管bst了。坏处是有些人喜欢单用bst,这么处理后就必须结合红包使用了。

考虑bst的易用性,所以我一直也没有提。

BibTeX 无法读外部文件。

倒是可以把宏定义在 \begin{thebibliography} 后面,但是这样会弄得很复杂。比如姓名 Foo et al. 后需要使用句点,BibTeX 有个函数 add.period$ 可以自动判断前面的内容是否以句点结尾,从而避免重复句点。但是如果改成用宏控制,比如 \bibauthor{Foo et al.} 或者 \bibauthor{Foo} \etal,BibTeX 就没法控制了。所以我一般避免用宏控制内容。

zepinglee commented 3 years ago

@TomBener 在 b01b14f 中修复。

zepinglee commented 3 years ago

另外 \allowbreak 的效果比 \mbox{} \relax要好,因为这俩取消了空白,但是不能在这里断行。

hushidong commented 3 years ago

不知你有没有将那些选项放到tex中加载gbt7714红包时来设置的想法,避免在bst中修改。 一种思路是,在设置选项后,你把他转换为一些数据,存到一个辅助文件中,然后bst除了读bib文件中还把这个辅助文件中的信息读进来,从而完成控制。 好处是在tex中设置不用管bst了。坏处是有些人喜欢单用bst,这么处理后就必须结合红包使用了。 考虑bst的易用性,所以我一直也没有提。

BibTeX 无法读外部文件。

倒是可以把宏定义在 \begin{thebibliography} 后面,但是这样会弄得很复杂。比如姓名 Foo et al. 后需要使用句点,BibTeX 有个函数 add.period$ 可以自动判断前面的内容是否以句点结尾,从而避免重复句点。但是如果改成用宏控制,比如 \bibauthor{Foo et al.} 或者 \bibauthor{Foo} \etal,BibTeX 就没法控制了。所以我一般避免用宏控制内容。

把文件写成bib就可以了,bst可以读多个bib文件吧,这是有现成例子的,biblatex用bibtex后端时就是这么处理的。

TomBener commented 3 years ago

@TomBener 在 b01b14f 中修复。

感谢!