Объедините различные типы команд cite, используя пакеты cite и multibib (обновление от 28 апреля)

Объедините различные типы команд cite, используя пакеты cite и multibib (обновление от 28 апреля)

Я использую пакет multibib для различения разных типов ссылок. В дополнение к \cite{}я определил команду \citemine{}.

Цитирование работает отлично, но иногда мне хотелось бы иметь ссылки обоих типов внутри одной скобки. То есть, вместо того, \cite{RefA}\citemine{RefB}чтобы получить [1][2], я хотел бы иметь [1,2].

Обновление 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}

и соответствующий библиотечный файл:

@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должно решить проблему.

Обратите внимание, что я также поместил цитату внутри \citeBothas [#1,\,#2], чтобы вставить небольшой пробел после запятой.

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

Я не знаю достаточно, чтобы multibibпонять, почему \citemineон не работает должным образом (он не работал ни до, ни после моего исправления); однако проблема с интервалами, упомянутая автором, решена.

\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}

введите описание изображения здесь

Связанный контент