对我来说这是第一个问题,如果有错误,请说出来。使用此处提供的代码 --> 目录书目
如何在不更改 .bib 数据的情况下在表格左侧添加年份并取消右侧书籍的 URL 和 ISBN 条目?
答案1
这是一个很难解释的问题。我只是假设你正在做一些类似于准备简历清单的事情,因为我无法想象任何合理的方法引用在以那种奇怪的方式组织的参考书目引用中(作者/年份方案需要轻松找到作者,而不是年份!)。
因此,我们假设您将使用简单的“详细”样式来生成按年份排序的作品列表,然后我们可以从中进行修改。
由于标签只是一年,所以您实际上不需要复杂的表格环境,在普通列表环境中重新定义标签的技术就可以了。因此,从你引用的答案我们可以使用新枚举的简单定义。我们可以调整那里的答案,因为我们只使用年份,所以我们可以使用相当狭窄的标签。
\documentclass{article}
\usepackage[style=verbose,date=year]{biblatex}
\defbibenvironment{bibliography}
{\list
{\usebibmacro{date}}
{\setlength{\labelwidth}{0.1\textwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{%
\nobreak\strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}}
{\endlist}
{\item}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{*}
\newrefcontext[sorting=ynt]
\printbibliography
\end{document}
这种方法的主要缺陷是,日期会打印两次:一次作为标签,一次在引文中。可以定义 bibmacro 来尝试清除多余的日期,但效果并不令人满意,尤其是对于条目集,也对于一些将日期作为发行的一部分的期刊。为了完整起见,我在这里给出它:
\newbibmacro{omitdate}{%
\clearfield{date}
\clearfield{year}
\clearfield{month}
\clearfield{labelyear}}
\item
然后,它会在 的最后一个参数之后立即被使用\defbibenvirobnment
。要正确地做到这一点,需要做更多的工作。
对于您的另一个问题,\AtEveryBibitem{\clearfield{isbn}\clearfield{url}}
应该可以解决问题。
答案2
看自定义 BibLaTeX bib 有两个块和作者彼此之下?寻找一种解决表格书目问题的方法,减少怪癖。
这是稍微更新的版本奥黛丽的表格书目代码使用 biblatex 的表格书目。它适用于在左栏中生成类似“作者年份”的标签,在右侧生成其余的项目。
\documentclass{article}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage[bibstyle=authortitle, citestyle=authoryear, sorting=nyt, labeldateparts]{biblatex}
\makeatletter
% user-level command for printing tabular bibliography
\let\printbibtabular\printbibliography
\patchcmd{\printbibtabular}{\blx@printbibliography}{\bbx@printbibtabular}{}{}
\patchcmd{\printbibtabular}{\blx@printbibliography}{\bbx@printbibtabular}{}{}
\let\bbx@printbibtabular\blx@printbibliography
\patchcmd{\bbx@printbibtabular}{\blx@bibliography}{\bbx@bibtabular}{}{}
\patchcmd{\bbx@printbibtabular}
{\def\blx@theenv{bibliography}}{\def\blx@theenv{bibtabular}}{}{}
% underlying macros
\def\bbx@bibtabular#1{%
\blx@langstrings
\blx@bibheading\blx@theheading\blx@thetitle
\blx@bibnote\blx@theprenote
\begingroup
\blx@bibinit
\let\@noitemerr\@empty
\let\blx@noitem\blx@warn@bibempty
\ifnum\bibinitsep=\z@
\let\blx@initsep\relax
\fi
\ifnum\bibnamesep=\z@
\let\blx@namesep\relax
\fi
\csuse{blx@hook@bibinit}%
\csuse{blx@hook@bibinit@next}%
% copy filtered list of entries to internal list macro
\def\blx@do##1{%
\blx@ifdata{##1}{%
\begingroup
\blx@getdata{##1}
\blx@bibcheck
\iftoggle{blx@skipentry}{}{%
\global\let\blx@noitem\@empty
\listadd\blx@tempa{##1}}%
\endgroup}{}}
\let\blx@done\relax
\blx@listloop{#1}
% tabular output for each item in list macro
\def\do##1{\bbx@tab@label{##1} & \bbx@tab@item{##1} \\[\bibitemsep]}
\csuse{blx@env@\blx@theenv}%
\dolistloop{\blx@tempa}
\csuse{blx@endenv@\blx@theenv}%
\blx@bibnote\blx@thepostnote
\endgroup}
\def\bbx@tab@label#1{%
\blx@ifdata{#1}
{\begingroup
\blx@getdata{#1}%
\blx@bibcheck
\iftoggle{blx@skipentry}{}{%
\blx@setdefaultrefcontext{#1}%
\global\let\blx@noitem\@empty
\blx@setoptions@type\abx@field@entrytype
\blx@setoptions@entry
\blx@thelabelnumber
\addtocounter{instcount}\@ne
\csuse{bbx@tabenv@\blx@theenv}\relax}
\endgroup}
{}}
\def\bbx@tab@item#1{%
\blx@ifdata{#1}
{\begingroup
\blx@getdata{#1}%
\blx@bibcheck
\iftoggle{blx@skipentry}{}{%
\blx@setdefaultrefcontext{#1}%
\global\let\blx@noitem\@empty
\blx@setoptions@type\abx@field@entrytype
\blx@setoptions@entry
\csuse{blx@item@\blx@theenv}\relax
\blx@initsep
\blx@namesep
\csuse{blx@hook@bibitem}%
\blx@execute
\blx@initunit
\blx@anchor
\blx@beglangbib
\bibsentence
\blx@pagetracker
\blx@driver\abx@field@entrytype
\blx@postpunct
\blx@endlangbib}%
\endgroup}
{}}
% user-level command for defining tabular bibliography format
\newrobustcmd*{\defbibtabular}[5]{%
\long\csdef{blx@env@#1}{#2}%
\long\csdef{blx@endenv@#1}{#3}%
\long\csdef{bbx@tabenv@#1}{#4}%
\long\csdef{blx@item@#1}{#5}}
\makeatother
\newbibmacro*{date+extrayear}{%
\iffieldundef{labelyear}
{}
{\printtext[parens]{%
\printfield{issue}%
\setunit*{\addspace}%
\iffieldsequal{year}{labelyear}
{\printlabeldateextra}%
{\printfield{labelyear}%
\printfield{extrayear}}}}}%
\renewbibmacro*{date}{}%
\renewbibmacro*{issue+date}{}
\makeatletter
\newbibmacro{biblabel}{%
\begingroup
\DeclareFieldFormat{bibhyperref}{##1}%
\csuse{blx@hook@cite}%
\csuse{blx@hook@citekey}%
\citetrackerfalse\pagetrackerfalse\backtrackerfalse
\defcounter{maxnames}{\blx@maxcitenames}%
\usebibmacro{cite}%
\endgroup
}
\makeatother
%bibitem hook to suppress redundant sortname list
\newbibmacro*{omitlabelname}{%
\iffieldundef{labelnamesource}
{}
{\clearname{\thefield{labelnamesource}}}}
% demo new tabular bibliography format
\defbibtabular{bibtabular}
{\tabular{p{0.3\textwidth}p{0.7\textwidth}}}
{\endtabular}
{\usebibmacro{biblabel}}
{\usebibmacro{omitlabelname}}
% add multiline labels in default bibliography format
\defbibenvironment{bibliography}
{\list
{\usebibmacro{biblabel}}
{\setlength{\labelwidth}{0.3\textwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{%
\nobreak\strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}}
{\endlist}
{\item\usebibmacro{omitlabelname}}
\setlength{\bibitemsep}{\itemsep}
\addbibresource{biblatex-examples.bib}
\newcommand{\cmd}[1]{\texttt{\textbackslash #1}}
\begin{document}
\cite{vangennep:trans,companion,bertram,worman,sigfridsson,geer,knuth:ct:a,knuth:ct:b,knuth:ct:c}
\printbibliography[title={\cmd{printbibliography} with multiline labels}]
\printbibtabular[title={New \cmd{printbibtabular} command}]
\end{document}