BibLaTeX: @thesis girişinde "okul" dan sonra virgülü nasıl kaldırabilirim?

Aug 15 2020

Bir @thesis bibliyografya girişinde "okul" alanı ile tarih (yıl) arasındaki virgülü kaldırmak istiyorum:

İşte minimum örnek kodum:

\documentclass{minimal}

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

%%%%%%%% https://tex.stackexchange.com/a/492917

\newtoggle{bbx:datemissing}

\renewbibmacro*{date}{\toggletrue{bbx:datemissing}%}

\renewbibmacro{volume+number+eid}{%
  \printfield{volume}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

\renewbibmacro*{issue+date}{%
  \toggletrue{bbx:datemissing}%
  \iffieldundef{issue}{}{
    \printtext[parens]{%
    \printfield{issue}}}%
  \newunit}

\newbibmacro*{date:print}{%
  \togglefalse{bbx:datemissing}%
  \printdate}

\renewbibmacro*{chapter+pages}{%
  \printfield{chapter}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}

\renewbibmacro*{note+pages}{%
  \printfield{note}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}

%%%%%%%%

%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
  \printlist{location}%
  \iflistundef{institution}{%
    \setunit*{\space}%
  }{%
    \setunit*{\addcolon\space}%
  }%
  \printlist{institution}%
  \setunit*{\space}%
  \usebibmacro{date}%
  \newunit%
}

\usepackage{filecontents}
\begin{filecontents*}{lit.bib}
  @thesis {mythesis,
    author = {Me, I.},
    school = {University},
    title = {Sometitle},
    type = {Phd thesis},
    year = {123}
  }  
\end{filecontents*}

\addbibresource{lit.bib}

\begin{document}
\printbibliography
\end{document}
\nocite{*}

Zaten denedim \renewbibmacro{institution+location+date}{...}ama bu işe yaramadı. BibLaTeX'te oldukça yeniyim.

Benim düşüncem, numericstilin giriş türlerini kullandığı standard, makroyu kopyaladığım ve tüm virgülleri çıkardığım yerdi. Ancak bu açıkça işe yaramadı. Bu virgülü nasıl kaldırabilirim?

Yanıtlar

3 AlanMunn Aug 15 2020 at 22:37

Yeniden tanımlanmış makronuzun \nopuncthemen önüne ekleyebilirsiniz . Örneğinizin belge sınıfını olarak değiştirdim . Adına rağmen, belge sınıfı gerekir değil aslında çok az olduğu için MWEs için kullanılabilir. Ayrıca artık LaTeX çekirdeğinin bir parçası olan paketi de kaldırdım .\newunitinstitution+location+datearticleminimalfilecontents

\documentclass{article}

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

\newtoggle{bbx:datemissing}

\renewbibmacro*{date}{\toggletrue{bbx:datemissing}}

\renewbibmacro{volume+number+eid}{%
  \printfield{volume}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

\renewbibmacro*{issue+date}{%
  \toggletrue{bbx:datemissing}%
  \iffieldundef{issue}{}{
    \printtext[parens]{%
    \printfield{issue}}}%
  \newunit}

\newbibmacro*{date:print}{%
  \togglefalse{bbx:datemissing}%
  \printdate}

\renewbibmacro*{chapter+pages}{%
  \printfield{chapter}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}

\renewbibmacro*{note+pages}{%
  \printfield{note}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}
%%% This is what I came up with
\renewbibmacro{institution+location+date}{%
  \printlist{location}%
  \iflistundef{institution}{%
    \setunit*{\space}%
  }{%
    \setunit*{\space}%
  }%
  \printlist{institution}%
  \setunit*{\space}%
  \usebibmacro{date}%
  \nopunct\newunit%
}

\begin{filecontents*}[overwrite]{\jobname.bib}
  @thesis {mythesis,
    author = {Me, I.},
    school = {University of Somewhere},
    title = {Sometitle},
    type = {Phd thesis},
    year = {1980}
  }  
\end{filecontents*}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

2 moewe Aug 16 2020 at 10:45

Kodunu kullandığınız Biblatex'te sayfaların ve yılların sırasını değiştir sorusunun yanıtı , datebaskıyı daha sonra taşımak için oldukça kör aletler kullanır pages. Bu, her durumda tam olarak istediğiniz veya ihtiyaç duyduğunuz şey olmayabilir.

Burada, tarihi yalnızca pages(veya a chapter) varsa hareket ettiren ve bazı durumlarda sizin için biraz daha iyi çalışan bir çıktıyla sonuçlanabilen biraz daha karmaşık bir kurulum verilmiştir .

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[backend=biber, style=numeric]{biblatex}

\newtoggle{bbx:datesuppressed}

\renewbibmacro*{date}{%
  \ifboolexpr{
        test {\iffieldundef{pages}}
    and test {\iffieldundef{chapter}}}
    {\printdate}
    {\toggletrue{bbx:datesuppressed}}}

\renewbibmacro{volume+number+eid}{%
  \printfield{volume}%
  \setunit{\addcomma\space}%
  \printfield{eid}}

\renewbibmacro*{issue+date}{%
  \toggletrue{bbx:datesuppressed}%
  \iffieldundef{issue}
    {}
    {\printtext[parens]{%
       \printfield{issue}}}%
  \newunit}

\newbibmacro*{date:print}{%
  \iftoggle{bbx:datesuppressed}
    {\togglefalse{bbx:datesuppressed}%
     \printdate}
    {}}

\renewbibmacro*{chapter+pages}{%
  \printfield{chapter}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}

\renewbibmacro*{note+pages}{%
  \printfield{note}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \newunit
  \usebibmacro{date:print}%
  \newunit}

\renewbibmacro{institution+location+date}{%
  \printlist{location}%
  \iflistundef{institution}
    {\setunit*{\space}}
    {\setunit*{\addcolon\space}}%
  \printlist{institution}%
  \setunit*{\space}%
  \usebibmacro{date}%
  \newunit
}

\begin{filecontents*}{\jobname.bib}
@phdthesis{mythesis,
  author = {Me, I.},
  school = {University},
  title  = {Sometitle},
  year   = {123},
}  
\end{filecontents*}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
\nocite{mythesis,sigfridsson,westfahl:space}
\printbibliography
\end{document}

Alan'ın cevabının altındaki yorumlarda açıkladığı gibi, biblatexnoktalama işlemleri eşzamansızdır: Noktalama bir arabellekte saklanır ve yalnızca ihtiyaç duyulduğunda yazdırılır (yani bir sonraki \print...komut aslında bir şey yazdırdığında). Sorudaki kodda, \usebibmacro{date}giriş institution+location+dateaslında tarihi yazdırmadığından, \setunitsonuçta tarihten önceki noktalama işaretlerini kontrol etmez. Sadece tarih ile basılmıştır date:printin chapter+pagesdiğer bu noktada, \setunitkomutlar tamponu içine farklı noktalama eklemiş olur.

\nopunctyeni içerik / metin bir \print...komutla yazdırılana kadar herhangi bir noktalama işareti yazdırmamak için kalıcı bir işaretçi ayarlar . Bu durumda istenmeyen dönemin bastırılmasına yardımcı olur. Yana \nopunctkullanılan iç olabilir ve noktalama izleyici dışında o çimdik noktalama için bir araçtır, ama genellikle bunu önlemek ve istenilen görülenin ötesine etkileri olabileceği için, kullanmadığınız çözümleri tercih deneyin.