与……相关制作引文出版物清单我确实遇到了问题。我确实找到了如何列出给定出版物的引用的解决方案:
Cited by:
\begin{enumerate}
\forcsvfield{\itemcite}{usera}
\end{enumerate}}
我确实有很多引用,所以我想开发一个类似的宏,它只计算引用的数量。我的尝试是
\setcounter{refcounter}{0}
\begin{enumerate}
\forcsvfield{\addtocounter{refcounter}{1} }{usera}
\end{enumerate}
\ifthenelse{\value{refcounter}=0}
{} % do nothing
{Cited \arabic{refcounter} times}
它运行良好,可以计算并打印总引用数,但有一些副作用:它还会打印参考书目项目的标签标识符,而我并不需要它。我如何才能禁用打印该标签?
另一个问题:我在 bibitems 中使用了一个字段,例如
url = {\url{ http://www.sciencedirect.com/science/article/pii/0168900287912241}}
在 PDF 输出中显示为
网址:\url{http://www.sciencedirect.com/science/article/pii/0168900287912241}。
而不是敏感链接。
最后:我确实有像这样的字段
title = {CAMAC programming for PDP-11 computers: a modular, multiuser approach},
在印刷中会出现
“PDP-11 计算机的 CAMAC 编程:一种模块化、多用户方法”
我做错什么了?
与此同时,我创建了一个 MWE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage[defernumbers=true]{biblatex}
\usepackage{filecontents}
\usepackage[english,magyar]{babel}
% Variants of each could be added
\newcommand{\firstinit}{J.}
\newcommand{\firstname}{János}
\newcommand{\lastname}{Tóth}
\begin{filecontents}{\jobname.bib}
@Book{John1,
author = {Tóth J.},
title = {Computers \& Typesetting 1},
usera = {Mary}}
@Book{John2,
author = {Tóth, J. and Mary, M.},
title = {Computers \& Typesetting 2},
usera = {Mary}}
@Book{John3,
author = {Mary, M. and Tóth, J.},
title = {Computers \& Typesetting 3},
usera = {Mary}}
@Book{Mary,
author = {Mary, M. },
title = {Reference Computers \& Typesetting ref}
}
@Article { QT2014,
author = {Tóth, J.},
title ={Parallel to infinity}, journal = {TOPC},year = {2014},
pubstate = {In course of publication}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareBibliographyCategory{byname}
\newcounter{bynamecount}
\setcounter{bynamecount}{0}
\DeclareIndexNameFormat{byname}{% Test could be refined
\ifboolexpr{ test {\ifdefstring{\lastname}{#1}}
and ( test {\ifdefstring{\firstname}{#3}}
or test {\ifdefstring{\firstinit}{#4}} ) }
{\addtocategory{byname}{\thefield{entrykey}}%
\addtocounter{bynamecount}{1}}
{}}
\defbibcheck{byname}{%
\indexnames[byname]{author}%
\ifcategory{byname}
{}
{\skipentry}}
\renewbibmacro*{finentry}{%
\finentry%
\ifbibliography
{\iffieldundef{usera}
{}
{\vskip\bibitemsep Cited by:
\begin{enumerate}
\forcsvfield{\itemcite}{usera}
\end{enumerate}}}
{}}
\newcommand*{\itemcite}[1]{\item \fullcite{#1}\finentry}
% Adjust horizontal spacing - necessary only when the initial
% labelnumbers of entries in byname are large
\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}}
\newlength{\maxlabelnumberwidth}
\settowidth{\maxlabelnumberwidth}{\mkbibbrackets{\arabic{bynamecount}}}
\defbibenvironment{byname}
{\list
{\printfield[labelnumberwidth]{labelnumber}}
{\setlength{\labelwidth}{\maxlabelnumberwidth}%
\setlength{\leftmargin}{\maxlabelnumberwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\item}
\begin{document}
\nocite{*}
\printbibliography[check=byname,env=byname]
\end{document}
输出为
1M. Mary 和 J. Tóth。计算机与排版 3。引用:1. M. Mary。参考计算机与排版参考。[2] J. Tóth。?平行于无穷大?在:TOPC(2014)。正在出版中。[3] J. Tóth 和 M. Mary。计算机与排版 2。引用:1. M. Mary。参考计算机与排版参考。
它演示了 2 项:1./ 我预计列表中会有 4 项,但我只有 3 项(我的意思是:在某些不理解的情况下,某些项目不会出现在列表中)2./ 在第二项中,char“被替换为char?(我怀疑这与 Babel 有关,但与语言无关:我也在美国语言中看到过这种情况)
答案1
当您使用时, \forcsvfield{<handler>}{<field>}
每个元素<field>
都会作为参数传递给<handler>
,因此您需要定义使用该参数的处理程序。 在您的例子中,定义如下所示:
\newcommand{\mydo}[1]{\addtocounter{refcounter}{1}}
此后,您可以finentry
按如下方式修改 bib 宏:
\renewbibmacro{finentry}{%
\setcounter{refcounter}{0}%
\forcsvfield{\mydo}{usera}
\ifthenelse{\value{refcounter}=0}
{} % do nothing
{Cited \arabic{refcounter} times}
\finentry
}
对于url
,biblatex
有自己的机制来处理链接,并且字段的值url
用作文字(因此\url
不会执行其中的命令)。因此可以使用
url = {http://www.examaple.com}
代替
url = {\url{http://www.example.com}}
对于问题的最后一部分,问题似乎是由于和magyar
选项之间的相互作用,不提供任何样式。一种可能性是禁用 的自动语言功能,即babel
csquotes
magyar
csquotes
csquotes
\usepackage[autostyle=false]{csquotes}