Biblatex:將動態比較指令與 '\citetitle' 指令結合

Biblatex:將動態比較指令與 '\citetitle' 指令結合

如何在 biblatex 中建立 \citejournal、\citebooktitle、\cite... 指令?Gonzalo Medina 和 Audrey 提供的程式碼的工作原理類似於\citeauthor{},例如,當您放入文件時,它只會創建一本書或期刊的標題......該\citeauthor命令也會出現此問題。

自動的Vgl。& 自動報價縮排(取決於報價長度)lockstep 根據 lockstep 和 Martin Scharrer 先前的貢獻創建了一個報價命令

  1. 每當輸出中超過一定行數(最好是 3 行)時,就會進行縮排版。

  2. 引文將自動排版,不含“Vgl”。 ——無論是短形式或長形式。

  3. 當輸出是釋義或摘要時(換句話說:當輸出沒有引用時),它會使用前註“Vgl”進行排版。

  4. 它在 biblatex 中工作。

主要目的是自動化vgl。(engl.比較)和行縮排。

問題:不幸的是,當您組合這兩個代碼時,前註vgl。將在輸出中的每個 等命令\citeauthor之前。\citetitle你會得到vgl。作者代替作者。有沒有人可以在全球範圍內解決這個問題?

\documentclass{article}

\usepackage[ngerman]{babel}

\usepackage[style=authoryear,autocite=footnote,backend=bibtex]{biblatex} % Here, Philip added "autocite=footnote,backend=bibtex"

%-------------------
\NewBibliographyString{compare}
\DefineBibliographyStrings{ngerman}{%
  compare = {vgl\adddot},
}

\newbool{withintextquote}

\renewbibmacro*{multiprenote}{%
  \renewbibmacro*{prenote}{%
    \iffieldundef{prenote}
      {}
      {\printfield{prenote}%
       \setunit{\prenotedelim}}}%
  \iffieldundef{multiprenote}{%
    \ifbool{withintextquote}{%
    }{%
      \bibstring{compare}\addspace
    }%
    }
    {\printfield{multiprenote}%
     \setunit{\prenotedelim}}}

\renewbibmacro*{prenote}{%
  \iffieldundef{prenote}{%
    \ifbool{withintextquote}{%
    }{%
      \bibstring{compare}\addspace
    }%
    }
    {\printfield{prenote}%
     \setunit{\prenotedelim}}}

\makeatletter
\newcommand{\cquotation}[1]{%
    \begingroup
    \booltrue{withintextquote}%
    % \settowidth doesn't like paragraphs
    \setbox\@tempboxa\hbox{%
        \def\par{\hspace{3\linewidth}}% If a paragraph is included force long form
        %\let\par\space  % Ignore paragraphs
        \let\footnote\@empty% make sure autocite does not do anything here; this is new
        \let\autocite\@empty
        #1}%
    \ifdim\wd\@tempboxa>3\linewidth
        \begin{quote}
            \itshape
            #1
        \end{quote}
    \else
        {\itshape #1}%
    \fi
    \endgroup}
\makeatother

%-------------------

\DeclareCiteCommand{\citejournal}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{journal}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citebooktitle}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{booktitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeintitle}% Based on \citetitle from biblatex.def
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \iffieldundef{journaltitle}
     {\iffieldundef{booktitle}
        {\iffieldundef{maintitle}
          {\printfield[citetitle]{labeltitle}}% Behave like \citetitle if no "main" title
          {\printtext[maintitle]{\printfield[titlecase]{maintitle}}}}
        {\printtext[booktitle]{\printfield[titlecase]{booktitle}}}}
     {\printtext[journaltitle]{\printfield[titlecase]{journaltitle}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

  \usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@Article{yoon,
  author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn, Kyo Han},
  title = {Palladium pincer complexes with reduced bond angle strain: efficient catalysts
    for the Heck reaction},
  journaltitle = {Organometallics},
  volume = {25},
  number = {10},
  date = {2006},
  pages = {2409--2411}}
@InProceedings{salam,
  author = {Salam, Abdus},
  editor = {Svartholm, Nils},
  title = {Weak and Electromagnetic Interactions},
  booktitle = {Elementary Particle Theory},
  booksubtitle = {Relativistic Groups and Analyticity},
  booktitleaddon = {Proceedings of the Eighth Nobel Symposium},
  eventdate = {1968-05-19/1968-05-25},
  venue = {Aspen{\"a}sgarden, Lerum},
  publisher = {Almquist \& Wiksell},
  location = {Stockholm},
  date = {1968},
  pages = {367--377}}
@InProceedings{moraux,
  author = {Moraux, Paul},
  editor = {Lloyd, G. E. R. and Owen, G. E. L.},
  title = {Le \emph{De Anima} dans la tradition gr{\`e}cque},
  subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de Theophraste {\`a}
    Themistius},
  shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque},
  booktitle = {Aristotle on Mind and the Senses},
  booktitleaddon = {Proceedings of the Seventh Symposium Aristotelicum},
  eventdate = {1975},
  publisher = cup,
  location = {Cambridge},
  date = {1979},
  pages = {281--324}}
@InCollection{pines,
  author = {Pines, Shlomo},
  editor = {Twersky, Isadore},
  indextitle = {Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and
    Maimonides, The},
  title = {The Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and
    Maimonides},
  shorttitle = {Limitations of Human Knowledge},
  booktitle = {Studies in Medieval Jewish History and Literature},
  publisher = hup,
  location = {Cambridge, Mass.},
  date = {1979},
  pages = {82--109}}
\end{filecontents}

\begin{document}

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

\cquotation{This is a short direct quotation. \autocite{yoon}}

\cquotation{This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation.\autocite{yoon}}

This is a paraphrase \autocite{yoon}

This is a paraphrase with prenote \autocite[siehe hierzu auch][]{yoon}

This is a paraphrase \autocite{yoon}
This is a paraphrase \autocite{yoon}

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

\cquotation{This is a short direct quotation. \autocite{yoon}}
This is a paraphrase \autocite{yoon}

\noindent
\citeintitle{yoon} versus \citejournal{yoon} \\\\
\citeintitle{salam} versus \citebooktitle{salam} \\\\
\citeintitle{moraux} versus \citebooktitle{moraux} \\\\
\citeintitle{pines} versus \citebooktitle{pines}
\printbibliography

\end{document}

註1:vgl。這裡使用的程式碼是moewe根據lockstep的版本稍微改進的。它避免了奇怪的編號和不需要的前註輸出vgl。在 biblatex 的設定中autocite=footnote(鏈接Biblatex:問題vgl。以及動態引用指令中的編號)。

註2:\citeauthor{}該問題可以透過將命令替換為 來解決\citeauthor[\unspace][]{}。由於這會影響可讀性,因此首選全域解決方案。然而,也許全球解決方案可以在此基礎上建立。

答案1

您可以定義一個\newbibmacro*{simp:prenote}從不列印任何“vgl”/比較內容的新內容

\newbibmacro*{simp:prenote}{%
  \iffieldundef{prenote}
    {}
    {\printfield{prenote}%
     \setunit{\prenotedelim}}}

bibmacro{prenote}(順便說一句,這是in的標準定義biblatex.def。)

然後我們在所有\citetitle/\citeauthor和朋友宏中使用這個簡單的 bib 宏

我們必須重新定義要使用的標準\citeauthor/\citetitlesimp:prenote

\DeclareCiteCommand{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printnames{labelname}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printnames[][1-1]{labelname}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \printfield[citetitle]{labeltitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \printfield[citetitle]{title}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield{year}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citeyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield{year}\printfield{extrayear}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citedate}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printdate}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citedate}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printdateextra}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeurl}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield[citeurl]{url}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\notecite}
  {\printfield{simp:prenote}%
   \setunit*{\prenotedelim}}
  {\nocite{\thefield{entrykey}}}
  {}
  {\printfield{postnote}}

\DeclareCiteCommand{\citejournal}
  {\usebibmacro{simp:prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{journal}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citebooktitle}
  {\usebibmacro{simp:prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{booktitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeintitle}% Based on \citetitle from biblatex.def
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \iffieldundef{journaltitle}
     {\iffieldundef{booktitle}
        {\iffieldundef{maintitle}
          {\printfield[citetitle]{labeltitle}}% Behave like \citetitle if no "main" title
          {\printtext[maintitle]{\printfield[titlecase]{maintitle}}}}
        {\printtext[booktitle]{\printfield[titlecase]{booktitle}}}}
     {\printtext[journaltitle]{\printfield[titlecase]{journaltitle}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

這是相當多的程式碼,但非常簡單。

微量元素

\documentclass{article}

\usepackage[ngerman]{babel}

\usepackage[style=authoryear,autocite=footnote,backend=bibtex]{biblatex} % Here, Philip added "autocite=footnote,backend=bibtex"

%-------------------
\NewBibliographyString{compare}
\DefineBibliographyStrings{ngerman}{%
  compare = {vgl\adddot},
}

\newbool{withintextquote}

\renewbibmacro*{multiprenote}{%
  \renewbibmacro*{prenote}{%
    \iffieldundef{prenote}
      {}
      {\printfield{prenote}%
       \setunit{\prenotedelim}}}%
  \iffieldundef{multiprenote}{%
    \ifbool{withintextquote}{%
    }{%
      \bibstring{compare}\addspace
    }%
    }
    {\printfield{multiprenote}%
     \setunit{\prenotedelim}}}

\renewbibmacro*{prenote}{%
  \iffieldundef{prenote}{%
    \ifbool{withintextquote}{%
    }{%
      \bibstring{compare}\addspace
    }%
    }
    {\printfield{prenote}%
     \setunit{\prenotedelim}}}

\newbibmacro*{simp:prenote}{%
  \iffieldundef{prenote}
    {}
    {\printfield{prenote}%
     \setunit{\prenotedelim}}}

\makeatletter
\newcommand{\cquotation}[1]{%
    \begingroup
    \booltrue{withintextquote}%
    % \settowidth doesn't like paragraphs
    \setbox\@tempboxa\hbox{%
        \def\par{\hspace{3\linewidth}}% If a paragraph is included force long form
        %\let\par\space  % Ignore paragraphs
        \let\footnote\@empty% make sure autocite does not do anything here; this is new
        \let\autocite\@empty
        #1}%
    \ifdim\wd\@tempboxa>3\linewidth
        \begin{quote}
            \itshape
            #1
        \end{quote}
    \else
        {\itshape #1}%
    \fi
    \endgroup}
\makeatother

%-------------------

\DeclareCiteCommand{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printnames{labelname}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printnames[][1-1]{labelname}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \printfield[citetitle]{labeltitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \printfield[citetitle]{title}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield{year}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citeyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield{year}\printfield{extrayear}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citedate}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printdate}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand*{\citedate}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printdateextra}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeurl}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\printfield[citeurl]{url}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\notecite}
  {\printfield{simp:prenote}%
   \setunit*{\prenotedelim}}
  {\nocite{\thefield{entrykey}}}
  {}
  {\printfield{postnote}}

\DeclareCiteCommand{\citejournal}
  {\usebibmacro{simp:prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{journal}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citebooktitle}
  {\usebibmacro{simp:prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{booktitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeintitle}% Based on \citetitle from biblatex.def
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{simp:prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \iffieldundef{journaltitle}
     {\iffieldundef{booktitle}
        {\iffieldundef{maintitle}
          {\printfield[citetitle]{labeltitle}}% Behave like \citetitle if no "main" title
          {\printtext[maintitle]{\printfield[titlecase]{maintitle}}}}
        {\printtext[booktitle]{\printfield[titlecase]{booktitle}}}}
     {\printtext[journaltitle]{\printfield[titlecase]{journaltitle}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

  \usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@Article{yoon,
  author = {Yoon, Myeong S. and Ryu, Dowook and Kim, Jeongryul and Ahn, Kyo Han},
  title = {Palladium pincer complexes with reduced bond angle strain: efficient catalysts
    for the Heck reaction},
  journaltitle = {Organometallics},
  volume = {25},
  number = {10},
  date = {2006},
  pages = {2409--2411}}
@InProceedings{salam,
  author = {Salam, Abdus},
  editor = {Svartholm, Nils},
  title = {Weak and Electromagnetic Interactions},
  booktitle = {Elementary Particle Theory},
  booksubtitle = {Relativistic Groups and Analyticity},
  booktitleaddon = {Proceedings of the Eighth Nobel Symposium},
  eventdate = {1968-05-19/1968-05-25},
  venue = {Aspen{\"a}sgarden, Lerum},
  publisher = {Almquist \& Wiksell},
  location = {Stockholm},
  date = {1968},
  pages = {367--377}}
@InProceedings{moraux,
  author = {Moraux, Paul},
  editor = {Lloyd, G. E. R. and Owen, G. E. L.},
  title = {Le \emph{De Anima} dans la tradition gr{\`e}cque},
  subtitle = {Quelques aspects de l'interpretation du trait{\'e}, de Theophraste {\`a}
    Themistius},
  shorttitle = {\emph{De Anima} dans la tradition gr{\`e}cque},
  booktitle = {Aristotle on Mind and the Senses},
  booktitleaddon = {Proceedings of the Seventh Symposium Aristotelicum},
  eventdate = {1975},
  publisher = cup,
  location = {Cambridge},
  date = {1979},
  pages = {281--324}}
@InCollection{pines,
  author = {Pines, Shlomo},
  editor = {Twersky, Isadore},
  indextitle = {Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and
    Maimonides, The},
  title = {The Limitations of Human Knowledge According to Al-Farabi, ibn Bajja, and
    Maimonides},
  shorttitle = {Limitations of Human Knowledge},
  booktitle = {Studies in Medieval Jewish History and Literature},
  publisher = hup,
  location = {Cambridge, Mass.},
  date = {1979},
  pages = {82--109}}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

\cquotation{This is a short direct quotation. \autocite{yoon}}

\cquotation{This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation. This is a long direct quotation. This is a long direct
    quotation.\autocite{yoon}}

This is a paraphrase \autocite{yoon}

This is a paraphrase with prenote \autocite[siehe hierzu auch][]{yoon}

This is a paraphrase \autocite{yoon}
This is a paraphrase \autocite{yoon}

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

This is a paraphrase \autocites{yoon}{yoon} % Added by Philip

\cquotation{This is a short direct quotation. \autocite{yoon}}
This is a paraphrase \autocite{yoon}

\noindent
\citeauthor{yoon} versus \citetitle{yoon} \\\\
\citeintitle{yoon} versus \citejournal{yoon} \\\\
\citeintitle{salam} versus \citebooktitle{salam} \\\\
\citeintitle{moraux} versus \citebooktitle{moraux} \\\\
\citeintitle{pines} versus \citebooktitle{pines}
\printbibliography

\end{document}

相關內容