MWE for det problem, jeg stødte på:
\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 har brug for to bibliografier, den første med alfabetisk stil og sorteret efter forfatternavn. Den anden i numerisk stil sorteret efter citeret rækkefølge. Begge har ingen fælles referencer. På en eller anden måde søger jeg efter noget som dette i biblatex:
\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib}
Jeg troede, at biblatex er specielt skrevet til at arbejde med flere bibliografier, men jeg har ikke fundet nogen anden måde end den, der vises i MWE (som naturligvis er et hack). Faktisk fungerer det ret godt, indtil jeg vil have den anden sortering. Når jeg bruger
\newrefcontext[sorting=none]
Citeringsnumrene bliver nul.
Kommentarer
t officiel støtte, der blander forskellige bibliografier stilarter i et dokument.
Svar
Hvis du passerer indstillingen labelnumber
til biblatex
kan du bruge numeriske citater, selv med style=alphabetic
.
Cite-kommandoen kan skifte baseret på nøgleord, så du kan bruge \cite
til alle poster uanset keyword
.
For den numeriske bibliografi har vi at definere et nyt bibliografimiljø, der udskriver numeriske citater. bibliographyNUM
kopieres direkte fra numeric.bbx
. For at indstille sorteringen for bibliografien skal du bare sige
\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers]
før den numeriske bibliografi. Den tidligere bibliografi bruger det globale sorteringsskema anyt
, der er passende til alfabetisk bibliografi. Hvis det er nødvendigt at holde sorteringsskemaetildelingen lokal (fordi den numeriske bibliografi kommer før alfabibliografien), bruger 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 fint og ser elegant ud, efter at jeg geninstallerede biblatex + biber-pakke (MikTex-bruger). Ville bare lade dette være, hvis nogen undrer sig over ” ikke-initialiseret værdi ” fejl også. Sørg også for at slette alle filer undtagen .tex, da de også kan forårsage problemer. God løsning, tak.
- @Jannik Med en opdateret version af både
biblatex
og BIber skulle der ikke være nogen ” ikke-initialiserede værdier ” flyver omkring. Hvis versionerne er ældre eller
ikke stemmer overens, fungerer ovenstående dog ikke. Efter en opdatering gør det sjældent ondt at slette de midlertidige filer for at sikre, at ingen gamle ting sidder fast og forårsager problemer.
\newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite}
, kan du bruge \usebibmacro{original-cite}
inde i din nye \cite
definition for at indsætte den stil, du valgte ved indlæsning (f.eks. autentisk år, …) (erstatter \printfield{labelalpha}\printfield{extraalpha}
). \if...
rundt, men du kunne adskille den igen. Svar
Mange tak. Jeg ville dele min tilpassede version af problemet. Jeg delte min Bib i kategorier ved at definere forskellige citatord. Det blev kopieret faste drivnetkilder, især biblatex: flere bibliografier kategoriseret efter forskellige .bib-filer , så det er ikke den bedste praksis, men det fungerer. Forhåbentlig vil biblatex oprindeligt understøtte blandede bibliografistile 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
Gør hvad @moewe siger for at bruge numeriske citater, selv med style=alphabetic
.
For forskellige sorteringsordrer er der en meget lettere måde, refcontext
-miljøet, der tager en sorteringsmulighed. Brug først Biblatex til at generere din hovedbibliografi:
\printbibliography[title=Bibliography, keyword=primary]
Opret derefter din anden med forskellige slags, filtre og stilarter ved at omslutte den i refcontext
med dem som parametre.
\begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext}
Den tomme {}
som den sidste parameter i refcontext
lader dig oprette et ad hoc-miljø uden at erklære noget andetsteds.
Jeg brugte dette, da min skole krævede, at jeg inkluderede et CV i slutningen af min afhandling, så jeg havde brug for at generere en bibliografi over mine værker omvendt kronologisk rækkefølge ud over den sædvanlige AZ-bibliografi for papiret. Det var meget renere end hvad jeg havde.
biblatex
er skrevet til at understøtte split / multiple bibliografier (blandt mange andre funktioner), men det