Combine diferentes tipos de comandos de citação usando os pacotes cite e multibib (atualização em 28 de abril)

Combine diferentes tipos de comandos de citação usando os pacotes cite e multibib (atualização em 28 de abril)

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 \citeemite 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 \citecomo 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 \citeleftnã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 \citeBothdeve resolver o problema.

Note que também emiti a citação dentro de \citeBothas [#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 multibibsaber por que \citeminenã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}

insira a descrição da imagem aqui

informação relacionada