在 agsm 样式中,使用破折号表示重复的作者姓名

在 agsm 样式中,使用破折号表示重复的作者姓名

寻求有关使用 创建自定义 bibstyle 的一些帮助natbib

刚开始攻读硕士学位,计划使用 TeX 进行写作,就像我攻读本科学位时一样。然而,我攻读硕士学位的学院使用的是哈佛系统的某个定制版本。我通过修改文件副本成功重现了他们要求的大部分内容agsm.bst

我只是在努力理解最后一部分。

这是现在的样子,但为了符合研究所的要求,我需要在作者重复的地方添加破折号。(只有第一个条目是真实的,我只是重复它作为例子。)

当前参考列表

这是他们在指南中呈现的方式,但他们似乎没有使用 TeX,而是建议在 Word 中书写并使用第三方工具进行参考管理(我不喜欢这个想法)。

所需参考列表

编辑。MWE。这是该包的初始调用:

\usepackage[authoryear,round,sort]{natbib}
\setcitestyle{round,aysep={},notesep={: }}

这是一个引用和列表构建的示例

\citep[35-37]{tedre2015science2}

\bibliographystyle{agsmuhi}
\bibliography{sources}

这本书的样子如下:

FUNCTION {book}
{ output.bibitem
  list.label.output
  " \harvardyearleft " list.year * "\harvardyearright " * output.nonnull
  author empty$
    { editor "author and editor" item.check }
    { crossref missing$
    { "author and editor" editor either.or.check }
    'skip$
      if$
    }
  if$
  title.field field.used =
    { skip$ }
    { format.btitle "title" output.check }
  if$
  crossref missing$
    { format.bvolume output
      format.number.series output
      format.edition output
      format.publisher.address output
    }
    { format.book.crossref output.nonnull
      format.edition output
    }
  if$
  new.block
  note output
  fin.entry
  write.url
}

这是输出函数:

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t f }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { " " * write$ }
    { output.state after.block =
    { 
      newline$
      "\newblock " write$
    }
    { output.state before.all =
        'write$
        {"" * write$ }
      if$
    }
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

还有这个 dashify 函数,我不知道它是否与它有任何关系,但我看到它被调用的唯一地方是在格式化页码的函数中。

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
    { t #1 #2 substring$ "--" = not
        { "--" *
          t #2 global.max$ substring$ 't :=
        }
        {   { t #1 #1 substring$ "-" = }
        { "-" *
          t #2 global.max$ substring$ 't :=
        }
          while$
        }
      if$
    }
    { t #1 #1 substring$ *
      t #2 global.max$ substring$ 't :=
    }
      if$
    }
  while$
}

相关内容