multibib Problem mit Label und unsrtdin

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: multibib Problem mit Label und unsrtdin

Re: multibib Problem mit Label und unsrtdin

von MoeWe » So 7. Jun 2020, 14:59

Ohne Minimalbeispiel ist das natürlich etwas schwierig nachzuvollziehen, aber hier mal ein Beispiel, wie man sich eine Art selektives \nocite{*} bastelt, dass nicht für die Einträge aus references.bib gilt.

\documentclass[11pt]{article}

\usepackage[backend=biber, style=numeric, defernumbers=true]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite]{
    \map{
      \perdatasource{references.bib}
      \step[nocited=true, final]
      \step[entrynull]
    }
    \map{
      \perdatasource{referencesA.bib}
      \step[fieldset=keywords, fieldvalue={,}, appendstrict]
      \step[fieldset=keywords, fieldvalue=A, append]
    }
    \map{
      \perdatasource{referencesB.bib}
      \step[fieldset=keywords, fieldvalue={,}, appendstrict]
      \step[fieldset=keywords, fieldvalue=B, append]
    }
  }
}

\begin{filecontents}{references.bib}
@inproceedings{Ref1,
  title     = {The Title},
  year      = {2001},
  booktitle = {The book},
  author    = {The Author},
}
@inproceedings{Ref2,
  title     = {The Title},
  year      = {2002},
  booktitle = {The book},
  author    = {The Buthor},
}
@inproceedings{Ref3,
  title     = {The Title},
  year      = {2003},
  booktitle = {The book},
  author    = {The Cuthor},
}
\end{filecontents}
\begin{filecontents}{referencesA.bib}
@inproceedings{Ref1A,
  title     = {The TitleA},
  year      = {2000},
  booktitle = {The bookA},
  author    = {The authorA},
}
\end{filecontents}
\begin{filecontents}{referencesB.bib}
@inproceedings{Ref1B,
  title     = {The TitleB},
  year      = {2000},
  booktitle = {The bookB},
  author    = {The authorB},
}
\end{filecontents}
\addbibresource{references.bib}
\addbibresource{referencesA.bib}
\addbibresource{referencesB.bib}


\begin{document}
Citation from bib \autocite{Ref1,Ref2}

\nocite{*}
\printbibliography[notkeyword=A,notkeyword=B, title={Bib}]
\newrefcontext[labelprefix=A]
\printbibliography[keyword=A, title={Bib A}]
\newrefcontext[labelprefix=B]
\printbibliography[keyword=B, title={Bib B}]
\end{document}

Re: multibib Problem mit Label und unsrtdin

von Nik84 » So 7. Jun 2020, 13:32

MoeWe hat geschrieben:
So 7. Jun 2020, 12:59

Bei `biblatex` ist es in der Tat nicht ganz so einfach, `\nocite{*}` auf einzelne `.bib`-Dateien anzuwenden. Aber in einigen Fällen kann man durchaus eine Alternative finden. Es kommt dann aber auf Deine genauen Wünsche an. (In `biblatex` ist es meist viel schöner, Werke nicht mittels der Zuordnung zu bestimmten `.bib`-Dateien zu gruppieren, sondern andere Marker wie das `keywords`-Feld zu benutzen.)

Also, im Grunde habe ich 3 bib-files (Quellen, eigene Veröffentlichungen und betreute Abschlussarbeiten). Die beiden letzteren möchte ich vollständig, also auch ohne Zitat, im Literaturverzeichnis stehen haben. Und dafür müsste ich auch nicht unbedingt alles in seperaten bibfiles stehen haben (wie du schreibst ginge es ja auch mit keywords).

Ich hatte biblatex mit biber schon vollständig umgesetzt. Die Probleme mit nocite konnte ich nicht lösen. Wenn es eine Möglichkeit gibt, ohne Zitat alles zu referenzieren, was ein bestimmtes Keyword hat (praktisch \nocite mit keyword), dann könnte ich das so machen. Aber wie gesagt, ich habe es nicht auf Anhieb hinbekommen (Mit nocite in einer eigenen refsection hat der counter irgendwie nicht hochgezählt, keine Ahnung warum. Was funktioniert hätte: Am Anfang des Dokuments alles einzeln mit Autocite zitieren auf einer seperaten Seite und diese Seite dann aus dem PDF nachträglich löschen, aber das war alles irgendwie unschön).

LG
Nik

Re: multibib Problem mit Label und unsrtdin

von MoeWe » So 7. Jun 2020, 12:59

Nik84 hat geschrieben:
So 7. Jun 2020, 12:29

Allerdings: die fraglichen typografischen Eigenschaften, insbesondere das mit dem Semikolon, stören mich auch. Ich könnte mir demnach auch vorstellen, den Stil zu wechseln. Ich wollte mal den von MoeWe vorgeschlagene Standard DIN ISO 690 probieren, nur welchen Stil müsste ich hierfür verwenden, um auch numerische Zitate (ggfls mit Label) mit Sortierung nach Zitierreihenfolge zu erhalten?

Nur zur Klarstellung, ich würde niemals jemandem ISO 690 empfehlen. Ich habe nur die Tatsache erwähnt, dass DIN 1505-2 inzwischen von ISO 690 abgelöst wurde. Auch an ISO 690 finde ich einige Dinge merkwürdig, gerade wenn man die im Stil eigentlich nicht verbindlichen Teile der Beispiele (Zeichensetzung, All Caps, ...) auch als präskriptiven Teil der Norm interpretiert. Wie dem auch sei. Mir ist kein BibTeX-Stil bekannt, der ISO 690 implementieren würde. biblatex-iso690 implementiert die tschechische Übersetzung von ISO 690 (ČSN ISO 690), die, zumindest wurde mir das gesagt, einige Dinge etwas strenger interpretiert als die echte ISO 690 (zum Beispiel sind da die furchtbaren ALL CAPS für Namen offenbar Pflicht).

Numerische Stile mit Sortierung in Zitierreihenfolge gibt es einige. Die natbib-Stile (hier also unsrtnat) sind sicherlich eine solide Wahl in der BibTeX-Welt. Das Problem ist, dass die meisten Stile nur Englisch sprechen. Wenn Du ein deutsches Literaturverzeichnis möchtest ("und" statt "and", "S." statt "pp.", ...), dann gibt es babelbib (sonst sind mir auf die Schnelle auch nur din1505 und dinat bekannt, die ja beide den veralteten DIN1505-2-Standard implementieren, und jurabib, das glaub ich keinen numerischen Stil hat, aber auch nicht mehr gepflegt wird; es gibt sicher noch ein paar andere Stile). Die meisten, die heutzutage auf ein deutsches Literaturverzeichnis Wert legen, werden wohl biblatex nutzen.

Bei biblatex ist es in der Tat nicht ganz so einfach, \nocite{*} auf einzelne .bib-Dateien anzuwenden. Aber in einigen Fällen kann man durchaus eine Alternative finden. Es kommt dann aber auf Deine genauen Wünsche an. (In biblatex ist es meist viel schöner, Werke nicht mittels der Zuordnung zu bestimmten .bib-Dateien zu gruppieren, sondern andere Marker wie das keywords-Feld zu benutzen.)

Re: multibib Problem mit Label und unsrtdin

von Nik84 » So 7. Jun 2020, 12:29

Hey, danke für die Rückmeldungen. Mit biber hatte ich so meine Probleme, da es dort keine (einfache) Möglichkeit für /nocite{*} für die einzelnen bibfiles gegeben hat. Daher habe ich meinen unsrtdin.bst nach dem Vorschlag von MoeWe (danke dafür!) angepasst, und das funktioniert jetzt auch. Super!

Allerdings: die fraglichen typografischen Eigenschaften, insbesondere das mit dem Semikolon, stören mich auch. Ich könnte mir demnach auch vorstellen, den Stil zu wechseln. Ich wollte mal den von MoeWe vorgeschlagene Standard DIN ISO 690 probieren, nur welchen Stil müsste ich hierfür verwenden, um auch numerische Zitate (ggfls mit Label) mit Sortierung nach Zitierreihenfolge zu erhalten?

Danke aber schon jetzt für die Hinweise, das hat mir schon echt geholfen.

LG
Nik

Re: multibib Problem mit Label und unsrtdin

von MoeWe » Mo 1. Jun 2020, 09:51

Das liegt an der etwas merkwürdigen Eigenart von unsrtdin, obwohl es ein numerischer Stil ist, das optionale Argument von \bibitem für ein eigenes (dann eigentlich immer nicht numerisches) Zitierlabel zu nutzen. Während plain z.B. in der .bbl-Datei, die LaTeX für die Zitate und das Literaturverzeichnis einliest,

\begin{thebibliography}{1}

\bibitem{Ref1A}
The authorA.
\newblock The titlea.
\newblock In {\em The bookA}, 2000.

\end{thebibliography}

produziert, macht unsrtdin

\begin{thebibliography}{2}

% this bibliography is generated by unsrtdin.bst [8.2] from 2005-12-21

\providecommand{\url}[1]{\texttt{#1}}
\expandafter\ifx\csname urlstyle\endcsname\relax
  \providecommand{\doi}[1]{doi: #1}\else
  \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi

\bibitem[1]{Ref1B}
\textsc{authorB}, The:
\newblock The TitleB.
\newblock {In: }\emph{The bookB}, 2000

\end{thebibliography}

Wenn das optionale Argument von \bibitem verwendet wird, dann unterstützt multibib die Option labeled faktisch nicht mehr. Man kann multibib etwas auf die Sprünge helfen, indem man den Code, den es für \@bibitem (\bibitem ohne optionales Argument) nutzt, auch auf \@lbibitem (\bibitem mit optionalem Argument) ausbreitet. Schön anzusehen ist das nicht, aber es funktioniert.

\documentclass[11pt]{article}

\usepackage[resetlabels,labeled]{multibib}

\makeatletter
% Code für \@lbibitem analog zum Code für \@bibitem zugefügt
\def\newcites#1#2{%
  \def\@suffixlist{#1,}%
  \@for\@newrefname:=#2\do{%
    \mylop\@suffixlist\to\@suffix
    \expandafter\protected@edef\csname refname\@suffix\endcsname
      {\@newrefname}%
    \if@filesw
      \expandafter\newwrite\csname @auxout\@suffix\endcsname
      \expandafter\edef\csname @auxout\@suffix name\endcsname{\@suffix}%
      \begingroup
        \makeatletter
        \@input@{\csname @auxout\@suffix name\endcsname .aux}%
      \endgroup
      \immediate\openout\csname @auxout\@suffix\endcsname
                        \csname @auxout\@suffix name\endcsname .aux
    \fi
    \@for\@citename:=\@mb@citenamelist\do{%
      \expandafter\edef\csname \@citename\@suffix\endcsname{%
        \let\noexpand\@citex\noexpand\mb@@citex
        \let\noexpand\@newciteauxhandle\csname @auxout\@suffix\endcsname
        \noexpand\csname\@citename\endcsname}%
    }%
    \expandafter\edef\csname nocite\@suffix\endcsname##1{{%
      \let\noexpand\@auxout\csname @auxout\@suffix\endcsname
      \noexpand\nocite{##1}}}%
    \iflabeled % if option labeled
      \expandafter\edef\csname @bibitem\@suffix\endcsname##1{%
        \noexpand\item
        \noexpand\if@filesw \noexpand\immediate\noexpand\write\noexpand\@auxout
        {\noexpand\string\noexpand\bibcite{##1}%
           {\@suffix\noexpand\the\noexpand\value{\noexpand\@listctr}}}%
        \noexpand\fi
        \noexpand\ignorespaces}%
      \expandafter\edef\csname @lbibitem\@suffix\endcsname[##1]##2{%
        \noexpand\item[\noexpand\@biblabel{##1}\noexpand\hfill]
        \noexpand\if@filesw
          {\noexpand\let\noexpand\protect\string\noexpand
           \noexpand\immediate
           \noexpand\write\noexpand\@auxout{%
             \noexpand\string\noexpand\bibcite{##2}{\@suffix##1}}}
       \noexpand\fi\noexpand\ignorespaces}%
      \expandafter\edef\csname @biblabel\@suffix\endcsname##1{[\@suffix##1]}%
    \fi % end if option labeled
    \expandafter\edef\csname bibliography\@suffix\endcsname##1{{%
      \let\noexpand\temp@auxout\noexpand\@auxout
      \let\noexpand\addtocontents\noexpand\mb@addtocontents
      \let\noexpand\@auxout\csname @auxout\@suffix\endcsname
      \let\noexpand\jobname
         \expandafter\noexpand\csname @auxout\@suffix name\endcsname
      \let\noexpand\refname
          \expandafter\noexpand\csname refname\@suffix\endcsname
      \let\noexpand\bibname
          \expandafter\noexpand\csname refname\@suffix\endcsname
      \iflabeled
        \let\noexpand\@bibitem
            \expandafter\noexpand\csname @bibitem\@suffix\endcsname
        \let\noexpand\@lbibitem
            \expandafter\noexpand\csname @lbibitem\@suffix\endcsname
        \let\noexpand\@biblabel
            \expandafter\noexpand\csname @biblabel\@suffix\endcsname
      \fi
      \noexpand\bibliography{##1}%
      }}
    \expandafter\edef\csname bibliographystyle\@suffix\endcsname##1{%
      \noexpand\if@filesw
        \noexpand\immediate\noexpand\write\csname @auxout\@suffix\endcsname
          {\noexpand\string\noexpand\bibstyle{##1}}%
      \noexpand\fi}
   }%
}
\makeatother

\begin{filecontents}{references.bib}
@inproceedings{Ref1,
  title     = {The Title},
  year      = {2000},
  booktitle = {The book},
  author    = {The author},
}
\end{filecontents}
\begin{filecontents}{referencesA.bib}
@inproceedings{Ref1A,
  title     = {The TitleA},
  year      = {2000},
  booktitle = {The bookA},
  author    = {The authorA},
}
\end{filecontents}
\begin{filecontents}{referencesB.bib}
@inproceedings{Ref1B,
  title     = {The TitleB},
  year      = {2000},
  booktitle = {The bookB},
  author    = {The authorB},
}
\end{filecontents}

\newcites{A,B}{{The other list},{And annother list}}

\begin{document}
Citation from bib \cite{Ref1} and bib A \citeA{Ref1A} and at bib B \citeB{Ref1B}.

\bibliographystyle{unsrtdin}
\bibliography{references}
\bibliographystyleA{unsrtdin}
% multibib funktioniert nicht wenn statt plain unsrtdin verwendet wird
\bibliographyA{referencesA}
\bibliographystyleB{unsrtdin}
\bibliographyB{referencesB}
\end{document}
------

Ein anderer Lösungsansatz wäre es, unsrtdin die oben erwähnte Unart auszutreiben, das numerische Label in \bibitem zu setzen.

Dafür muss man in einer umbenannten Kopie(!) von unsrtdin.bst (sagen wir unsrtdin-nolab.bst) den Block

FUNCTION {output.bibitem}
{ newline$
  "\bibitem[" write$
  label write$%
  "]{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

auf

FUNCTION {output.bibitem}
{ newline$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

verkürzen.

Füg dann noch einen Kurzen Kommentar zu Beginn der Datei mit der Änderung und dem Datum hinzu. Der Unterschied zu unsrtdin.bst in diff ist dann

--- unsrtdin.bst	2006-02-13 18:40:12.000000000 +0100
+++ unsrtdin-nolab.bst	2020-06-01 09:28:43.104700200 +0200
@@ -1,3 +1,6 @@
+%%%% unsrtdin-nolab.bst
+%%%% 2020-06-01
+%%%% avoid numeric labels in \bibitem
 %%  UNSRTDIN.BST        Ausgabe [8.2]      2006-01-02
 %%       mit doi-, urn-, url-Funktionen
 %%       ersetzt UNSRTDIN.BST       Ausgabe [8.1b3]  22.2.2005
@@ -286,9 +289,7 @@
 
 FUNCTION {output.bibitem}
 { newline$
-  "\bibitem[" write$
-  label write$%
-  "]{" write$
+  "\bibitem{" write$
   cite$ write$
   "}" write$
   newline$

Wenn Du nicht weißt, wo Du unsrtdin.bst finden kannst, dann kannst Du die Datei mit kpsewhich unsrtin.bst in der Kommandozeile auf Deinem Rechner aufspüren. Du kannst die Datei aber auch von CTAN runterladen: https://ctan.org/tex-archive/biblio/bib ... an/din1505

Beachte, dass Deine umbenannte Kopie unsrtdin-nolab.bst an einem Ort sein muss, wo BibTeX sie finden kann. Für einmalige Anwendung ist es am einfachsten, die Datei in den gleichen Ordner zu legen, in dem auch Deine Haupt-TeX-Datei liegt. Siehe auch https://texfaq.org/FAQ-inst-wlcf

----

Wenn Dich niemand zwingt, unsrtdin zu verwenden, kannst Du darüber nachdenken, den Stil nicht zu nutzen. Die Norm DIN 1505-2, die der Stil implementiert, ist von 1984 und wurde schon 2013 von DIN-ISO 690 abgelöst und ist nicht mehr gültig. (Ferner find ich, dass einige typographische Entscheidungen in der DIN 1505-2 fraglich sind: Leerzeichen von dem Semikolon?)

Wenn Du noch nicht mal auf BibTeX festgelegt bist, dann würde ich Dir den Umstieg zu biblatex+Biber ans Herz legen. Da gehen solche Dinger viel schöner. (Z.B. musst Du nicht micht verschiedenen .bib-Dateien arbeiten, sondern kannst die Einträge direkt nach bestimmten Kriterien filtern.) Wenn wirklich nach Dateizugehörigkeit gefiltert werden soll, dann könnte man Dein Beispiel wie folgt implementieren

\documentclass[11pt]{article}

\usepackage[backend=biber, style=numeric, defernumbers=true]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex, overwrite]{
    \map{
      \perdatasource{referencesA.bib}
      \step[fieldset=keywords, fieldvalue={,}, appendstrict]
      \step[fieldset=keywords, fieldvalue=A, append]
    }
    \map{
      \perdatasource{referencesB.bib}
      \step[fieldset=keywords, fieldvalue={,}, appendstrict]
      \step[fieldset=keywords, fieldvalue=B, append]
    }
  }
}

\begin{filecontents}{references.bib}
@inproceedings{Ref1,
  title     = {The Title},
  year      = {2000},
  booktitle = {The book},
  author    = {The author},
}
\end{filecontents}
\begin{filecontents}{referencesA.bib}
@inproceedings{Ref1A,
  title     = {The TitleA},
  year      = {2000},
  booktitle = {The bookA},
  author    = {The authorA},
}
\end{filecontents}
\begin{filecontents}{referencesB.bib}
@inproceedings{Ref1B,
  title     = {The TitleB},
  year      = {2000},
  booktitle = {The bookB},
  author    = {The authorB},
}
\end{filecontents}
\addbibresource{references.bib}
\addbibresource{referencesA.bib}
\addbibresource{referencesB.bib}


\begin{document}
Citation from bib \autocite{Ref1} and bib A \autocite{Ref1A} and at bib B \autocite{Ref1B}.

\printbibliography[notkeyword=A,notkeyword=B, title={Bib}]
\newrefcontext[labelprefix=A]
\printbibliography[keyword=A, title={Bib A}]
\newrefcontext[labelprefix=B]
\printbibliography[keyword=B, title={Bib B}]
\end{document}

Aber wie gesagt, wenn die Dateizugehörigkeit nur eine künstliche Methode ist, um nach anderen Eigenschaften zu filtern, dann geht es unter Umtsänden viel schöner.

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=numeric, defernumbers, backend=biber]{biblatex}

\addbibresource{biblatex-examples.bib}


\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{worman}
dolor \autocite{geer}
sit \autocite{nussbaum}
amet \autocite{cicero}
consectur \autocite{moran}

\newrefcontext[labelprefix=A]
\printbibliography[type=article, title={Artikel}]
\newrefcontext[labelprefix=B]
\printbibliography[type=book, title={Bücher}]
\newrefcontext[labelprefix=R]
\printbibliography[nottype=article, nottype=book, title={Anderes}]
\end{document}

Re: multibib Problem mit Label und unsrtdin

von Bartman » So 31. Mai 2020, 22:35

Du kommst über das Kontextmenü an die Adresse der hochgeladenen Abbildung, die Du dann mit dem BBCode für das Einfügen eines Bildes anzeigen lassen kannst.

plain:
Bild
unsrtdin:
Bild

Wenn du biblatex benutzen darfst, dann solltest Du Dich in dessen Dokumentation über die Option labelprefix informieren.

Re: multibib Problem mit Label und unsrtdin

von Nik84 » So 31. Mai 2020, 21:03

Ich möchte noch Präzisieren:
Mit plain habe ich sowohl in der Bibliographie als auch im Text Labels (z.B. [A1], wobei A das Label ist). Sobald ich auf unsrtdin umstelle habe ich in der Bibliographie immer noch labels, im Text allerdings verschwinden die Label (aus [A1] wird [1]).

Viele Grüße
Nik

multibib Problem mit Label und unsrtdin

von Nik84 » So 31. Mai 2020, 21:00

Hallo Zusammen, ich habe ein Problem mit multibib und den benutzerspezifizierten Labels. Je nach verwendetem bibliographystyle funktionieren die Labels oder eben nicht. Hatte das schonmal jemand, gibt es dafür eine Lösung/Workaround? Minimalbeispiel:

\documentclass[11pt]{report}

\usepackage[resetlabels,labeled]{multibib}
\usepackage{filecontents}

\begin{filecontents}{references.bib}
@inproceedings{Ref1,
    title = {The Title},
    year = {2000},
    booktitle = {The book},
    author = {The author},
}
\end{filecontents}

\begin{filecontents}{referencesA.bib}
@inproceedings{Ref1A,
    title = {The TitleA},
    year = {2000},
    booktitle = {The bookA},
    author = {The authorA},
}
\end{filecontents}

\begin{filecontents}{referencesB.bib}
@inproceedings{Ref1B,
    title = {The TitleB},
    year = {2000},
    booktitle = {The bookB},
    author = {The authorB},
}
\end{filecontents}

\newcites{A,B}{{The other list},{And annother list}}

\begin{document}

Citation from bib \cite{Ref1} and bib A \citeA{Ref1A} and at bib B \citeB{Ref1B}.

\bibliographystyle{plain}
\bibliography{references}
\bibliographystyleA{plain}
% multibib funktioniert nicht wenn statt plain unsrtdin verwendet wird
\bibliographyA{referencesA}
\bibliographystyleB{plain}
\bibliographyB{referencesB}

\end{document}

Ergebnis mit plain:
https://ibb.co/qkzFqkg
Ergebnis mit unsrtdin:
https://ibb.co/sRj9nGY

Wie ihr seht, fehlen die labels...

Ich hoffe mir kann jemand helfen.

Schönen Abend noch
Nik


Nach oben