Usando LaTeX, come posso avere una lista di riferimenti alla fine di ogni sezione?

Voglio generare la bibliografia per ogni sezione, e sono alla fine della sezione. Quando faccio questo, al momento genera la completa bibliografia e posti al termine di ogni sezione.

C’è un modo in cui questo può essere fatto?

I consigli qui dice

“Il chapterbib pacchetto fornisce un
opzione sectionbib che mette la
bibliografia in un \section* invece di
\chapter*, qualcosa che abbia un senso
se c’è una bibliografia in ogni
il capitolo. Questa opzione non funzionerà
quando natbib è anche caricato; invece,
aggiungere l’opzione di natbib. “

Non capisco che cosa questo significa, e ho provato a sperimentare con quello che ho pensato le opzioni sono. In particolare, cosa significa “aggiungere l’opzione di natbib” significa?

La mia domanda successiva (che si è evoluto dopo il mio primo è stato risolto) è quello di non avere pagebreaks tra i riferimenti, e la prossima sezione.

Grazie per il vostro aiuto.

InformationsquelleAutor djq | 2010-03-23

 

4 Replies
  1. 6

    Se si utilizza Biblatex, come per citando i titoli degli articoli, si può utilizzare per produrre bibliografie, al fine di sezioni o capitoli, o addirittura hanno insieme una bibliografia in cui essi sono separati dal capitolo/sezione. Come un pacchetto, esso è destinato a sostituire il “babelbib, bibtopic, bibunits, chapterbib, citare, inlinebib, mlbib, multibib, splitbib.”

    Si può mettere una bibliografia alla fine di ogni sezione, in uno dei tre modi. Primo, avvolgere il testo di una sezione in un \begin{refsection}/\end{refsection} coppia, come ad

    \section{SomeSectionName}
    \begin{refsection}
    % your text goes here
    \printbibliography
    \end{refsection}
    \section{NextSection}
    

    Secondo, dopo ogni \section istruzione si mette un \newrefsection istruzione che termina la sezione precedente e inizia uno nuovo. E, si antepone il prossimo \section con un \printbibliography istruzione, di nuovo. Infine, c’è un refsection opzione di pacchetto che si sia none, part, chapter, section, o subsection come argomento. Per il gruppo di voci bibliografiche per la sezione globale bibliografia si utilizza refsegment invece, utilizzando \bibbysegment per la stampa di tutti i segmenti in ordine. (\bibbysection possono essere utilizzati allo stesso modo per ref-sezioni, troppo.)

    Non so quanto dovrai dividere il testo, come per @Norman risposta, ma con un po ‘ di sperimentazione si può capire.

    • Per inciso, io sono un fan di latexmk (ctan.tug.org/tex-archive/support/latexmk) che esegue automaticamente ogni programma in lattice ciclo come numero di volte necessario. Io sto utilizzando, e biblatex, per la mia tesi di laurea, e mi consente di risparmiare un sacco di problemi.
    • Hmmm, questo sembra grande, ma non riesco a farlo funzionare. Dopo aver installato Biblatex, ho provato a seguire l’esempio di cui sopra, ma non ho capito dove l’ \newrefsection va. (tutto ciò è molto emozionante, anche se – grazie!)
    • si suppone di andare a destra dopo il vostro \section dichiarazioni, invece di avvolgere l’intera sezione in un ambiente. Personalmente, preferisco utilizzare l’opzione di pacchetto come non è necessario preoccuparsi di aggiungere tutte le istruzioni aggiuntive.
    • Devo essere perso qualcosa – ho letto la parte di documentazione e può ottenere il primo esempio di \printbibliography di lavoro, ma il \begin{refsection} \printbibliography \end{refsection} non funziona.
    • Io onestamente non so. Provare a utilizzare l’opzione del pacchetto, invece, e vedere come funziona. Biblatex è ancora considerato software in versione beta, quindi ci possono essere le peculiarità che deve avere risolti.
  2. 10

    Oltre a

    \usepackage[sectionbib]{natbib}
    \usepackage{chapterbib}
    

    Si dovrà mettere ogni sezione separata .tex file che poi \include. Sarà necessario eseguire bibtex su ogni .tex file separatamente.

    N. B. Utilizzando \input piuttosto che \include evita le interruzioni di pagina indesiderati, ma non crea .aux file BibTeX deve fare il suo lavoro. Ho guardato la definizione di \include, e non vedo come disattivare la pagina di interruzione di funzione ad eccezione della disabilitazione \clearpage interamente. Si potrebbe provare

    \let\originalclearpage=\clearpage
    \def\clearpage{\relax}
    

    subito dopo l’ \begin{document}, ma potrebbe essere necessario mettere un po \originalclearpage a mano.

    • Ho finalmente capito che fuori! Grazie a tutti. La sfortunata conseguenza è che ora ho una interruzione di pagina tra ogni riferimento, e l’intestazione successiva. A parte il newclude pacchetto (che non sembra funzionare per me), ci sono altri approcci per questo?
    • Separare i tuoi capitoli in un file separato, anche solo in linea generale, una buona idea comunque una volta che hai una abbastanza a lungo documento a voler mettere i riferimenti al termine di ogni capitolo. Inoltre, avrai probabilmente bisogno di eseguire \bibliographystyle{<style>} e \bibliography{<bib-file>} alla fine di ogni capitolo.
    • Penso che avete bisogno di \include per ottenere un .aux file bibtex per lavorare con. Ho modificato la mia risposta per includere un hack che potrebbe sopprimere quelle interruzioni di pagina.
    • Ho guardato la definizione di \include, e la mia precedente idea non funziona. Ho modificato la mia risposta a suggerire che basta disattivare \clearpage del tutto, poi mettere in esplicita le interruzioni di pagina dove necessario.
    • Purtroppo non sembra funzionare, in quanto non riesco a compilare il documento quando posso includere il codice \let\originalclearpage=\clearpage \def\clearpage{\relax} (sto usando TexShop, per timore che le influenze cosa posso fare o non)
  3. 2

    @celenius – se si vuole veramente per sbarazzarsi di che l’interruzione di pagina, ecco un molto sporco trucco per farlo…

    \makeatletter 
    \let\[email protected]@[email protected]\@[email protected] 
    \def\@noclearpage{\@ifnextchar\clearpage\@mangiarsi\relax} 
    \def\@[email protected]#1{\[email protected]@[email protected]{#1}\@noclearpage} 
    \let\[email protected]@include\@includono 
    \def\@include{\expandafter\@noclearpage\[email protected]@include} 
    \let\[email protected]\includono 
    \def\include{\expandafter\@noclearpage\[email protected]} 
    \makeatother

    Fondamentalmente eseguire un intervento chirurgico sul \include macro per sbarazzarsi di tutti i \clearpage istanze, ma il modo più pulito per fare questo, come si può vedere, è ancora davvero sporco. Questo è terribilmente fragile e probabilmente solo per article classe, quindi se si utilizza un diverso \documentclass, sei fuori di fortuna. In pratica ho ricavato questo, consentendo \tracingcommands=1 e \tracingmacros=1 e un grep la .log file per \clearpage in modo che io possa hack ciò che si chiama prima di inserire un \@noclearpage.

    Io non consiglio questa soluzione sarebbe molto meglio esaminare come chapterbib opere e risolvere nel modo giusto, senza a seconda \include e separato .aux file che genera… ma io sono positivo che sarebbe un bel compito difficile. Credo che un’altra soluzione ci sarebbe da scrivere un comando per emulare \include‘s la rottura di .aux file, senza in realtà fare l’include…


    EDIT: ok, ecco una sveltina

    \makeatletter 
    \newenvironment{auxfile}[1]{\relax 
    \ifnum\@auxout=\@partaux 
    \@[email protected]{auxfile ambienti non possono essere nidificati o \string\d} 
    \@eha 
    \else\@changeaux{#1}\fi 
    }{\immediate\closeout\@partaux\let\@auxout\@mainaux} 
    \def\@changeaux#1{% 
    \immediate\scrivere\@mainaux{\string\@input{#1.aux}}% 
    \let\@auxout\@partaux 
    \immediate\openout\@partaux#1.aux% 
    \immediate\scrivere\@partaux{\relax}} 
    \makeatother

    Quindi è possibile inserire solo \begin{auxfile}{foo}...\end{auxfile} di utilizzo foo.aux invece del normale .aux file. Questo è completamente compatibile con chapterbib. Non credo CTAN ha nulla di simile, così magari ti presenta come un mini-pacchetto.

    • Wow! Grazie per questo; che cos’è e cosa devo fare con esso? Ho provato a mettere nel preambolo della principale e l’inizio dei miei capitoli.
    • Questo basta a definire un ambiente – si può mettere il \newenvironment definizione nel vostro principale preambolo, quindi utilizzare \begin{auxfile}{sec1}...\bibliographystyle{...}\bibliography{...}\end{auxfile} per incapsulare le sezioni che hanno bisogno di un loro bavaglini, piuttosto che utilizzando \include.
    • Purtroppo non funziona per più di una sezione. L’ho provato per una sezione e è andato tutto bene; una seconda sezione il compilatore ha detto che c’erano illegali errori. “Un livello-1 ausiliario file: test.aux Illegale, un altro \bibstyle di comando-riga 5 del file di test.aux : \bibstyle : {chicago} sto saltando ciò che resta di questo comando Illegale, un altro \bibdata di comando-riga 6 del file di test.aux : \bibdata : {ref} sto saltando ciò che resta di questo comando file di Database #1: rif.bib
    • Non del tutto sicuro di quello che contesto è qui – chi ti ha dato errori? Assumo che è bibtex. È necessario eseguire bibtex su aux nomi di base, non il principale. Che è, se si dispone principale.tex che la rende sez1.aux e sec2.aux, eseguire bibtex sec1 e bibtex sec2 e non bibtex main.
    • Quando uso questo ora funziona (riferimenti distinti per sezione – molto bello!), tuttavia ho ancora ottenere l’interruzione di pagina dopo ogni serie di riferimenti.
  4. 2

    Non l’ho ancora provato ma ho letto che si suggerisce:

    \usepackage[sectionbib]{natbib} % Note the option in the optional argument
    \usepackage{chapterbib}
    

    se sono solo indovinare il corretto ordine delle righe.

    • Grazie, ora capisco che l’argomento opzionale è. Ho provato in entrambi gli ordini, e, purtroppo, non dà gli stessi risultati (elenca tutti i riferimenti alla fine di ogni sezione, piuttosto che specifiche rif utilizzato).
    • Il natbib documenti sostengono che questi lavorano in ordine.

Lascia un commento