当我使用\bibliographystyle{plain}
并输入时Hello~\cite[Fig.~6]{wickerson15}.
,我得到如下信息:
你好[1,图6]。
我不喜欢这里的逗号分隔符,而希望我的\cite
命令产生
你好[1(图6)]。
做到这一点最简单的方法是什么?
答案1
这非常简单。;-)
负责最终打印引文的宏是\@cite
,标准定义是
% latex.ltx, line 6271:
\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
如果有可选参数,则将条件\if@tempswa
设置为真。\cite
\begin{filecontents*}{\jobname.bib}
@article{uthor2015,
author={A. Uthor},
title={A paper},
journal={Journal},
year={2015},
pages={1-10},
}
\end{filecontents*}
\documentclass{article}
\makeatletter
\renewcommand\@cite[2]{[{#1\if@tempswa\ (#2)\fi}]}
\makeatother
\begin{document}
Citation~\cite[p.~3]{uthor2015}.
\bibliographystyle{plain}
\bibliography{\jobname}
\end{document}
一种可能的解决方案natbib
(当使用数字引用时)如下。
\begin{filecontents*}{\jobname.bib}
@article{uthor2015,
author={A. Uthor},
title={A paper},
journal={Journal},
year={2015},
pages={1-10},
}
\end{filecontents*}
\documentclass{article}
\usepackage[numbers]{natbib}
\makeatletter
\def\NAT@cmt#1\fi{ (#1)\fi}
\makeatother
\begin{document}
Citation~\cite[p.~3]{uthor2015}.
Citation~\cite[Pre][post]{uthor2015}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
答案2
我后来意识到我曾是毕竟使用natbib
包;它是由我的文档类加载的。这意味着 egreg 的解决方案对我来说不起作用 - 也许natbib
没有使用\@cite
egreg 重新定义的命令?但是,以下是通过结合 Mico 和 Timm 的评论得出的
\setcitestyle{notesep={\ }}
\let\oldcite\cite
\renewcommand\cite[2][]{%
\ifx\\#1\\%
\oldcite{#2}%
\else%
\oldcite[(#1)]{#2}%
\fi}
效果很好。谢谢大家。
编辑。现在我正在使用biblatex
,下面的方法似乎对我有用:
\renewcommand*{\postnotedelim}{\space}
\let\oldcite\cite
\renewcommand\cite[2][]{%
\ifx\\#1\\%
\oldcite{#2}%
\else%
\oldcite[(#1)]{#2}%
\fi}