在 tikzpictures 中使用 \cite 和 biber

在 tikzpictures 中使用 \cite 和 biber

我正在使用 biber 並想在 tikzpicture 中引用參考文獻。我跟著這個回答描述如何使用 bibtex 做到這一點並且它工作得很好,但是當切換到使用 biber 時,它不再工作了:

\documentclass{article}
\usepackage{tikz}

\usepackage[backend=biber]{biblatex}

\begin{document}

\begin{tikzpicture}[show/.style={circle,draw}]
\node[show]    (newpaper)    at    (0,2)    
    [label=right:{This 2011 paper ...}]    
    {\cite{newpaper}};
\node[show]    (oldpaper)   at     (0,0)    
     [label=right:{This paper came out in 1900 ...}]    
    {\cite{oldpaper}};
\draw[->]    (oldpaper) -- (newpaper);
\end{tikzpicture}


%\bibliographystyle{amsplain}
\begin{thebibliography}{10}
\bibitem{newerpaper}B. Becker, \emph{Even Newer Stuff}, 2012.
\bibitem{newpaper}C. Charles, \emph{New Stuff}, 2011.
\bibitem{oldpaper}H. Huckley, \emph{Old Stuff}, 1900.
\end{thebibliography}
\end{document} 

輸出範例

有誰知道一個解決方案,而我不必切換到使用 bibtex?

更新:

正如下面幾位指出的,我發布的原始程式碼很容易修復。我發現的實際錯誤是由於我的 LaTeX 程式碼較大而導致的,我發現了這個問題。這是存在問題的更新程式碼:

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{external}
\tikzexternalize[prefix=fig/]

\usepackage[backend=biber]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{newerpaper,
    author={B. Becker},
    title={Even Newer Stuff},
    date={2012}
}

@book{newpaper,
    author={C. Charles},
    title={New Stuff},
    date={2011}
}

@book{oldpaper,
    author={H. Huckley},
    title={Old Stuff},
    date={1900}
}

\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

%\tikzexternaldisable
\begin{tikzpicture}[show/.style={circle,draw}]
\node[show]    (newpaper)    at    (0,2)    
[label=right:{This 2011 paper ...}]    
{\cite{newpaper}};
\node[show]    (oldpaper)   at     (0,0)    
[label=right:{This paper came out in 1900 ...}]    
{\cite{oldpaper}};
\draw[->]    (oldpaper) -- (newpaper);
\end{tikzpicture}
%\tikzexternalenable

\printbibliography

\end{document} 

問題出在\tikzexternalize[prefix=fig/]命令上。我透過\tikzexternaldisable在 tikzpicture 之前和\tikzexternalenabletikzpicture 之後添加來解決這個問題。

答案1

正如評論中所建議的,您應該採用biblatex處理參考書目的方式,而不是手動進行。例如:

\documentclass{article}
\usepackage{tikz}

\usepackage[backend=biber]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@book{newerpaper,
    author={B. Becker},
    title={Even Newer Stuff},
    date={2012}
}

@book{newpaper,
    author={C. Charles},
    title={New Stuff},
    date={2011}
}

@book{oldpaper,
    author={H. Huckley},
    title={Old Stuff},
    date={1900}
}

\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\begin{tikzpicture}[show/.style={circle,draw}]
\node[show]    (newpaper)    at    (0,2)    
    [label=right:{This 2011 paper ...}]    
    {\cite{newpaper}};
\node[show]    (oldpaper)   at     (0,0)    
     [label=right:{This paper came out in 1900 ...}]    
    {\cite{oldpaper}};
\draw[->]    (oldpaper) -- (newpaper);
\end{tikzpicture}

\printbibliography

\end{document} 

其產生:

在此輸入影像描述

編輯:事實證明,這個問題本質上是biblatex/的正確使用問題之一biber,與 TikZ 關係不大,因此列出入門者清單biblatex可能會很方便:

相關內容