Biblatex: Kaksi eri tyyliä ja lajittelua sisältävää bibliografiaa

MWE ongelmalleni:

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

Ongelma: Tarvitsen kaksi bibliografiaa, joista ensimmäinen on aakkosellinen ja lajiteltu tekijän nimen mukaan. Toinen numeerisessa tyylissä lajiteltu lainausjärjestyksen mukaan. Molemmilla ei ole yhteisiä viitteitä. Jotenkin etsin jotain tällaista biblatexistä:

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

Luulin, että biblatex on erityisesti kirjoitettu toimimaan useiden bibliografioiden kanssa, mutta en löytänyt yhtään muulla tavalla kuin MWE: ssä esitetty (joka on tietenkin hakata). Itse asiassa se toimii melko hyvin, kunnes haluan toisen lajittelun. Kun käytän

\newrefcontext[sorting=none] 

Lainausnumerot muuttuvat nolliksi.

Kommentit

  • biblatex on kirjoitettu tukemaan jaettuja / useita bibliografioita (monien muiden ominaisuuksien joukossa), mutta se ei ’ t virallista tukea erilaisten bibliografioiden sekoittamiseen tyylit yhdessä asiakirjassa.

Vastaa

Jos ohitat vaihtoehdon labelnumberbiblatex, voit käyttää numeerisia viittauksia jopa style=alphabetic -asetusten kanssa.

Cite-komento voi vaihtaa avainsanoja, joten voit käyttää \cite kaikkia merkintöjä huolimatta keyword.

Numeeriseen bibliografiaan meillä on määritellä uusi kirjallisuusympäristö, joka tulostaa numeeriset viittaukset. bibliographyNUM kopioidaan suoraan tiedostosta numeric.bbx. Määritä bibliografian lajittelu sanomalla

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

ennen numeerista bibliografiaa. Aikaisemmassa bibliografiassa käytetään yleistä lajittelujärjestelmää anyt, joka soveltuu alfa-tyyliseen bibliografiaan. Jos lajittelumallin määritys on välttämätöntä pitää paikallisena (koska numeerinen bibliografia on ennen aakkosnimikirjastoa), käytät

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

esimerkkilähtö

Kommentit

  • Toimii täydellisesti ja näyttää tyylikkäältä, kun olen asentanut biblatex + biber -paketin uudelleen (MikTex-käyttäjä). Halusin vain jättää tämän, jos joku ihmettelee ” alustamattomia arvo ” -virheitä. Poista myös kaikki tiedostot paitsi .tex, koska ne voivat aiheuttaa myös ongelmia. Hieno kiertotapa, kiitos.
  • @Jannik Sekä biblatex että BIberin päivitetyllä versiolla ” alustamattomat arvot ” lentävät ympäriinsä. Jos versiot ovat vanhempia tai don ’ eivät täsmää, yllä olevat eivät kuitenkaan toimi. Päivityksen jälkeen väliaikaisten tiedostojen poistaminen sattuu harvoin varmistaakseen, että vanhat tavarat eivät tartu ja aiheuta ongelmia.
  • Jos lisäät \newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite}, voit käyttää \usebibmacro{original-cite} uudessa \cite -määrityksessäsi voit lisätä minkä tahansa latauksessa valitsemasi tyylin (esim. authoryear, …) (korvaa \printfield{labelalpha}\printfield{extraalpha}).
  • @opatut Hieno idea. Joissakin tilanteissa koodin sijoittaminen on kuitenkin ratkaisevan tärkeää. Ei voi myöskään aina olla hyvä idea yksinkertaisesti jättää soittamatta vakiomakroa ollenkaan (varsinkin jos se monimutkaistuu ja suorittaa siivoustyötä, ajattelen ’ id = ”dc68719597”>

tyylit täällä). Täällä ei olisi ongelmaa, voisin tallentaa vain rivin siirtämällä\if...-kuvaa, mutta voit erottaa sen uudelleen.

  • @GandalfLechner Jos haluat säilyttääksesi alkuperäiset avainsanasi, voit tehdä hieman paremmin. Katso muokattu vastaus.
  • Vastaa

    Kiitos paljon. Halusin jakaa ongelman mukautetun version. Jain ruokalappuni luokkiin määrittelemällä eri lainaussanat. Se kopioitiin kiinteistä ajoverkkolähteistä, erityisesti biblatex: useita bibliografioita luokiteltujen eri .bib-tiedostojen mukaan , joten se ei ole paras käytäntö, mutta se toimii. Toivottavasti biblatex tukee tulevaisuudessa sekalaisia bibliografiatyylejä.

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

    Vastaa

    Tee numeerisia sitaatteja myös silloin, kun @moewe sanoo style=alphabetic.

    Eri lajittelujärjestyksille on paljon helpompi tapa, refcontext -ympäristö, joka vie lajitteluvaihtoehto. Luo ensin pääbibliografia Biblatexin avulla:

    \printbibliography[title=Bibliography, keyword=primary] 

    Luo sitten toinen lajikkeilla, suodattimilla ja tyyleillä liittämällä se refcontext parametreina.

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

    Tyhjä {} viimeisenä parametrina refcontext voit luoda tilapäisen ympäristön ilmoittamatta mitään muualta.

    Käytin tätä, kun kouluni vaati minun liittävän ansioluetteloni opinnäytetyömme loppuun, joten minun oli luotava kirjallisuus teostestani käänteisenä kronologisessa järjestyksessä paperille tyypillisen AZ-bibliografian lisäksi. Se oli paljon puhtaampaa kuin mitä minulla oli.

    Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *