Estou usando o pacote multibib para diferenciar diferentes tipos de referências. Além disso, \cite{}
defini o comando \citemine{}
.
Citar funciona perfeitamente bem, mas às vezes eu gostaria de ter referências de ambos os tipos dentro de um colchete. Isto é, em vez de \cite{RefA}\citemine{RefB}
resultar em [1][2], eu gostaria de ter [1,2].
Atualização em 28 de abril: cheguei a uma solução (desagradável) que falta apenas alguns pequenos detalhes. Meu MWE atualizado resulta em [1, 2], mas é claro que gosto de ter [1, 2]. Estou bastante confuso porque não tenho ideia de onde pode vir esse espaço adicional. Qualquer ajuda é apreciada!
\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}
e arquivo bib correspondente:
@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},
}
Responder1
Transformando meu comentário em uma resposta...
O espaço estranho é causado porque a implementação de \cite
emite um espaço antes do colchete esquerdo da citação, de modo que uma citação aparece como my citation [1].
Como o OP usa \cite
como argumento dentro de \citeBoth
, é necessário um meio para eliminar esse espaço emitido, que agora ocorre dentro os colchetes de \citeBoth
.
A maneira de conseguir isso é redefinir \citeleft
não apenas como uma macro vazia {}
, mas redefini-la para cancelar o salto do espaço emitido anteriormente. Assim, empregar \renewcommand{\citeleft}{\unskip}
na definição de \citeBoth
deve resolver o problema.
Note que também emiti a citação dentro de \citeBoth
as [#1,\,#2]
, para inserir um pequeno espaço após a vírgula.
\newcommand{\citeBoth}[2]{
\renewcommand{\citeleft}{\unskip}
\renewcommand{\citeright}{}
[#1,\,#2]
\renewcommand{\citeleft}{[}
\renewcommand{\citeright}{]}
}
Não sei o suficiente para multibib
saber por que \citemine
não está funcionando corretamente (não funcionou antes ou depois da minha correção); no entanto, o problema de espaçamento citado pelo OP está resolvido.
\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}