BibLaTeX: Bagaimana cara menghapus koma setelah "sekolah" di entri @tesis?
Saya ingin menghapus koma di antara bidang "sekolah" dan tanggal (tahun) di entri bibliografi @thesis:
Inilah kode contoh minimal saya:
\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{*}
Saya sudah mencoba \renewbibmacro{institution+location+date}{...}
, tetapi tidak berhasil. Saya cukup baru mengenal BibLaTeX.
Pikiran saya adalah bahwa numeric
gayanya menggunakan jenis entri dari standard
, dari mana saya menyalin makro dan menghapus semua koma. Namun, itu jelas tidak berhasil. Bagaimana cara menghapus koma ini?
Jawaban
Anda bisa menambahkan \nopunct
tepat sebelum makro yang \newunit
ditentukan ulang institution+location+date
. Saya telah mengubah kelas dokumen contoh Anda menjadi article
. Terlepas dari namanya, minimal
kelas dokumen sebaiknya tidak digunakan untuk MWE karena terlalu minim. Saya juga telah menghapus filecontents
paket tersebut, yang sekarang menjadi bagian dari kernel LaTeX.
\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}
Jawaban untuk Ubah urutan halaman dan tahun di Biblatex , yang kodenya sedang Anda gunakan, menggunakan instrumen yang cukup tumpul untuk memindahkan date
pencetakan setelahnya pages
. Ini mungkin bukan yang Anda inginkan atau butuhkan dalam semua situasi.
Berikut adalah penyiapan yang sedikit lebih rumit yang memindahkan tanggal hanya jika ada pages
(atau a chapter
), yang dapat menghasilkan keluaran yang bekerja sedikit lebih baik untuk Anda dalam beberapa situasi.
\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}
Seperti yang dijelaskan Alan dalam komentar di bawah jawabannya, biblatex
penanganan tanda baca tidak sinkron: Tanda baca disimpan dalam buffer dan hanya dicetak setelah diperlukan (yaitu ketika \print...
perintah berikutnya benar-benar mencetak sesuatu). Karena dalam kode dalam pertanyaan \usebibmacro{date}
in institution+location+date
sebenarnya tidak mencetak tanggal, \setunit
sebelum akhirnya tidak mengontrol tanda baca sebelum tanggal. Tanggal hanya dicetak dengan date:print
in chapter+pages
, di mana \setunit
perintah lain akan menambahkan tanda baca yang berbeda ke dalam buffer.
\nopunct
menetapkan penanda permanen untuk tidak mencetak tanda baca apa pun hingga konten / teks baru dicetak dengan \print...
perintah. Dalam hal ini membantu menekan periode yang tidak diinginkan. Karena \nopunct
dapat digunakan di dalam dan di luar pelacak tanda baca, ini adalah alat yang berguna untuk mengubah tanda baca, tetapi saya biasanya mencoba menghindarinya dan lebih memilih solusi yang tidak menggunakannya, karena dapat memiliki efek yang melampaui apa yang diinginkan.