Bibtex .bst 文件修改为包含字母顺序

Bibtex .bst 文件修改为包含字母顺序

是否可以修改JHEP 书目格式以简单的方式显示书目条目,按字母顺序排列,而不是基于在正文中的首次出现?

(附录)是否可以以相同的方式添加一个函数,如果重复则打印一条长水平线-----而不是作者姓名,就像 amsplain.bst 样式所做的那样?

答案1

参考书目样式JHEP似乎是古老unsrt样式的轻微修改版本。要启用按字母顺序排列条目,您应该进行JHEP.bst如下修改。(附言:我不确定此过程是否满足您的目标,即“以简单的方式”进行修改。但是,我已经尝试了代码,它似乎有效!)

  • 复制该文件JHEP.bst。将该副本称为JHEPsort.bst。(不要直接编辑原始文件。)

  • 在文本编辑器中打开文件JHEPsort.bst。你用来编辑 tex 文件的编辑器就可以了。

  • 找到线条

    MACRO {pr} {"Phys. Rev."}
    
    READ
    
    STRINGS { longest.label }
    

    在此文件中。提示:在我的此文件副本中,此摘录从 l. 1048 开始。

  • 插入以下 145 行左右之间线READ和线STRINGS { longest.label }

    FUNCTION {sortify}
    { purify$
      "l" change.case$
    }
    
    INTEGERS { len }
    
    FUNCTION {chop.word}
    { 's :=
      'len :=
      s #1 len substring$ =
        { s len #1 + global.max$ substring$ }
        's
      if$
    }
    
    FUNCTION {sort.format.names}
    { 's :=
      #1 'nameptr :=
      ""
      s num.names$ 'numnames :=
      numnames 'namesleft :=
        { namesleft #0 > }
        { nameptr #1 >
            { "   " * }
            'skip$
          if$
          s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
          nameptr numnames = t "others" = and
            { "et al" * }
            { t sortify * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
    }
    
    FUNCTION {sort.format.title}
    { 't :=
      "A " #2
        "An " #3
          "The " #4 t chop.word
    chop.word
      chop.word
      sortify
      #1 global.max$ substring$
    }
    
    FUNCTION {author.sort}
    { author empty$
        { key empty$
            { "to sort, need author or key in " cite$ * warning$
              ""
            }
            { key sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.editor.sort}
    { author empty$
        { editor empty$
            { key empty$
                { "to sort, need author, editor, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { editor sort.format.names }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {author.organization.sort}
    { author empty$
        { organization empty$
            { key empty$
                { "to sort, need author, organization, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { "The " #4 organization chop.word sortify }
          if$
        }
        { author sort.format.names }
      if$
    }
    
    FUNCTION {editor.organization.sort}
    { editor empty$
        { organization empty$
            { key empty$
                { "to sort, need editor, organization, or key in " cite$ * warning$
                  ""
                }
                { key sortify }
              if$
            }
            { "The " #4 organization chop.word sortify }
          if$
        }
        { editor sort.format.names }
      if$
    }
    
    FUNCTION {presort}
    { type$ "book" =
      type$ "inbook" =
      or
        'author.editor.sort
        { type$ "proceedings" =
        'editor.organization.sort
            { type$ "manual" =
                'author.organization.sort
                'author.sort
              if$
            }
          if$
        }
      if$
      "    "
      *
      year field.or.null sortify
      *
      "    "
      *
      title field.or.null
      sort.format.title
      *
      #1 entry.max$ substring$
      'sort.key$ :=
    }
    
    ITERATE {presort}
    
    SORT
    

    如果你好奇这段代码是从哪里来的:我当然不是自己创建的!相反,我从书目样式文件中复制了它plain.bst

  • 将文件保存JHEPsort.bst到包含主 tex 文件的目录或 BibTeX 搜索的目录中。如果选择第二个选项,您可能需要以适合您的 TeX 发行版的方式更新 TeX 发行版的文件名数据库。

  • 通过提供说明开始使用新的书目样式

    \bibliographystyle{JHEPsort}
    

    而不是\bibliographystyle{JHEP}。请确保再运行 LateX、BibTeX 和 LaTeX 两次,以便所有更改都完全传播。

祝您 BibTeX 愉快!

相关内容