由于 .bib 中的姓氏通常全部用大写字母表示,例如 VICTORIA,但大多数期刊不希望姓氏全部用大写字母表示,因此让 .bst 能够“t”更改姓氏以在参考文献中获取 Victoria 是很有用的。
我可以用类似这样的代码对一个.bst进行操作
t #1 "{vv~}{ll}" format.name$
uppercase.name
{ "t" change.case$ }
'skip$
if$
t #1 "{~f{~}}" format.name$ *
t #1 "{, jj}" format.name$ *
但无法使其工作,model6-num-names.bst
可从爱思唯尔 邮编
我尝试的主要部分是从以下方面进行改变:
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
"," *
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{
" " * bbl.etal *
}
{ " " * t * }
if$
}
if$
}
't
if$
到:
nameptr #1 >
{
namesleft #1 >
{ ", " * t #1 "{vv~}{ll}" format.name$
"t" change.case$
t #1 "{~f{~}}" format.name$ *
t #1 "{, jj}" format.name$ * }
{
"," *
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{
" " * bbl.etal *
}
{ " " * t #1 "{vv~}{ll}" format.name$
"t" change.case$
t #1 "{~f{~}}" format.name$ *
t #1 "{, jj}" format.name$ * }
if$
}
if$
}
't
if$
由于 model6-num-names.bst 不需要 'uppercase.name' 函数,因此 'uppercase.name' if$ 部分简化为 "t" change.case$。
.bib 是:
@article{srarticle1p, author = {JEREMY, George and MICHAEL, JACKSON}, title = {The art of writing }, journal = {Software Engineering}, year = {2018}, month = {}, volume = {19}, number = {345}, pages = {1234}, doi = {}, } @book{Strunk2000, author = {VICTORIA, Water and WHITE, Edison}, title = {The elements of style}, edition = {4th}, editor = {}, translator = {}, address = {New York}, publisher = {Longman}, year = {2000}, month = {}, volume = {}, number = {}, pages = {}, isbn = {}, doi = {}, }
但姓氏仍然全部大写:
我曾尝试将“t”change.case$ 放置在 .bst 周围,但仍然没有效果。
我们的专家能否指出正确的方法,即使在 .bib 中姓氏字母全部大写,也只保留姓氏首字母大写,其他字母小写?“t”会改变.case$ 姓氏吗?
答案1
model6-num-names.bst
在几个地方调用format.names$
。此外,有些用法format.names$
实际上并未用于在输出中打印名称(这是您在问题中显示的已修改部分的情况:那里的代码执行了“et al.”处理,但没有打印名称)。
我们需要修改
FUNCTION {format.names}
FUNCTION {format.full.names}
FUNCTION {format.lab.names}
在 diff 中显示必要的更改比用很多文字描述它们稍微方便一些
--- model6-num-names.bst 2019-11-09 12:11:53.818725800 +0100
+++ model6-num-names-nocap.bst 2019-11-09 12:08:38.767078500 +0100
@@ -1,3 +1,12 @@
+%%%% `model6-num-names-nocap.bst'
+%%%% for https://tex.stackexchange.com/q/515600/35864
+%%%% 2019-11-09 MW
+%%%% adds `"t" change.case$` after almost all format.names$ calls
+%%%% to convert names from all uppercase to title case
+%%%%
+%%%% Original copyright header follows
+%%%% (distributed under LPPL 1.3c)
+%%%%
%%
%% This is file `model6-num-names.bst' (Version 2.0),
%%
@@ -428,9 +437,11 @@
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
- { s nameptr
- "{vv~}{ll}{ jj}\xfnm[{ f{.}.}]"
- format.name$
+ { s nameptr "{vv~}" format.name$ "t" change.case$
+ s nameptr "{ll}" format.name$ "t" change.case$
+ *
+ s nameptr "{ jj}\xfnm[{ f{.}.}]" format.name$
+ *
% remove.dots
bibinfo bibinfo.check
't :=
@@ -541,8 +552,9 @@
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
- { s nameptr
- "{vv~}{ll}" format.name$
+ { s nameptr "{vv~}" format.name$ "t" change.case$
+ s nameptr "{ll}" format.name$ "t" change.case$
+ *
't :=
nameptr #1 >
{
@@ -1380,7 +1392,9 @@
FUNCTION {format.lab.names}
{ 's :=
"" 't :=
- s #1 "{vv~}{ll}" format.name$
+ s #1 "{vv~}" format.name$ "t" change.case$
+ s #1 "{ll}" format.name$ "t" change.case$
+ *
s num.names$ duplicate$
#2 >
{ pop$
@@ -1392,7 +1406,11 @@
{
" " * bbl.etal *
}
- { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
+ { bbl.and space.word
+ *
+ s #2 "{vv~}" format.name$ "t" change.case$
+ s #2 "{ll}" format.name$ "t" change.case$
+ *
* }
if$
}
您可以在以下位置下载修改后的文件https://gist.github.com/moewew/a79d76d88fe0604ec428326865c22cc5,如果您有兴趣的话,该网站还会在修订选项卡中显示明显的差异。
请注意,我将调用拆分为"{vv~}{ll}"
多个单独的调用,以确保带有 von 部分的名称不会被不必要地大写。
我应该提到我强烈建议以非大写形式在文件中输入姓名.bib
。如果有必要,BibTeX 将姓名全部大写要比处理输入中的全部大写姓名容易得多(我真的希望这种情况很少发生,因为全部大写姓名看起来不太好看)。