\bibentry 为具有自定义 bst 的作者生成破折号

\bibentry 为具有自定义 bst 的作者生成破折号

我使用 创建了一个自定义 .bst 文件makebst,并选择了在参考书目中为重复的作者姓名生成长破折号的选项(选项nmdash,nmd-3)。(我正在使用带有 natbib 和作者年份引用的 bibtex。)这在参考书目中按预期工作(用 生成\bibliography{})。但是,我需要在文本的各个位置包含某些条目,然后主要单独包含。当我使用\bibentry{key}来表示参考书目中出现的参考文献,其中作者用长破折号替换时,这里也会使用长破折号。当参考文献像那样单独打印时,破折号就没有意义了。使用我当前的设置可以避免这种情况吗?还是我必须切换到 biblatex 或其他东西?

我不知道如何在不附加 bst 文件的情况下为此创建 MWE(当然,如果它有帮助,我很乐意这样做)---抱歉。

答案1

首先,我们需要重新创建使用 makebst 创建的 bst 文件。上面的文件只是所创建latexpand文件的精简版本(我删除了所有带有 注释的内容), 使用除(作者年份) 和之外的所有默认选项dbj运行:tex makebst.texaynmdashnmd-3

%% Stripped version of driver file produced from merlin.mbs
\input docstrip
\preamble
----------------------------------------
***  ***
\endpreamble
\postamble
End of customized bst file
\endpostamble
\keepsilent
\askforoverwritefalse
\askforoverwritefalse
\def\MBopts{\from{merlin.mbs}{ay,ed-au,nmdash,nmd-3,num-xser,isbn,issn,doi,xedn,nfss,}}
% You can change the name of the bst file below:
\generate{\file{tanh.bst}{\MBopts}}
\endbatchfile

将其保存为 .dbj 并对其运行 tex。您将获得一个tanh.bst或您在该\generate行中写的任何名称。

然后,根据Guido 的回答防止 natbib 中的 ibid 跟踪name.or.dash,我们必须在新创建的 bst 文件上编辑 宏。这里有一个补丁:

--- tanh.bst    2015-12-18 13:11:40.004012993 -0200
+++ tanh_new.bst    2015-12-18 11:19:30.636130895 -0200
@@ -890,7 +890,7 @@
    oldname empty$
      { s 'oldname := s }
      { s oldname =
-         { "---{}---{}---" }
+         { "\andash{" oldname * "}" * }
          { s 'oldname := s }
        if$
      }

将其应用于patch < <patch-filename>。仅当您的 bst 文件名为 tanh.bst 时,它才有效。但这是一行差异,因此您只需相应地编辑该行即可(在第 890 行,将 替换{ "---{}---{}---" }{ "\andash{" oldname * "}" * })。

Guido 的答案中的 MWE 一定足够了。只需 按照那里的建议\bibliography在运行之前注释掉第一次运行即可。bibtex

\documentclass{article}
\usepackage{natbib}
\usepackage{bibentry}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Article{first,
  author = "Last, First",
  title = "First Title",
  journal = "Journal Name",
  year = 2012
}
@Article{second,
  author = "Last, First",
  title = "Second Title",
  journal = "Journal Name",
  year = 2011
}
@Article{third,
  author = "More, First",
  title = "Third Title",
  journal = "Journal Name",
  year = 2011
}
\end{filecontents}

\usepackage{etoolbox}
\newcommand{\andash}[1]{#1}
\AtBeginEnvironment{thebibliography}{\renewcommand{\andash}[1]{---{}---{}---}}
\AtEndEnvironment{thebibliography}{\renewcommand\andash[1]{#1}}

\begin{document}
Testing normal citations
\cite{first} 
\cite{second}
\cite{third}

\bibliographystyle{tanh.bst}
\nobibliography{\jobname}

Testing \verb|\bibentry|

\bibentry{first}

\bibentry{second}


\bibliography{\jobname}

\section*{More Testing}
Testing \verb|\bibentry| again after the bibliography

\bibentry{second}

\bibentry{first}

\end{document}

平均能量损失


或移至比布拉特克斯。值得付出努力。指导意见:

相关内容