如何自定义使用 custom-bib 创建的 .bst 书目样式,以处理没有年份和/或没有作者的条目

如何自定义使用 custom-bib 创建的 .bst 书目样式,以处理没有年份和/或没有作者的条目

我使用的natbib是作者年份引用样式和自定义参考样式(.bst我用 创建的自定义参考样式(文件)custom-bib。当然,该参考样式文件也是以作者年份为导向的。

我不是.bst文件方面的专家。我用custom-bib对我来说很完美,但有两种情况可以(也应该)改进:

  1. 条目无年份
  2. 条目无作者,还有一个不太重要的改进:
  3. 条目有一个 URL(记录在案)但是不是在线网站

.bst我在这里复制了我的 MWE(可能不是那么小)以及我的文件的链接:

\begin{filecontents}{mybib.bib}
@book{GAMSCPLEX,
publisher = {GAMS Development Corporation},
title = {{GAMS/CPLEX} 10 Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/cplex.pdf}
},
@book{GAMSSBB02,
address = {Washington, DC},
publisher = {GAMS Development Corporation},
title = {{GAMS/SBB} Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/sbb.pdf},
year = {2002}
},
@book{GAMSCONOPT,
address = {Bagsvaerd},
author = {Drud, A},
publisher = {{ARKI} Consulting and Development},
title = {{GAMS/CONOPT} Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/conopt.pdf}
},
@article{Chou2006,
author = {Chou, C. Y. and Chen, C. H.},
journal = {Expert Systems with Applications},
number = {2},
pages = {233--242},
title = {Economic design of variable sampling intervals {$T^2$} control charts using genetic algorithms},
volume = {30},
year = {2006}
},
@article{DRUZOVEC98,
address = {Ljubljana (Slovenija-Slovenia)},
author = {Dru\v{z}ovec, M and \v{S}ostar, A and Godina, A},
journal = {Strojni{\v{s}}ki Vestnik-Journal of Mechanical Engineering},
number = {1-2},
pages = {29--34},
title = {{MPC} process control procedure},
volume = {44},
year = {1998}
}
\end{filecontents}

\documentclass[11pt]{book}
\usepackage[a4paper,showframe]{geometry}

\RequirePackage[latin1]{inputenc}

%\usepackage{amsmath}

\usepackage[spanish]{babel}

\usepackage[autostyle=true]{csquotes}

\usepackage[round,semicolon,authoryear,longnamesfirst]{natbib}


\usepackage[%implicit=false,
                pdftex,hyperfootnotes=false,
             pdfpagelabels]{hyperref}  % backref linktocpage pagebackref
\pdfcompresslevel=9
\pdfadjustspacing=1 

\hypersetup{hyperfootnotes=false,
            colorlinks=true, linkcolor=blue, citecolor=green,%
                             filecolor=red, urlcolor=red,
            pdfpagemode=UseOutlines, pdfpagelayout=SinglePage,%
            pdfhighlight=/N, pageanchor=true,%
            pdftoolbar=true, pdfmenubar=true, pdfstartview=FitH}

\begin{document}

Referencias:

\begin{itemize}
    \item \cite{Chou2006}.
    \item \cite{DRUZOVEC98}.
    \item \cite{GAMSCPLEX}.
    \item \cite{GAMSSBB02}.
    \item \cite{GAMSCONOPT}.
\end{itemize}

\bibliographystyle{mycustom}
\bibliography{mybib}

\end{document}

这是mycustom.bsthttps://dl.dropbox.com/u/155485/mycustom.bst

这些是我得到的参考列表的结果:

我使用 mycustom.bst 获得的参考列表


好的,所以我的问题显然如下:

  1. 我如何调整我的.bst文件(或前面的.dbj文件)以便隐藏那些丑陋的空圆括号没有年份对于物品??

  2. 我的文件该如何.bst处理没有作者的项目?是否应该采取出版商信息?我认为正确的顺序可能是:作者,如果不是,那么編輯,如果不是,那么出版商或者机构我怎样才能以我的自定义风格完成它?*

  3. 我不知道 URL 信息到底能做什么。在我示例中展示的情况中,它们实际上是在线文档,因此我认为显示它们的链接并没有错。在其他情况下,您的文件中有一个 URL 地址.bib仅供您参考...无论如何,在这种情况下我的问题更简单:如何去掉URL地址前面那个丑陋的“URL”标签?


编辑:虽然这不是这个问题的目的,但我还想问您以下问题:

您是否知道任何(natbib 或只是 bibtex)现有风格与我的自定义风格相同或几乎相同围兜风格??我无法找到这种风格,但也许我错过了一些东西。

答案1

  1. 首先,您的文件有几个问题bibBibTeX 手册book入口需要年份、作者或编辑。所以我建议将前三个条目变成manual,只需要title
  2. 对于那些手册,特别是当author缺少时,应该提供一个keyBibTeX 可以用来排序条目的条目,有时会显示该条目而不是作者(取决于样式)。
  3. 我还会将publisher手册的字段更改为organization字段,因为它们是的可选字段manual,而publisher不是。

生成的数据库看起来将像这样:

@manual{GAMSCPLEX,
key = {GAMS/CPLEX},
organization = {GAMS Development Corporation},
title = {{GAMS/CPLEX} 10 Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/cplex.pdf}
},
@manual{GAMSSBB02,
key = {GAMS/SBB},
address = {Washington, DC},
organization = {GAMS Development Corporation},
title = {{GAMS/SBB} Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/sbb.pdf},
year = {2002}
},
@manual{GAMSCONOPT,
key = {GAMS/CONOPT},
address = {Bagsvaerd},
author = {Drud, A.},
organization = {{ARKI} Consulting and Development},
title = {{GAMS/CONOPT} Solver Manual},
url = {http://www.gams.com/dd/docs/solvers/conopt.pdf}
},
@article{Chou2006,
author = {Chou, C. Y. and Chen, C. H.},
journal = {Expert Systems with Applications},
number = {2},
pages = {233--242},
title = {Economic design of variable sampling intervals {$T^2$} control charts using genetic algorithms},
volume = {30},
year = {2006}
},
@article{DRUZOVEC98,
address = {Ljubljana (Slovenija-Slovenia)},
author = {Dru\v{z}ovec, M. and \v{S}ostar, A. and Godina, A.},
journal = {Strojni{\v{s}}ki Vestnik-Journal of Mechanical Engineering},
number = {1-2},
pages = {29--34},
title = {{MPC} process control procedure},
volume = {44},
year = {1998}
}

关于不存在年份的空括号,我有三点建议:

  1. yr-par从文件中删除选项dbj以删除全部年份用括号括起来。(可能不适合你)
  2. 只需提供一年!如果您使用特定版本(例如 GAMS/CPLEX),请查找其发布日期并使用该日期。可以合理地假设手册与软件版本一起发布。(可能不适合你)
  3. bsthackery:虽然year是的可选字段manual,但您的样式文件无法正确检查年份是否存在。这是一个漏洞为了custom-bib避免这种情况,请在样式文件的函数中添加以下五行代码format.date

    FUNCTION {format.date}
    { year "year" bibinfo.check duplicate$ empty$
        {
        }
        'skip$
      if$
      extra.label *
      before.all 'output.state :=
      duplicate$ empty$     %% added
      { pop$ "{}" }         %% added
      {                     %% added
      " (" swap$ * ")" *
      }                     %% added
      if$                   %% added
    }
    

    原则上,可以将其添加到merlin.mbs,以修复所有派生样式。通过此 hack 以及对数据库的建议更改,我得到: 参考书目示例

答案2

我想添加一个答案一部分我自己的问题。但仍然有一些未解决的问题。

关于如何去掉“URL”标签(问题3),我刚刚打开了.bst我创建的文件(我在我的问题中链接到的文件),然后我意识到这可以起作用:

\providecommand{\urlprefix}{ }

这一行应该加在调用.bst样式之前,我的意思是,在我的情况下,不是在行之后\bibliographystyle{mycustom}。例如,它可以加在之前\begin{document}

至于问题2,我必须说,这里可能的一种解决方法是手动editor为那些没有作者和编辑者的条目添加一个字段。这个编辑器可以具有与字段相同的内容publisher,实际上它应该替换它。这样,我检查了我的围兜风格editor作为一种作者author字段为空时。

但这不是一个好的解决办法。

请注意,我不是 LaTeX 或 BibTeX 编码方面的专家,因此任何其他答案都将不胜感激。

答案3

Bst 文件是用后缀语言编写的,如果您有点动力,那么这并不难理解,因此您可以涉足并添加代码以优雅地处理缺失的作者(我相信它已经按标题对此类记录进行了排序,因此没有太多需要修复的地方)。但最好尽可能少地破解您生成的文件。

  1. 许多引用样式使用无日期或者nd代替没有日期的文档的日期。如果您在参考书目中这样做,则无需调整样式。

  2. 除了编辑生成的 bst 之外,目前还没有想到其他解决缺少作者问题的好方法。

  3. 前面丑陋的“URL”标签是宏的内容。您可以通过在每个使用它的文档的序言中\urlprefix重新定义来摆脱它。要永久修复,请编辑您生成的并查找此代码片段(在):\urlprefix.bstFUNCTION {begin.bib}

    "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" write$ newline$

    \urlprefix如果您的文档尚未定义它,它会设置默认值,因此您可以将其更改为另一个前缀(包括\relax)。

3a. 如果我没记错的话,是否始终显示该url字段由运行期间的选项控制custom-bib。我建议重新运行 custom-bib 以生成不带该选项的样式;它可能会完全按照您的要求执行。如果这不起作用,最简单的解决方法是使用自定义字段名称,例如myurl您不想排版的 URL。

相关内容