使用 biblatex/biber 根据引用创建表,并以自定义字段作为列

使用 biblatex/biber 根据引用创建表,并以自定义字段作为列

我有一个图书馆,里面有另一本书(主要来源)的参考资料,我分析了该书的哪些页面被引用(以及引用频率)。我想将这些数据打印在表格中。

是否可以使用biblatex/biber处理附加字段(在本例中citedonpages)来填充附加列(甚至计算逗号分隔的条目)?

MWE 预览

在以下 MWE 中,我手动创建了表格。由于实际图书馆有许多条目,因此自动化解决方案将非常有用(在示例中,它甚至会检测到同一页面的多个条目 - 这很好,但不是必需的)。

梅威瑟:

\documentclass{scrbook}
\usepackage{tabularx,booktabs}
\usepackage[backend=biber,style=authortitle]{biblatex}

\begin{filecontents*}{Analysis.bib}
@Book{Miller1832a,
  author    = {John Miller},
  title     = {Elementary book},
  year      = {1832},
  citedonpages = {67,67,68,97},
}

@InBook{Smith1744a,
  author    = {Daniel Smith},
  booktitle = {Collection of important articles},
  location  = {Amsterdam},
  title     = {Noteworthy Article},
  year      = {1744},  
  citedonpages = {5, 23, 37, 79, 248, 249, 254},
}
\end{filecontents*}
%\addbibresource{Analysis.bib}

\begin{document}
\begin{refsection}[Analysis.bib]
\nocite{*}
\printbibliography[heading=none]

% is it possible to autogenerate this table using Analysis.bib and biber/biblatex?
\begin{tabularx}{0.95 \textwidth}{llccX}
        \toprule 
        {\bfseries Author} & {\bfseries Title}  & {\bfseries Year} & {\bfseries \#  Citations}  & ... on pages \\\midrule%\otoprule 
        Miller, John             & Elementary book    & 1832                         & 4 & 67(2), 68, 97\\
        Smith, Daniel            & Noteworthy articls   & 1744                       & 7 & 5, 23, 37, 79, 248, 249, 254 \\
        \bottomrule
\end{tabularx}
    
\end{refsection}
\end{document}

PS. 迄今为止有用的来源:\refsection{}来自的环境\nocite{*} 用于 biblatex/biber 的单个 bibdatasources

答案1

对于表格书目,您可以使用biblatex-ext-tabularbiblatex-ext。 看是否有一种简单的方法可以将参考书目放入表格中?

如果要添加标准数据模型中不存在的新字段,首先需要在文件中声明它们.dbx。请参阅将字段“tome”添加到 biblatex 条目

对于示例中显示的数据,您不需要新的字段和单独的Analysis.bibbiblatex如果您不将其隐藏在单独的中,则可以自动收集该数据refsection

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear, citecounter, backref]{biblatex}
\usepackage{biblatex-ext-tabular}

\usepackage{longtable}
\usepackage{array}
\usepackage{booktabs}

\newcolumntype{L}[1]{%
  >{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}
\newcolumntype{C}[1]{%
  >{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}

\newbibmacro*{tablepageref}{%
  \iflistundef{pageref}
    {}
    {\printlist[pageref][-\value{listtotal}]{pageref}}}

\renewbibmacro*{pageref}{}

\defbibtabular{bibtabular}
  {\renewbibmacro*{bbx:dashcheck}[2]{##2}%
   \renewbibmacro*{labeltitle}{}%
   \renewbibmacro*{date+extradate}{}%
   \setlength{\LTpre}{0pt}%
   \setlength{\LTpost}{0pt}%
   \renewcommand*{\arraystretch}{2}%
   \begin{longtable}{%
                     @{}
                     L{\dimexpr0.25\textwidth-1\tabcolsep\relax}
                     L{\dimexpr0.3\textwidth-2\tabcolsep\relax}
                     L{\dimexpr0.11\textwidth-2\tabcolsep\relax}
                     L{\dimexpr0.22\textwidth-2\tabcolsep\relax}
                     L{\dimexpr0.12\textwidth-1\tabcolsep\relax}
                     @{}}
     \toprule
     \textbf{Author} & \textbf{Title} & \textbf{Year} & \textbf{\# Citations} & \dots\ on pages\\
     \midrule}
  {\bottomrule
   \end{longtable}}
  {\anchorlang{\usebibmacro{author/editor+others}}
   & \plainlang{\usebibmacro{title}}
   & \plainlang{\printdate}
   & \plainlang{\arabic{citecounter}} 
   & \plainlang{\usebibmacro{tablepageref}} \\}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,worman}
\clearpage
Lorem \autocite{sigfridsson,nussbaum}
\clearpage
Lorem \autocite{sigfridsson,geer}
\clearpage
Lorem \autocite{worman,geer,nussbaum}
\clearpage
Lorem \autocite{sigfridsson}

\printbibliography

\printbibtabular[title=Analysis]
\end{document}

包含作者、标题、年份、引用次数和页数的表格式参考书目。

相关内容