Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4
Bonusfrage beantwortet

15 Sep '13, 15:17

Epllus's gravatar image

Epllus
620269

Versuch es mal mit dem Befehl `\DeclareDatamodelFields` (WICHTIG: Funktioniert nur mit `biber`!). In der biblatex Anleitung steht dazu auf Seite 149 (v2.7a 14/07/2013): > The default data model is defined in > the core biblatex file `blx-dm.def` > […]. […] In practice, changing the data > model means that you can define the > entrytypes and fields for your > datasources and validate your data > against the data model. Naturally, > this is not much use unless your style > supports any new entrytypes or fields > and it raises issues of portability > between styles […]. Um es kurz zu fassen, soweit ich es verstanden habe, kannst du damit einfach neue Felder und Eingangs-Typen definieren. Der Rest ist – mehr oder weniger – einfach: - Die Datei `blx-dm.def` suchen, - herausfinden durch welchen Befehl z.B. `author` definiert wurde (da ich annehme, dass `author` und `maintainer` beide ähnliche Typen sind), - dieselben Einstellungen nehmen mit denen auch `author` definiert wurde, und damit in der eigenen benutzerdefinieten Datei `biblatex-dm.cfg` ein neues Feld (z.B. `maintainer`) definieren. Hier ist das Beispiel: \documentclass{article} \usepackage{filecontents} \usepackage[backend=biber,style=alphabetic]{biblatex} \usepackage[ngerman]{babel} \begin{filecontents*}{\jobname.bib} @package{chngcntr, title = {chngcntr} , subtitle = {Changing counter properties} , author = {Peter Wilson} , maintainer = {Will Robertson} , date = {2009-09-02} , version = {1.0a} , url = {http://mirror.ctan.org/macros/latex/contrib/chngcntr} } \end{filecontents*} \addbibresource{\jobname.bib} \DeclareBibliographyDriver{package}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\addcomma\addspace}% \usebibmacro{maintainer}% \setunit{\labelnamepunct}\newblock \usebibmacro{maintitle+title}% \printfield{version}% \setunit{\addcomma\addspace}% \usebibmacro{date}% \newunit\newblock \usebibmacro{url+urldate}% \newunit\newblock \usebibmacro{finentry}% } \NewBibliographyString{maintainer} \DefineBibliographyStrings{ngerman}{% maintainer = {Die Person die gerade daran arbeitet} } \newbibmacro*{maintainer}{% \printtext{% \ifnameundef{maintainer} {} {\bibstring{maintainer}% \setunit{\addcolon\addspace}% \printnames{maintainer}}% }} \DeclareNameAlias{maintainer}{default} \begin{filecontents*}{biblatex-dm.cfg} \ProvidesFile{biblatex-dm.cfg} \DeclareDatamodelFields[type=list, datatype=name]{maintainer} \endinput \end{filecontents*} \newcommand*\packageformat{\sffamily} \begin{document} See~\cite{chngcntr} \printbibliography \end{document} Noch einmal der Hinweis: Funktioniert nur mit `biber`! Außerdem gehört `\DeclareDatamodelFields` in die eigens-definierte Datei `biblatex-dm.cfg`. Außerdem habe ich noch den bibstring `maintainer` definiert, damit man Autor und Maintaier besser außeinanderhalten kann. ![alt text][1] --- Zur Bonusfrage: Das Feld `title` und `subtitle` sind miteinander gekoppelt und werden durch den bibmacro-Befehl `title` gesetzt. In `biblatex.def` der Befehl `title` folgendermaßen definiert: \newbibmacro*{title}{% \ifboolexpr{ test {\iffieldundef{title}} and test {\iffieldundef{subtitle}} } {} {\printtext[title]{% \printfield[titlecase]{title}% \setunit{\subtitlepunct}% \printfield[titlecase]{subtitle}}% \newunit}% \printfield{titleaddon}} Das bedeutet: Zum einem werden `title` und `subtitle` von außen durch `\printtext[title]` formatiert. Wenn nun das Feld-Format „title“ als fett definiert wurde (durch `\DeclareFieldFormat{title}{\textbf{#1}}` ), werden sowohl `title` als auch `subtitle` automatisch fett. Um nun zu verstehen, warum man `subtitle` nicht allein verändern kann, ist es wichtig den Befehl `\printfield[Format]{Feld}` zu verstehen. Wenn nur das benötigte Argument angegeben wird (z.B. `\printfield{Test}`) und *kein* optionales, so wird das `Format` automatisch zum Inhalt des benötigten Arguments (`\printfield{Test}` = `\printfield[Test]{Test}`). Hier kannst du einfach `\DeclareFieldFormat{Test}{ \textbf{#1} }` schreiben und `Test` wird Fett ausgegeben. Wenn nun das optionale Argument angegeben wird, zählt dieses als Format. Wenn also `\printfield[Versuch]{Test}` steht, kannst du `\DeclareFieldFormat{Test}{ \textbf{#1} }` sooft ändern wie du willst, da das Feld ja durch „Versuch“ formatiert wird. Eine Formatänderung wäre hier durch `\DeclareFieldFormat{Versuch}{ \textbf{#1} }` erreichbar. Und so ist es auch hier: `\printfield[titlecase]{subtitle}` bedeutet, dass das Feld `subtitle` durch „titlecase“ formatiert wird. Du kannst also das Format „subtitle“ sooft verändern wie du willst, das Feld `subtitle` wird ja durch das Format „titlecase“ formatiert. Willst du nun das `subtitle` Feld formatieren, änderst du entweder die „titlecase“ Formatierung (was auch zu einer Formatänderung beim Feld `title` führen würde, also unerwünscht ist) oder du löscht das `[titlecase]` bei `subtitle`: \renewbibmacro*{title}{% \ifboolexpr{ test {\iffieldundef{title}} and test {\iffieldundef{subtitle}} } {} {\printtext[title]{% \printfield[titlecase]{title}% \setunit{\subtitlepunct}% \printfield{subtitle}}% selbe wie \printfield[subtitle]{subtitle} \newunit}% \printfield{titleaddon}} Dadurch kannst du das `subtitle` Feld durch `\DeclareFieldFormat{subtitle}{ \emph{#1} }` formatieren (wobei du beachten musst, dass es ja noch zusätzlich mit „title“ formatiert wird; „title“= **fett**, „subtitle“= *kursiv* =>**Titel** ***subtitle*** ) PS. Da das Format „title“ sowohl `title` als auch `subtitle` formatiert, bedeutet das, dass du einfach `\DeclareFieldFormat[package]{title}{\textsf{#1}}` schreiben kannst und beide Felder haben keine Serifen. [1]: http://texwelt.de/wissen/upfiles/Hochladen_7.jpg
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

15 Sep '13, 09:41

Epllus's gravatar image

Epllus
620269

Versuch es mal mit dem Befehl `\DeclareDatamodelFields` (WICHTIG: Funktioniert nur mit `biber`!). In der biblatex Anleitung steht dazu auf Seite 149 (v2.7a 14/07/2013): > The default data model is defined in > the core biblatex file `blx-dm.def` > […]. […] In practice, changing the data > model means that you can define the > entrytypes and fields for your > datasources and validate your data > against the data model. Naturally, > this is not much use unless your style > supports any new entrytypes or fields > and it raises issues of portability > between styles […]. Um es kurz zu fassen, soweit ich es verstanden habe, kannst du damit einfach neue Felder und Eingangs-Typen definieren. Der Rest ist – mehr oder weniger – einfach: - Die Datei `blx-dm.def` suchen, - herausfinden durch welchen Befehl z.B. `author` definiert wurde (da ich annehme, dass `author` und `maintainer` beide ähnliche Typen sind), - dieselben Einstellungen nehmen mit denen auch `author` definiert wurde, und damit in der eigenen benutzerdefinieten Datei `biblatex-dm.cfg` ein neues Feld (z.B. `maintainer`) definieren. Hier ist das Beispiel: \documentclass{article} \usepackage{filecontents} \usepackage[backend=biber,style=alphabetic]{biblatex} \usepackage[ngerman]{babel} \begin{filecontents*}{\jobname.bib} @package{chngcntr, title = {chngcntr} , subtitle = {Changing counter properties} , author = {Peter Wilson} , maintainer = {Will Robertson} , date = {2009-09-02} , version = {1.0a} , url = {http://mirror.ctan.org/macros/latex/contrib/chngcntr} } \end{filecontents*} \addbibresource{\jobname.bib} \DeclareBibliographyDriver{package}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{author}% \setunit{\addcomma\addspace}% \usebibmacro{maintainer}% \setunit{\labelnamepunct}\newblock \usebibmacro{maintitle+title}% \printfield{version}% \setunit{\addcomma\addspace}% \usebibmacro{date}% \newunit\newblock \usebibmacro{url+urldate}% \newunit\newblock \usebibmacro{finentry}% } \NewBibliographyString{maintainer} \DefineBibliographyStrings{ngerman}{% maintainer = {Die Person die gerade daran arbeitet} } \newbibmacro*{maintainer}{% \bibstring{maintainer}% \setunit{\addcolon\addspace} \printnames{maintainer}} \printtext{% \ifnameundef{maintainer} {} {\bibstring{maintainer}% \setunit{\addcolon\addspace}% \printnames{maintainer}}% }} \DeclareNameAlias{maintainer}{default} \begin{filecontents*}{biblatex-dm.cfg} \ProvidesFile{biblatex-dm.cfg} \DeclareDatamodelFields[type=list, datatype=name]{maintainer} \endinput \end{filecontents*} \newcommand*\packageformat{\sffamily} \begin{document} See~\cite{chngcntr} \printbibliography \end{document} Noch einmal der Hinweis: Funktioniert nur mit `biber`! Außerdem gehört `\DeclareDatamodelFields` in die eigens-definierte Datei `biblatex-dm.cfg`. Außerdem habe ich noch den bibstring `maintainer` definiert, damit man Autor und Maintaier besser außeinanderhalten kann. ![alt text][1] [1]: http://texwelt.de/wissen/upfiles/Hochladen_7.jpghttp://texwelt.de/wissen/upfiles/Hochladen_7.jpg
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

15 Sep '13, 09:29

Epllus's gravatar image

Epllus
620269

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

15 Sep '13, 09:28

Epllus's gravatar image

Epllus
620269