biblatex 引用存在小问题

biblatex 引用存在小问题

与……相关制作引文出版物清单我确实遇到了问题。我确实找到了如何列出给定出版物的引用的解决方案:

  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
}

对于urlbiblatex有自己的机制来处理链接,并且字段的值url用作文字(因此\url不会执行其中的命令)。因此可以使用

url = {http://www.examaple.com}

代替

url = {\url{http://www.example.com}}

对于问题的最后一部分,问题似乎是由于和magyar选项之间的相互作用,不提供任何样式。一种可能性是禁用 的自动语言功能,即babelcsquotesmagyarcsquotescsquotes

\usepackage[autostyle=false]{csquotes}

相关内容