使用 cite 和 multibib 包组合不同类型的 cite 命令(4 月 28 日更新)

使用 cite 和 multibib 包组合不同类型的 cite 命令(4 月 28 日更新)

我使用 multibib 包来区分不同类型的参考文献。此外,\cite{}我还定义了命令\citemine{}

引用完全没问题,但有时我想将两种类型的引用放在一个括号内。也就是说,\cite{RefA}\citemine{RefB}我不想得到 [1][2],而是得到 [1,2]。

4 月 28 日更新:我找到了一个(糟糕的)解决方案,只是缺少一些小细节。我更新后的 MWE 确实导致 [1, 2],但我当然希望得到 [1, 2]。我很困惑,因为我不知道这个额外的空间可能来自哪里。任何帮助都非常感谢!

\documentclass[]{scrbook}

% bibstlye

\usepackage{cite}
\usepackage{multibib}

\newcites{mine}{my stuff}

\newcommand{\citeBoth}[2]{
    \renewcommand{\citeleft}{}
    \renewcommand{\citeright}{}
    [#1,#2]
    \renewcommand{\citeleft}{[}
    \renewcommand{\citeright}{]}
    }


\begin{document}

Two cite examples:

\cite{foo}
\cite{foo2}
\citemine{bar}

\citeBoth{\cite{foo, foo2}}{\citemine{bar}}

\bibliographystylemine{plain}
\bibliographymine{bibfile}

\bibliographystyle{plain} 
\bibliography{bibfile}

\end{document}

和相应的 bibfile:

@Article{foo,
  author={foo},
  title={foo},
  journal={foo},
  year={200},
  volume={60},
  number={23},
  pages={6641--8},
}

@Article{bar,
    author={foo},
    title={foo},
    journal={foo},
    year={200},
    volume={60},
    number={23},
    pages={6641--8},
}

@Article{foo2,
    author={foo2},
    title={foo2},
    journal={foo2},
    year={200},
    volume={60},
    number={23},
    pages={6641--8},
}

答案1

将我的评论变成答案......

多余的空格是由于 的实现\cite在引用的左括号前出现了一个空格,因此引用看起来像my citation [1]. 由于 OP 使用\cite作为内部的参数\citeBoth,所以需要一种方法来消除发出的空格,现在该空格出现在 的括号内\citeBoth

实现此目的的方法是重新定义,\citeleft而不仅仅是将其重新定义为空宏{},而是将其重新定义为取消跳过先前发布的空间。因此,\renewcommand{\citeleft}{\unskip}在定义中使用\citeBoth应该可以解决问题。

\citeBoth注意我还在as里面发出了 cite [#1,\,#2],以便在逗号后插入一个小空格。

\newcommand{\citeBoth}[2]{
    \renewcommand{\citeleft}{\unskip}
    \renewcommand{\citeright}{}
    [#1,\,#2]
    \renewcommand{\citeleft}{[}
    \renewcommand{\citeright}{]}
    }

我不太了解multibib为什么\citemine它不能正常工作(在我修复之前或之后它都不起作用);但是,OP 提到的间距问题已经解决。

\documentclass[]{scrbook}
\usepackage{filecontents}
\begin{filecontents}{bibfile.bib}
@Article{foo,
  author={foo},
  title={foo},
  journal={foo},
  year={200},
  volume={60},
  number={23},
  pages={6641--8},
}

@Article{bar,
    author={foo},
    title={foo},
    journal={foo},
    year={200},
    volume={60},
    number={23},
    pages={6641--8},
}

@Article{foo2,
    author={foo2},
    title={foo2},
    journal={foo2},
    year={200},
    volume={60},
    number={23},
    pages={6641--8},
}
\end{filecontents}
% bibstlye

\usepackage{cite}
\usepackage{multibib}

\newcites{mine}{my stuff}

\newcommand{\citeBoth}[2]{
    \renewcommand{\citeleft}{\unskip}
    \renewcommand{\citeright}{}
    [#1,\,#2]
    \renewcommand{\citeleft}{[}
    \renewcommand{\citeright}{]}
    }


\begin{document}

Two cite examples:
\cite{foo}
\cite{foo2}
\citemine{bar}

\citeBoth{\cite{foo, foo2}}{\citemine{bar}}

\bibliographystylemine{plain}
\bibliographymine{bibfile}

\bibliographystyle{plain} 
\bibliography{bibfile}

\end{document}

在此处输入图片描述

相关内容