改bst名字

 代码1:

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}{, ff}{, jj}"
      format.name$ 't :=
      nameptr #1 >
        {
          nameptr #1 = numnames #2 > and
            { "," * }
            'skip$
          if$
          t "others" =
            {
              " et al." *
              't :=  % 如果遇到 "others" 则直接跳过后续操作
            }
            { 
              namesleft #1 > 
                { ", " * }
                'skip$ 
              if$
              t
              nameptr #1 >
                {
                  nameptr #1 = numnames #2 > and
                    { " \& " * }  % 最后两个作者之间用 & 连接
                    { ", " * }
                  if$
                }
                't
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

运行结果:即,有的有缩写,有的没有。

author={Qi, Ning and Zhang, Ao},(无缩写的)

author={Shan, S. N. and Zhang, Z. C. and Ji, W. Y. and Wang, H.},(有缩写但是只显示2个作者)

基本全错。

代码2:

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}{ f{}}{jj}"
      format.name$ 't :=
     nameptr #1 >
         {
          nameptr #3
          #1 + =
          numnames #3
          > and
            { #3 'numnames := }  % 修改此处以保证显示所有作者
            'skip$
          if$
          nameptr #1 >
            {
              ", " *  % 每个作者之间用逗号分隔
              t
              nameptr numnames =  % 如果是最后一个作者
                { " \& " * }  % 最后一个作者之前用 & 连接
                { }
              if$
              t "others" =  % 如果是 "others" 则显示 et al.
                { " et al." * }
                { t * }
              if$
            }
          't
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

运行结果:

也很奇怪,有一些是有连词“&”,但是老重复是什么意思呢。

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{vv~}{ll}{ f{}}{jj}"
      format.name$ 't :=
     nameptr #1 >
         {
          nameptr #3
          #1 + =
          numnames #3
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
            { ", " * t * }
            {
              "," *
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal *
                }
                { " " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

这个没缩写“."和&,但是作者名字啥的都是对的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*✲゚*✲゚*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值