MWE for problemet jeg opplevde:
\documentclass{article} \usepackage{filecontents} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003 } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002 } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = www.test1.com/bild.jpg, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = www.test2.com/bild.jpg } \end{filecontents} \usepackage[backend = biber, defernumbers = true, style = alphabetic]{biblatex} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} %Append keywords to identify different bibliography entries. \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } %Declare new sorting scheme for refernence bibliography. \DeclareSortingScheme{appearance}{ \sort{\citeorder} } %Copied from numeric.cbx to imitate numerical citations. \providebool{bbx:subentry} \newbibmacro*{citenum}{%Note: the original macro was called "cite". I did not redefine "cite", but instead defined a new macro "citenum", because the author-year citations use the "cite" macro too. "\renewbibmacro*{cite}" would have caused all the author-year citations to become numeric too. \printtext[bibhyperref]{%If you ever want to use hyperref \printfield{prefixnumber}% \printfield{labelnumber}% \ifbool{bbx:subentry} {\printfield{entrysetcount}} {}}} %Copied from numeric.cbx to define a new numeric citation command for @online entries. \DeclareCiteCommand{\cnume}[\mkbibbrackets] {\usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{citenum}}%Note: this was originally "cite" but I changed it to "citenum" to avoid clashes with the author-year style. {\multicitedelim} {\usebibmacro{postnote}} \begin{document} The first two citations \cnume{LinkD01} and \cite{BookB02}. The others are \cnume{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] %Redefine the bibliography environment to imitate the numeric citation style \defbibenvironment{bibliographyNUM} {\list {\printfield[labelnumberwidth]{labelnumber}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\labelsep}{1em} \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hspace{-1.1em}} \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM,title=References, keyword=secondary, resetnumbers] \end{document}
Problemet: Jeg trenger to bibliografier, den første med alfabetisk stil og sortert etter forfatternavn. Den andre i numerisk stil sortert etter sitatrekkefølge. Begge har ingen vanlige referanser. På en eller annen måte søker jeg etter noe slikt i biblatex:
\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib}
Jeg trodde biblatex er spesielt skrevet for å jobbe med flere bibliografier, men jeg har ikke funnet noen annen måte enn den som vises i MWE (som åpenbart er et hack). Egentlig fungerer det ganske bra til jeg vil ha den andre sorteringen. Når jeg bruker
\newrefcontext[sorting=none]
Sitatetallene blir null.
Kommentarer
Svar
Hvis du klarer alternativet labelnumber
til biblatex
kan du bruke numeriske sitater selv med style=alphabetic
.
Sitatkommandoen kan byttes basert på nøkkelord, slik at du kan bruke \cite
for alle oppføringer uavhengig av keyword
.
For den numeriske bibliografien vil vi ha å definere et nytt bibliografimiljø som skriver ut numeriske sitater. bibliographyNUM
kopieres direkte fra numeric.bbx
. For å stille inn sorteringen for bibliografien, bare si
\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers]
før den numeriske bibliografien. Den forrige bibliografien vil bruke det globale sorteringsskjemaet anyt
som er passende for alfabetisk bibliografi. I tilfelle det er nødvendig å holde sorteringsskjemaoppgaven lokal (fordi den numeriske bibliografien kommer før alfabibliografien), bruker du
\begin{refcontext}[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{refcontext}
MWE
\documentclass{article} \usepackage[style=alphabetic, labelnumber, defernumbers=true, backend=biber]{biblatex} \usepackage{hyperref} % Append keywords to identify different bibliography entries. % appendstrict only appends if the field is nonempty, % we use that to add a comma to avoid mushing together two keywords \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifkeyword{secondary} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \defbibenvironment{bibliographyNUM} {\list {\printtext[labelnumberwidth]{% \printfield{labelprefix}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003, keywords = {hello}, } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002, } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = {www.test1.com/bild.jpg}, keywords = {bye}, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = {www.test2.com/bild.jpg}, } \end{filecontents} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} \begin{document} The first two citations \cite{LinkD01} and \cite{BookB02}. The others are \cite{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{document}
Kommentarer
- Fungerer helt fint og ser elegant ut etter at jeg har installert biblatex + biber-pakken på nytt (MikTex-bruker). Ville bare forlate dette hvis noen lurer på » ikke-initialiserte verdi » feil også. Sørg også for å slette alle filer unntatt .tex, da de også kan forårsake problemer. Fin løsning, takk.
- @Jannik Med en oppdatert versjon av både
biblatex
og BIber burde det ikke være » ikke-initialiserte verdier » som flyr rundt. Hvis versjonene er eldre eller ikke ‘ ikke stemmer overens, fungerer ikke ovenstående. Etter en oppdatering er det sjelden vondt å slette de midlertidige filene for å sikre at ingen gamle ting henger fast og forårsaker problemer. - Hvis du legger til
\newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite}
, kan du bruke\usebibmacro{original-cite}
inne i den nye\cite
-definisjonen din for å sette inn hvilken stil du valgte under belastning (f.eks. autentisk år, …) (erstatter\printfield{labelalpha}\printfield{extraalpha}
). - @opatut Fin idé. I noen situasjoner er det imidlertid viktig med plassering av koden. Det kan heller ikke alltid være en god ide å ikke bare kalle standardmakroen i det hele tatt (spesielt hvis det blir mer komplisert og utfører opprydningsarbeid, tenker jeg ‘ id = «dc68719597»>
stiler her). Her ville det ikke være noe problem, jeg kunne bare lagre en linje ved å flytte\if...
, men du kan skille den igjen.
Svar
Tusen takk. Jeg ønsket å dele min tilpassede versjon av problemet. Jeg delte smekken min i kategorier ved å definere forskjellige sitatord. Det ble kopiert faste drivnettkilder, spesielt biblatex: flere bibliografier kategorisert etter forskjellige .bib-filer , så det er ikke den beste fremgangsmåten, men det fungerer. Forhåpentligvis vil biblatex innfødt støtte blandede bibliografistiler i fremtiden.
\documentclass[fontsize=11pt,a4paper,bibliography=totoc]{scrbook} \usepackage[style=alphabetic,backend=biber,defernumbers = true]{biblatex} \addbibresource{bib/references.bib} \DeclareBibliographyCategory{pubA} \DeclareBibliographyCategory{contA} \DeclareBibliographyCategory{refs} \DeclareBibliographyCategory{relT} \defbibheading{pubA}{\section*{Publications of the Author}} \defbibheading{contA}{\section*{Contributions of the Author}} \defbibheading{refs}{\section*{References}} \defbibheading{relT}{\section*{Related Theses}} \newcommand*{\citeA}[2][]{\addtocategory{pubA}{#2}\cite[#1]{#2}} \newcommand*{\citeC}[2][]{\addtocategory{contA}{#2}\cite[#1]{#2}} \newcommand*{\citeR}[2][]{\addtocategory{refs}{#2}\cite[#1]{#2}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifcategory{refs} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \newcommand*{\citeT}[2][]{\addtocategory{relT}{#2}\cite[#1]{#2}} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} % important to get [] in bib \defbibenvironment{refsEnv} {\list {\printtext[labelnumberwidth]{% \printfield{prefixnumber}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{document} some text \citeR{<citekey>} \citeT{<citekey>}... \printbibheading[heading=bibintoc] \printbibliography[heading=subbibliography,title={Publications of the Author},category=pubA] \printbibliography[heading=subbibliography,title={Contributions of the Author},category=contA] \newrefcontext[sorting=none] \printbibliography[heading=subbibliography,title={References},category=refs,env=refsEnv,resetnumbers] \printbibliography[heading=subbibliography,title={Related Theses},category=relT] \end{document}
Svar
Gjør hva @moewe sier for å bruke numeriske sitater selv med style=alphabetic
.
For forskjellige sorteringsordrer er det en mye enklere måte, refcontext
-miljøet, som tar et sorteringsalternativ. Bruk først Biblatex til å generere hovedbibliografien din:
\printbibliography[title=Bibliography, keyword=primary]
Lag deretter den andre med forskjellige sorter, filtre og stiler ved å legge den i refcontext
med de som parametere.
\begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext}
Den tomme {}
som siste parameter for refcontext
lar deg opprette et ad hoc-miljø uten å erklære noe annet sted.
Jeg brukte dette da skolen min krevde at jeg inkluderte en CV på slutten av oppgaven, så jeg trengte å lage en bibliografi over verkene mine i omvendt retning. kronologisk rekkefølge i tillegg til den vanlige AZ-bibliografien for papiret. Det var mye renere enn det jeg hadde.
biblatex
er skrevet for å støtte splittede / flere bibliografier (blant mange andre funksjoner), men det ‘ t offisiell støtte for å blande forskjellige bibliografier stiler i ett dokument.