Я использую пакет 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
должно решить проблему.
Обратите внимание, что я также поместил цитату внутри \citeBoth
as [#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}