Usando o LATEX, como posso ter uma lista de referências no final de cada seção? [fechado
-
21-09-2019 - |
Pergunta
Quero gerar a bibliografia para cada seção e tê -la no final da seção. Quando faço isso no momento, ele gera a bibliografia completa e a coloca após cada seção.
Existe uma maneira de isso ser feito?
O Conselho aqui diz
"O pacote CapítuloBib fornece uma seção de opções que coloca a bibliografia em uma seção* em vez de capítulo*, algo que faz sentido se houver uma bibliografia em cada capítulo. Essa opção não funcionará quando o Natbib também for carregado; em vez disso, adicione a opção para Natbib. "
Não entendo o que isso significa e tentei experimentar o que pensei que as opções são. Especificamente, o que significa "Adicione a opção ao Natbib"?
Minha pergunta subsequente (que evoluiu após a minha primeira foi resolvida) é não ter quebras de página entre as referências e a próxima seção.
Obrigado pela ajuda.
Solução
Se você está usando Biblatex, quanto a citando títulos de artigos, você pode usá -lo para produzir bibliografias no final de seções ou capítulos, ou até mesmo ter uma bibliografia combinada, onde são separadas pelo capítulo/seção. Como um pacote, pretende substituir "Babelbib, Bibtopic, Bibunits, Capítulobib, Cite, Inlinebib, Mlbib, Multibib, SplitBib".
Você pode colocar uma bibliografia após cada seção, de uma de três maneiras. Primeiro, embrulhe o texto da sua seção em um \begin{refsection}
/\end{refsection}
par, como tal
\section{SomeSectionName}
\begin{refsection}
% your text goes here
\printbibliography
\end{refsection}
\section{NextSection}
Segundo, depois de cada \section
Declaração que você coloca um \newrefsection
Declaração que termina a seção anterior e inicia a nova. E você precede o próximo \section
com um \printbibliography
declaração, novamente. Finalmente, existe um refsection
Opção de pacote que leva ou none
, part
, chapter
, section
, ou subsection
como um argumento. Para agrupar suas entradas bibliográficas por seção em uma bibliografia global que você usa refsegment
em vez disso, usando \bibbysegment
Para imprimir todos os segmentos em ordem. (\bibbysection
Também pode ser usado da mesma maneira para reflexões.)
Não sei quanto você terá que dividir seu texto, conforme a resposta de @Norman, mas com um pouco de experimentação, você pode descobrir.
Outras dicas
Além de
\usepackage[sectionbib]{natbib}
\usepackage{chapterbib}
Você terá que colocar cada seção em um arquivo .tex separado que você então \include
. Você terá que correr bibtex
em cada arquivo .tex separadamente.
NB usando \input
ao invés de \include
Evita quebras de página indesejadas, mas não criará o arquivo .aux que o Bibtex precisa fazer seu trabalho. Eu olhei para a definição de \include
, e não vejo como desativar a função de quebra de página, exceto desabilitar \clearpage
inteiramente. Você poderia tentar
\let\originalclearpage=\clearpage
\def\clearpage{\relax}
Logo depois do seu \begin{document}
, mas você pode ter que colocar alguns \originalclearpage
na mão.
@celenius - Se você realmente quer se livrar daquele quebra de página, aqui está um muito sujo truque para fazer isso ...
\makeatletter \let\O@@input@\@input@ \def\@noclearpage{\@ifnextchar\clearpage\@gobble\relax} \def\@input@#1{\O@@input@{#1}\@noclearpage} \let\O@@include\@include \def\@include{\expandafter\@noclearpage\O@@include} \let\O@include\include \def\include{\expandafter\@noclearpage\O@include} \makeatother
Basicamente, realizamos cirurgia no \include
macro para se livrar de todos os \clearpage
instâncias, mas a maneira mais limpa de fazer isso, como você pode ver, ainda é verdade sujo. Isso é terrivelmente quebradiço e provavelmente funcionará apenas para o article
classe, então se você estiver usando um diferente \documentclass
, Você não está com sorte. Eu basicamente derivei isso, permitindo \tracingcommands=1
e \tracingmacros=1
e gritando o .log
arquivo para \clearpage
para que eu pudesse invadir o que é chamado antes de inserir um \@noclearpage
.
Eu não recomendo esta solução - seria muito melhor examinar como chapterbib
funciona e conserte da maneira certa, sem depender \include
e o separado .aux
Arquivos que gera ... mas tenho certeza de que seria uma tarefa bastante difícil. Eu acho que outra solução alternativa seria escrever um comando para imitar \include
está quebrando .aux
arquivos, sem realmente fazer os inclui ...
EDIT: Ok, aqui está uma rapidinha
\makeatletter \newenvironment{auxfile}[1]{\relax \ifnum\@auxout=\@partaux \@latex@error{auxfile environments cannot be nested or \string\include d} \@eha \else\@changeaux{#1}\fi }{\immediate\closeout\@partaux\let\@auxout\@mainaux} \def\@changeaux#1{% \immediate\write\@mainaux{\string\@input{#1.aux}}% \let\@auxout\@partaux \immediate\openout\@partaux#1.aux% \immediate\write\@partaux{\relax}} \makeatother
Então você pode simplesmente inserir \begin{auxfile}{foo}...\end{auxfile}
e vai usar foo.aux
em vez do normal .aux
Arquivo. Isso é totalmente compatível com chapterbib
. Eu não acho que a CTAN tenha algo assim, então talvez eu o envie como uma mini-package.
Eu não tentei, mas como li, sugere:
\usepackage[sectionbib]{natbib} % Note the option in the optional argument
\usepackage{chapterbib}
Embora eu esteja apenas adivinhando a ordem correta dessas linhas.