XinzeZhang / HUST-PhD-Thesis-Latex

华中科技大学博士毕业论文Latex模板
133 stars 31 forks source link

参考文献作者数量问题 #6

Open RainerTian opened 1 year ago

RainerTian commented 1 year ago

华中科技大学博士、硕士学位论文撰写规定中说(http://gs.hust.edu.cn/info/1019/11815.htm

3.可列于参考文献表的文献类型包括图书、期刊、会议论文集、专利和学位论文等。其著录格式分别如下(注意标点符号):

(1) 图书: [顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).书名.版本(第×版).译者.出版地:出版者,出版年. 起页~止页

(2) 期刊:[顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).文章名称.期刊名称,年号,卷号(期号):起页~止页

(3) 会议论文集:[顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).文章名称.见(英文用“in”):论文集主编.论文集名.出版地:出版者,出版年. 起页~止页

而我们这个模板里是最多显示6人,这个可以在哪里修改吗?谢谢回复

XinzeZhang commented 1 year ago

华中科技大学博士、硕士学位论文撰写规定中说(http://gs.hust.edu.cn/info/1019/11815.htm)

3.可列于参考文献表的文献类型包括图书、期刊、会议论文集、专利和学位论文等。其著录格式分别如下(注意标点符号):

(1) 图书: [顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).书名.版本(第×版).译者.出版地:出版者,出版年. 起页~止页

(2) 期刊:[顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).文章名称.期刊名称,年号,卷号(期号):起页~止页

(3) 会议论文集:[顺序编号] 作者(采用姓在前,名在后的形式,作者名之间用逗号分隔;3人以内全部写上,3人以上只写3人再加“等”(英文加“ et al”)).文章名称.见(英文用“in”):论文集主编.论文集名.出版地:出版者,出版年. 起页~止页

而我们这个模板里是最多显示6人,这个可以在哪里修改吗?谢谢回复

感谢指出问题。

您好,参考https://tex.stackexchange.com/questions/26575/bibtex-how-to-reduce-long-author-lists-to-firstauthor-et-al,在HUSTThesis.bst文件的296行和298行,将#6替换为#3,即可。

RainerTian commented 1 year ago

image 您好,还有一个问题向您请教,说这个参考文献的作者按英文习惯写法,名在前、姓在后,名和姓均用全称,如果作者名超过两个单词,中间名使用简称,如“C.”,不要混用。3人以内列出全部作者,3人以上列出3人再加“等”(英文加“et al”)。这个需要怎么调整代码,麻烦您了

XinzeZhang commented 1 year ago

@RainerTian 三人以上列出再加等(英文加“et al”)。 在bst文件 进行如下修改:

FUNCTION {bbl.cn.etal}
{ "等." }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames := 
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f.~}{ll}"
      format.name$
      %bibinfo bibinfo.check
      't :=
      nameptr #1 >
        {
          nameptr #3
          #1 + =
          numnames #3
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
            { ", " * t * }
            { numnames #2 >
              { "" * }
              'skip$
              if$
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  lang empty$
                    { ", " * bbl.etal * }
                    { lang "chinese" =
                       { ", " * bbl.cn.etal * }
                       'skip$
                      if$
                    }
                  if$
                }
                {
                  lang empty$
                    { ", " * t * }
                    { lang "chinese" =
                       { ", " * t * }
                       'skip$                   
                     if$
                    }
                  if$
                } 
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}
XinzeZhang commented 1 year ago

@RainerTian 对于姓、名、中间名的处理,参考 https://tex.stackexchange.com/questions/122334/how-to-remove-a-period-from-middle-initial-in-bst-file-while-leaving-first-name 中的回答。

As JLDiaz answered: ‘’‘ This string specifies the required format for the name of each author. vv represents the "von" part (if it exists) ll is the full last name, jj is the "junior" part of the name (if it exists) and finally ff would be the full first name, while f is the initial of the first name. Commas and dots are literals and are added in the output. ’‘’

可以尝试将"{f.~}{ll}"替换为"{ff~}{v.~}{j.~}{ll}"