scrlayer-notecolumn `\makenote` mit `BibLaTeX`

scrlayer-notecolumn `\makenote` mit `BibLaTeX`

Ich setze meine Reise in BibLaTeX + scrlayer-notecolumn fort. Ich dachte,Sobald ich BibLaTeX zum Laufen gebracht hätte, \marginparwäre alles ganz einfach. Aber nicht so.

Ich möchte meine Seitenleiste mithilfe von scrlayer-notecolumnerstellen \makenote.

MWE:

\documentclass{scrbook}

\usepackage{scrlayer-notecolumn}

% bib-file
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
  @book{Knu86,
    author = {Knuth, Donald E.},
    year = {1986},
    title = {The \TeX book},
  }
}  
\end{filecontents}

\usepackage[backend=bibtex, citestyle=authoryear]{biblatex}
\addbibresource{\jobname}

\DeclareCiteCommand{\tcite}
{\usebibmacro{prenote}}
{   %loopcode
    \usebibmacro{cite}
    \makenote{\printfield{title}}
    %\marginpar{\printfield{title}}
}
{\multicitedelim}
{\usebibmacro{postnote}}


\begin{document}
    hi
    \makenote{a side note}

    \tcite{Knu86}
\end{document}

\marginpar{

Die Verwendung der auskommentierten Funktion \marginparfunktioniert einwandfrei:

Marginpar-Arbeitsdemo


\Notiz erstellen{

die Verwendung \makenotenicht.

funktioniert nicht

Mit Fehlern: line 35: Undefined control sequence. \end{document} : Overwriting file `./dco2.bib'. : Using fall-back BibTeX(8) backend:(biblatex) functionality may be reduced/unavailable. : \clearnotecolumns while active non-layer page style. line 35: Flush note box `marginpar' : \pdfmdfivesum unavailable.


\makenote{\protect

Für mich sieht das so aus, als wäre es vielleicht zerbrechlich, also habe ich protect geändert in\makenote{\protect\printfield{title}}

geschützt

Das hat mir im Wesentlichen den gleichen Fehlersatz beschert.

line 35: Undefined control sequence. \end{document}
: Overwriting file `./dco2.bib'.
: Using fall-back BibTeX(8) backend:(biblatex) functionality may be reduced/unavailable.
: \clearnotecolumns while active non-layer page style.
line 35: Note moved down from(scrlayer-notecolumn) 11.0pt to 15.08002pt(scrlayer-notecolumn) at note box `marginpar'
line 35: Flush note box `marginpar'
: \pdfmdfivesum unavailable.

Antwort1

Dies ist in der Tat ein Erweiterungsproblem. \makenoteschreibt in eine Hilfsdatei. Daher wird die Schreiberweiterung verwendet. \printfield{title}Wird aber nicht auf den Titel erweitert. Und wenn Sie es schützen, \printfield{title}wird nur in diese Datei geschrieben. Dies hilft nicht, da der Lesestatus der Hilfsdatei \printfield{title}nicht auch auf den Titel erweitert werden kann.

Sie benötigen also den Titel, um ihn in das Argument von einzufügen \makenote. Der Standardansatz hierfür wäre, \edef\helpermacro{\printfield{title}}oder \protected@edef\helpermacro{\printfield{title}}und dann zu verwenden \makenote{\helpermacro}. Aber das würde auch nicht funktionieren, da bei Verwendung des Befehls „cite“ \printfield{title}nur zu erweitert wird \printfield {title}.

Aber es gibt noch einen anderen Hook, den Sie verwenden können, nämlich das Feldformat von field title. Wir können einfach ein neues Feldformat definieren makenote, das \makenotezum Drucken eines Felds verwendet wird, und dieses neue Format zum Drucken des Felds verwenden title:

\documentclass{scrbook}

\usepackage{scrlayer-notecolumn}

\usepackage[backend=bibtex, citestyle=authoryear]{biblatex}
\addbibresource{biblatex-examples}

\DeclareFieldFormat{makenote}{\makenote{#1}}% define new makenote field format

\DeclareCiteCommand{\tcite}
{\usebibmacro{prenote}}
{   %loopcode
    \usebibmacro{cite}%
    \printfield[makenote]{title}% use makenote format to print field title
    %\makenote{\printfield{title}}
    %\marginpar{\printfield{title}}
}
{\multicitedelim}
{\usebibmacro{postnote}}


\begin{document}
    hi\makenote{a side note}

    Here a \verb|\tcite{knuth:ct}|: \tcite{knuth:ct}
\end{document}

Ergebnis formatieren

Als Gegenstück zum Format können Sie auch einen neuen Wrapper definieren, \mkbibmakenoteähnlich wie \mkbibfootnote:

\documentclass{scrbook}

\usepackage{scrlayer-notecolumn}

\usepackage[backend=bibtex, citestyle=authoryear]{biblatex}
\addbibresource{biblatex-examples}

\newrobustcmd{\mkbibmakenote}[1]{%
  \makenote*{\blxmkmakenote{#1}}%
}
\makeatletter
\newrobustcmd{\blxmkmakenote}[1]{%
  \begingroup
    \blx@blxinit
    \blx@setsfcodes
    \blx@postpunct@agroup
    #1%
  \endgroup
}
\makeatother

\DeclareCiteCommand{\tcite}[\mkbibmakenote]
{\usebibmacro{prenote}}
{%
    \usebibmacro{author}%
    \newunit
    \usebibmacro{title}%
}
{\multicitedelim}
{\usebibmacro{postnote}}


\begin{document}
    hi\makenote{a side note}

    Here a \verb|\tcite{knuth:ct}|: \tcite{knuth:ct}done.
\end{document}

Wrapper-Ergebnis

Wenn Sie beides benötigen, also einen Zitatdruck im Text und einen Zitatdruck am Rand, müssen Sie einen eigenen Befehl definieren, der a \citeund a ausführt \tcite.

verwandte Informationen