使用“crossref”和“related”字段组织参考书目中的书籍章节

使用“crossref”和“related”字段组织参考书目中的书籍章节

biblatex 处理 crossref 的方式很棒……但总是有新的愿望/问题。我觉得参考书目把书和它们的章节(条目)混在一起有点尴尬@inbook。有没有办法组织它们?

喜欢

  • 作者、书籍
  • 作者的另一本书包含:
    • 第1章
    • 第五章
  • 作者,文章

其中“第 1 章”和“第 5 章”是@inbook与“另一本书”交叉引用的条目。我使用的是philosophy-verboseverbose-trad2样式。

谢谢,Jos

编辑:我按照 moewe 的建议更改了 (M)WE 以使用该related字段:谢谢!效果很好,但用于格式化参考书目中打印的字段的语法有点难。如何让它打印每章的页数而不是出版年份?

\documentclass[ngerman,french]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}

\makeatletter
\usepackage{lmodern}
\usepackage{perpage}
\MakePerPage{footnote}
%% Biblatex %%
\usepackage[language=french,%
autopunct=true,%
  style=verbose-trad2,%
   strict,% 
  related=true,
backend=biber]%
{biblatex}%

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{MH_Holzwege,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Holzwege},
  publisher =    {Vittorio Klostermann},
  address =      {Frankfurt a. M.},
  year =     2003,
  series =   {Einzelausgabe des Bd. 5 der Gesamtausgabe},
  edition =      {8., unver\"{a}nderte Auflage},
  addendum =     {1. Publikation: 1950},
  related = {MH_Kunstwerk,MH_NietzscheGott,MH_Weltbild},
  relatedtype = {multivolume}
 }

@InBook{MH_Kunstwerk,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Der Ursprung des Kunstwerkes},
  pages =    {1--74},
  crossref = {MH_Holzwege}
}

@InBook{MH_NietzscheGott,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Nietzsches Wort `{Gott} ist tot'\,},
  pages =    {193--247},
  crossref = {MH_Holzwege}
}

@InBook{MH_Weltbild,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Die Zeit des Weltbildes},
  pages =    {69--104},
  crossref = {MH_Holzwege}
 }

@Book{MH_SZ,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {{Sein und Zeit}},
  address =      {T\"{u}bingen},
  publisher =    {Max Niemeyer},
  year =     2001,
  edition =      {18. Auflage},
  addendum =     {1. Publikation: 1927}}

\end{filecontents}
\addbibresource{\jobname.bib}

\makeatother

\usepackage{babel}
\addto\extrasfrench{\providecommand{\og}{\leavevmode\flqq~}\providecommand{\fg}{\ifdim\lastskip>\z@\unskip\fi~\frqq}}

\begin{document}

\title{Titre}


\author{A. Teur}

\maketitle

Texte\footcite[20]{MH_Kunstwerk}.

%    Plus de texte \footcite{MH_Weltbild}.

Et hop \footcite{MH_SZ}

Une derni\`ere\footcite{MH_NietzscheGott}

\printbibliography[title={Oeuvres de Martin Heidegger},keyword=MH,keyword=D,nottype=inbook] 

\end{document}

答案1

感谢 moewe 对使用该related字段的建议,以及在这个网站上的一些浏览,我发现我可以relatedtype根据multivolume类型(从复制biblatex.def)定义一个新的,只需\usebibmacro{chapter+pages}在末尾添加即可:

\newbibmacro*{related:bookchapters}[1]{%
  \entrydata*{#1}{%
    \usebibmacro{title}%
    \ifboolexpr{
      test {\ifnamesequal{author}{savedauthor}}
      or
      test {\ifnameundef{author}}
    } 
      {}
      {\usebibmacro{bytypestrg}{author}{author}%
       \setunit{\addspace}%
       \printnames[byauthor]{author}
       \newunit\newblock}%
    \ifboolexpr{    
      test {\ifnamesequal{editor}{savededitor}}
      or
      test {\ifnameundef{editor}}
    } 
      {}
      {\usebibmacro{byeditor+others}%
       \newunit\newblock}%
  \printdate
\usebibmacro{chapter+pages}
}}

在我的工作示例中,结果如下:

\documentclass[ngerman,french]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}

\makeatletter
\usepackage{lmodern}
\usepackage{perpage}
\MakePerPage{footnote}
%% Biblatex %%
\usepackage[language=french,%
autopunct=true,%
  style=verbose-trad2,%
   strict,% 
  related=true,
backend=biber]%
{biblatex}%

\newbibmacro*{related:bookchapters}[1]{%
  \entrydata*{#1}{%
    \usebibmacro{title}%
    \ifboolexpr{
      test {\ifnamesequal{author}{savedauthor}}
      or
      test {\ifnameundef{author}}
    } 
      {}
      {\usebibmacro{bytypestrg}{author}{author}%
       \setunit{\addspace}%
       \printnames[byauthor]{author}
       \newunit\newblock}%
    \ifboolexpr{    
      test {\ifnamesequal{editor}{savededitor}}
      or
      test {\ifnameundef{editor}}
    } 
      {}
      {\usebibmacro{byeditor+others}%
       \newunit\newblock}%
  \printdate
\usebibmacro{chapter+pages}
}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{MH_Holzwege,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Holzwege},
  publisher =    {Vittorio Klostermann},
  address =      {Frankfurt a. M.},
  year =     2003,
  edition =      {8},
  related = {MH_Kunstwerk,MH_NietzscheGott,MH_Weltbild},
  relatedtype = {bookchapters},
  relatedstring = {chapitres :}
}

@InBook{MH_Kunstwerk,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Der Ursprung des Kunstwerkes},
  pages =    {1--74},
  crossref = {MH_Holzwege}
}

@InBook{MH_NietzscheGott,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Nietzsches Wort `{Gott} ist tot'\,},
  pages =    {193--247},
  crossref = {MH_Holzwege}
}

@InBook{MH_Weltbild,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {Die Zeit des Weltbildes},
  pages =    {69--104},
  crossref = {MH_Holzwege}
 }

@Book{MH_SZ,
  keywords =     {MH,D},
  author =   {Martin Heidegger},
  title =    {{Sein und Zeit}},
  address =      {T\"{u}bingen},
  publisher =    {Max Niemeyer},
  year =     2001,
  edition =      {18},
}

\end{filecontents}
\addbibresource{\jobname.bib}

\makeatother

\usepackage{babel}
\addto\extrasfrench{\providecommand{\og}{\leavevmode\flqq~}\providecommand{\fg}{\ifdim\lastskip>\z@\unskip\fi~\frqq}}

\begin{document}

\title{Titre}


\author{A. Teur}

\maketitle

Texte\footcite[20]{MH_Kunstwerk}.

%    Plus de texte \footcite{MH_Weltbild}.

Et hop \footcite{MH_SZ}

Une derni\`ere\footcite{MH_NietzscheGott}

\printbibliography[title={Oeuvres de Martin Heidegger},keyword=MH,keyword=D,nottype=inbook] 

\end{document}

我还没有找到将第一个包含的章节放在新行上的方法...这个命令是什么?

相关内容