自定义书目样式:在 bst 文件中设置状态变量

自定义书目样式:在 bst 文件中设置状态变量

我正在自定义默认迪纳特用于定制我的参考书目样式的文件。

该文件包含一些状态变量:

INTEGERS { output.state 
           before.all 
       mid.sentence 
       after.sentence 
       after.block
       colon.after 
       period.dash }

FUNCTION {init.state.consts}
% initialisation of the state variables
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence := 
  #3 'after.block :=
  #4 'colon.after :=
  #5 'period.dash :=
}

FUNCTION {set.period.dash}
% set ". -- "
{ output.state before.all =
    { skip$ }
    { period.dash 'output.state := }
  if$
}

但我不太清楚语法。

我该如何设置这些状态变量?
例如,如果我想在每次输入后使用句点破折号 - 我需要如何调整该功能set.period.dash

答案1

首先要知道的重要一点是:bst 文件的语法基于波兰表示法

知道了这一点之后,我理解了语法。我在问题中发布的代码摘录只是 init 状态的声明和初始化。

如果你想自定义特定的条目类型,正确的更改位置位于迪纳特文件,其中定义了条目类型。

例如我想修改@MISC类型:

FUNCTION {misc}
% required: 
% optional: author, title, howpublished, month, year, note, url
{ out.bibitem.start
          ...
          url set.period.dash.check
          push.url out
          ...
  out.bibitem.end
}

在条目规范中使用了 init 状态。就我而言,我不想在 URL 前使用句号和破折号。因此,我将其注释掉了url set.period.dash.check

为了在每个 bibitem 之后得到一个句号,我编辑了该函数

FUNCTION {out.bibitem.end}
% end of entry
{ write$                    % add new.sentence or ".~" write$
  newline$
}

相关内容