介绍

介绍

我正在尝试修改“plainnat.bst”,以如下图所示格式显示参考文献,以符合 CILAMCE 大会的规范。他们的 Latex 模板不包含任何 .bst 文件,而是显示以普通 LateX 代码编写的示例参考书目。

enter image description here

我创建了原始“plainnat.bst”文件的副本,并正在编辑新的“myplainnat.bst”文件。到目前为止,我已成功修改了输出名称,方法是将所有“{ff }{vv }{ll }{jj }”更改为“{vv~}{ll,}{ f.}”,并将每个“和”更改为“\&”。使用 \cite 或 \citep 时,引文按所需输出。参考文献按字母顺序显示,如您所愿。

现在,我遇到了非常大的困难:1- 按照上图所示的顺序放置所有参考块;2- 将卷自定义为卷,将编号自定义为n,将页自定义为p,将页自定义为pp;3- 删除参考文献第一行后所有行上的空白。

此外,我不确定这是否在 .bst 文件中进行了更改,但我还想在之前定义的花式设置中维护我的参考书目页面,并将标题从“参考书目”更改为“参考文献”,并使用与章节标题相同的字体。

我尝试在命令提示符中使用“latex makebst”几次,但没有成功,但非常感谢任何有关解决此问题的提示。

谢谢。

附言:有人知道一个用户友好的 .bst 编程指南吗?我找到了一个叫做“Tame the BeaST”的指南,它帮助我修改了引用名称,但仅此而已。

答案1

介绍

为了解决我的问题,我首先尝试按照 Mico 的建议使用 makebst 生成我想要的 .bst 文件。生成的文件并不完全是我想要的。经过一段时间的折腾,我终于找到了一个好的解决方案。我决定不直接完成这个问题,而是在下面写下我所做的事情,以防有人遇到类似的问题并发现这很有帮助。

我的解决方案

1- 制作

在 Windows 中,输入命令提示符并写入

latex makebst

尽你所知回答问题。如果你不知道,只需按 Enter 键,系统将为你选择默认选项。对于初学者(比如我自己),我建议保留默认主文件(第一个必需输入)。然后为你的个人 .bst 文件写一个名字(例如“mybibstyle”)。

我不会在这里详细介绍。Google 可以教你如何正确配置选项。我通过反复试验完成了大部分操作。另外,我当然不是最有资格解释在 makebst 中应该选择什么的人,最终,我无法仅通过 makebst 获得我想要的东西。

简而言之,我选择了作者年份的引用样式,并启用了 natbib 支持,这意味着我必须编写

\usepackage{natbib}

作为我的 .tex 文件中的序言之一。

生成 .bst 文件后,将其复制到您的 .tex 文件所在的文件夹,并在添加参考书目之前写入:

\bibliographystyle{mybibstyle}

本节对于我解释我的解决方案很重要,因为我用来修复引用的 .bst 文件中的几乎每个函数都是由 makebst 程序完成的。

2-编辑生成的.bst 文件

在我的问题中,我写了 3 个我想解决的事情:

  1. 将所有参考块按照图中所示的顺序放置;
  2. 将卷数自定义为卷、将编号自定义为n、将页数自定义为页、将页数自定义为页;
  3. 删除参考文献第一行之后所有行的空白。

我将按降序解释如何解决上述问题:

3. 删除所有行上的空白处...

我没有删除它。在核实了参考文献的书面要求后,模板实际上规定它们必须有 0.75 厘米的缩进(足够接近默认缩进),并且第一行应该与页面的边距相同,这意味着我不需要更改任何内容。

2. 自定义volume为vol.、number为n.、page为p.、pages为pp。

在生成的.bst文件中,将会有以下函数(或类似下面写的内容):

FUNCTION {bbl.volume}
{ "volume" }
FUNCTION {bbl.nr}
{ "no." }
FUNCTION {bbl.pages}
{ "pages" }
FUNCTION {bbl.page}
{ "page" }

为了得到我想要的,只需将它们更改为

FUNCTION {bbl.volume}
{ "vol." }
FUNCTION {bbl.nr}
{ "n." }
FUNCTION {bbl.pages}
{ "pp." }
FUNCTION {bbl.page}
{ "p." }

1. 将所有参考块按照图中所示顺序排列

这是最难解决的问题。小吐槽:我终生都无法理解为什么有人会认为用逆波兰表示法(RPN)编写的代码是个好主意。

无论如何,makebst 程序创建了一个 .bst 文件,其中根据需要写入作者姓名,年份写在作者之后。但参考文献中缺少某些句号,“inproceedings”和“inbook”没有与原始书籍的名称一起输出,而出版商则与出版地点一起写入。我不得不分别更改每个 BibTex 条目类型以及每个信息出现的顺序。

我曾考虑过逐一检查我所做的修改,但那样会很麻烦,而且需要很长时间。相反,我将展示一个来自书内 BibTex 条目的前后引用示例。在理解(或接受)我所做的修改后,人们可能可以单独更改其他条目。

我将使用以下 BibTex 条目作为示例:

@inbook{Ramm1981,
   pages = {63--89},
   title     = {Strategies for Tracing the Nonlinear Response Near Limit Points},
   publisher = {Springer-Verlag},
   year      = {1981},
   author    = {E Ramm},
   editor    = {Wunderlich, W. and Stein, E. and Bathe, K. J.},
   address   = {Berlin, Heidelberg},
   booktitle = {Nonlinear Finite Element Analysis in Structural Mechanics},
   doi       = {10.1007/978-3-642-81589-8_5},
   isbn      = {978-3-642-81589-8},
   url       = {https://doi.org/10.1007/978-3-642-81589-8_5},
}

然后对使用 makebst 生成的 .bst 文件所得到的参考输出进行修改,如“2. 自定义体积为体积...”所示,参考输出如下所示。 enter image description here

.bst 文件中用于 inbook 类型引用的代码是

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      editor format.key output
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.date "year" output.check
  date.block
  format.btitle "title" output.check
  crossref missing$
    {
      format.bvolume output
      format.chapter.pages "chapter and pages" output.check
  new.sentence
      format.number.series output
      format.publisher.address output
    }
    {
      format.chapter.pages "chapter and pages" output.check
  new.sentence
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.pages "pages" output.check
  format.note output
  fin.entry
}

首先,我在任何引用类型之前创建了一个额外的函数:

FUNCTION {format.publisher}
{ publisher
}

所以我可以添加不需要地址的发布者。

然后我将 inbook 函数修改如下:

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
      editor format.key output
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.date "year" output.check
  date.block
  format.title "title" output.check

%%%% ADDED THIS %%%%
  new.sentence                              % Finishes last block with a period
  format.editors output                     % Outputs editors
  word.in swap$ *                           % Adds an "in" before the editors
  format.booktitle "title" output.check     % Add book title
%%%%%%%%%%%%%%%%%%%%

  crossref missing$
    {
      format.bvolume output
      format.chapter.pages "chapter and pages" output.check
  new.sentence
      format.number.series output
      format.publisher.address output
    }
    {
      format.chapter.pages "chapter and pages" output.check
  new.sentence
      format.book.crossref output.nonnull
    }
  if$

%  format.edition output % I don't need this

  format.pages "pages" output.check

%%%% ADDED THIS AS WELL %%%%
  new.sentence                   % end last reference block with period
  format.publisher output        % output publisher
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%  format.note output % I don't need this

  fin.entry
}

通过编写上述修改,我得到了下图所示的预期结果: enter image description here

但是请注意,我甚至没有触及代码的交叉引用部分,因为我没有必要这样做,而且如果我尝试这样做,我将需要再浪费几个小时来理解 RPN 编码方法。

3- 最后的困难

我通过以下方式修复了我的花哨的标题和标题问题

\renewcommand{\bibsection}{\subsection*{REFERENCES}}

在定义参考书目样式和插入参考书目之前,就像 Golar Ramblar 在某个 TSE 问题的最后一个答案中所做的那样,他将他的答案归功于论坛(latex dot org/forum/viewtopic.php?t=4089)。

注意:我没有足够的声誉点来适当地显示所有链接。

最后的评论

有哪位 LateX 专家能为参考书目样式创建一个“.noobbst”文件吗?其中 RPN不是用过吗?RPN 编码似乎把一切都搞得太复杂了。要么这样做,要么制作一个智能的“makebst”代码,它可以获取用简单的 LateX 编写的用户定义样本参考并生成适当的 .bst 文件。干杯。

相关内容