Biblatex: Két különböző stílusú és rendezési bibliográfia

MWE az általam tapasztalt problémához:

\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} 

A probléma: Két bibliográfiára van szükségem, az első betűrendben és szerzőnév szerint rendezve. A második numerikus stílusban, idézési sorrend szerint rendezve. Mindkettőnek nincs közös hivatkozása. Valahogy ilyesmit keresek a biblatex-ben:

\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib} 

Azt hittem, hogy a biblatex kifejezetten több bibliográfiával való munkára készült, de még nem találtam más módon, mint amit az MWE mutat (ami nyilván egy hack). Valójában nagyon jól működik, amíg nem akarom a másik rendezést. Amikor használom

\newrefcontext[sorting=none] 

Az idézetek száma nullára változik.

Megjegyzések

  • biblatex az osztott / többszörös bibliográfiák támogatására van írva (a sok egyéb szolgáltatás mellett), de nem támogatja a ‘ hivatalos bibliográfia keverését stílusok egy dokumentumban.

Válasz

Ha átadja a labelnumber -től biblatex numerikus idézeteket használhat még a style=alphabetic esetén is.

A cite parancs a kulcsszavakat, így a \cite elemet minden bejegyzéshez használhatja, a keyword függetlenül.

A numerikus bibliográfiához új bibliográfiai környezet meghatározása, amely numerikus idézeteket nyomtat. A bibliographyNUM fájl közvetlenül átmásolásra kerül a numeric.bbx mappából. Az irodalomjegyzék rendezésének beállításához egyszerűen mondja ki a

\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] 

szót a numerikus bibliográfia előtt. Az előző irodalomjegyzék az alfa stílusú bibliográfiához megfelelő globális rendezési sémát fogja használni anyt. Abban az esetben, ha a rendezési séma hozzárendelését helyi szinten kell tartani (mivel a numerikus bibliográfia az alfa-bibliográfia elé kerül), akkor a következőt kell használnia:

\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} 

példa kimenet

Megjegyzések

  • Teljesen jól működik és elegánsnak tűnik, miután újratelepítettem a biblatex + biber csomagot (MikTex felhasználó). Csak el akarta hagyni ezt, ha valaki kíváncsi az ” unicialized value ” hibákra is. Ügyeljen arra is, hogy töröljön minden fájlt, kivéve a .tex fájlokat, mivel ezek is okozhatnak problémákat. Szép megoldás, köszönöm.
  • @Jannik A biblatex és a BIber egyaránt naprakész verziójával nem lehet ” inicializálatlan értékek ” repülnek. Ha a verziók régebbiek, vagy nem egyeznek

, a fentiek azonban nem fognak működni. Frissítés után ritkán fáj az ideiglenes fájlok törlése, hogy megbizonyosodjon arról, hogy nincsenek-e régi dolgok, és problémákat okoz.

  • Ha hozzáadja a \newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite} fájlt, használhatja a \usebibmacro{original-cite} az új \cite definíción belül a betöltéskor kiválasztott bármilyen stílus beszúrásához (pl. authoryear, …) (helyettesíti a \printfield{labelalpha}\printfield{extraalpha}).
  • @opatut Szép ötlet. Bizonyos helyzetekben mégis elengedhetetlen a kód elhelyezése. Nem biztos, hogy mindig is nagyszerű ötlet, ha egyszerűen nem hívjuk meg a szokásos makrót (különösen, ha ez bonyolultabb és tisztító munkát végez, akkor ‘ gondolkodom a -icomp stílusok itt). Itt nem lenne probléma, csak a \if... mozgatásával tudtam menteni egy sort, de ezt újra szétválaszthatta.
  • @GandalfLechner Ha szeretné az eredeti kulcsszavak megtartásához valamivel jobban tehet. Kérjük, olvassa el a szerkesztett választ.
  • Válasz

    Köszönöm szépen. Meg akartam osztani a probléma adaptált verzióját. A különféle idéző szavak meghatározásával kategóriákba osztottam a vállpántos anyagomat. Megmásolták a szilárd driftnet-forrásokat, különösen biblatex: több bibliográfia különböző .bib fájlok szerint kategorizálva , így nem a legjobb gyakorlat, de működik. Remélhetőleg a biblatex a jövőben natív módon támogatja a vegyes bibliográfiai stílusokat.

    \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} 

    Válasz

    Tegye azt, amit a @moewe mond, hogy numerikus idézeteket is használjon style=alphabetic.

    Különböző rendezési sorrendek esetén sokkal könnyebb módja van a refcontext környezetnek, amely egy rendezési lehetőség. Először a Biblatex segítségével állítsa elő fő bibliográfiáját:

    \printbibliography[title=Bibliography, keyword=primary] 

    Ezután hozza létre a másodikat különféle fajtákkal, szűrőkkel és stílusokkal az a refcontext paraméterekkel.

    \begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext} 

    Az üres {}, mint a refcontext utolsó paramétere lehetővé teszi, hogy ad hoc környezetet hozzon létre anélkül, hogy bármit deklarálna máshol.

    Ezt akkor használtam, amikor az iskolám megkövetelte, hogy a szakdolgozatom végén önéletrajzot csatoljak, ezért fordítva kellett elkészítenem a műveim bibliográfiáját. időrendi sorrendben a cikkhez szokásos AZ bibliográfia mellett. Sokkal tisztább volt, mint amim volt.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük