Como excluir citações no frontmatter da ordenação bibliográfica usando o bibtex?

Como excluir citações no frontmatter da ordenação bibliográfica usando o bibtex?

Na minha tese de doutorado devo incluir algumas páginas que frontmatterdivulgam que alguns capítulos foram publicados como artigos, incluindo citações aos artigos. Essas citações aparecem então como [1], [2], etc., pois são as primeiras a serem usadas.

Como resultado, na minha introdução, a primeira citação termina como [5]. Existe uma maneira de forçar o bibtex a realmente começar a ordenar minhas citações a partir da introdução (em mainmatter) para que essas citações comecem em [1]e as que estão em frontmattersejam contadas no final?

Estou usando o unsrtestilo sem pacotes extras e a reportclasse document.

Responder1

Você deve ser capaz de usar

{\csname @fileswfalse\endcsname\cite{aaa}}

em seu assunto inicial e então

\nocite{aaa}

no final.

Isso faz uma citação normal onde você precisa, mas impede a gravação da linha bibcite no arquivo aux. então você precisa mais \nocitetarde para escrever no arquivo aux e colocar a entrada na bibliografia gerada.

Responder2

Você pode modificar frontmattere mainmattercom a ideia de David:

\documentclass{book}

\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\@citexOrig\@citex
\g@addto@macro\frontmatter{%
\def\@citex[#1]#2{\leavevmode
  \let\@citea\@empty
  \@cite{\@for\@citeb:=#2\do
    {\@citea\def\@citea{,\penalty\@m\ }%
     \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
%     \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
     \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
       \G@refundefinedtrue
       \@latex@warning
         {Citation `\@citeb' on page \thepage \space undefined}}%
       {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}%
   \AtEndDocument{\nocite{#2}}%
  }%
}
\g@addto@macro\mainmatter{\LetLtxMacro\@citex\@citexOrig}
\makeatother

\usepackage{lipsum}
\begin{document}
\frontmatter
frontmatter Text \cite{article-full} and \cite{article-minimal}

\mainmatter
mainmatter Text \cite{book-full} and \cite{book-minimal}

\bibliography{xampl}
\bibliographystyle{unsrt}

\end{document}

Claro que você pode chegar ao mesmo com uma redefinição de\cite

\documentclass{book}

\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\citeOrig\cite
\g@addto@macro\frontmatter{%
 \renewcommand*\cite[2][]{%
   \ifx\relax#1\relax {\@fileswfalse\citeOrig{#2}}\else {\@fileswfalse\citeOrig[#1]{#2}}\fi%
    \AtEndDocument{\nocite{#2}}%
  }%
}
\g@addto@macro\mainmatter{\LetLtxMacro\cite\citeOrig}
\makeatother

\usepackage{lipsum}
\begin{document}
\frontmatter
frontmatter Text \cite{article-full} and \cite{article-minimal}

\mainmatter
mainmatter Text \cite{book-full} and \cite{book-minimal}

\bibliography{xampl}
\bibliographystyle{unsrt}

\end{document}

Ambas soluções baseadas na ideia fornecida por David.

informação relacionada