![biblatex удалить пробел после серии в ссылке](https://rvso.com/image/370298/biblatex%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%B5%D1%80%D0%B8%D0%B8%20%D0%B2%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5%20.png)
Я создаю новый стиль библиографии, настраивая файл standard.bbx для своей магистерской диссертации. До сих пор у меня не было больших проблем, но теперь я хочу настроить номер макросерии, так как он должен быть в скобках. Из-за отсутствия информации у меня иногда есть только серия или номер.
Пока все работает хорошо, если только у меня нет только серии. Тогда появляется пробел между последним словом серии и закрывающимися скобками.
Вот мой новый макрос
\newbibmacro*{series+number}{%
\iffieldundef{series}% Überprüfen ob series vorhanden
{}
{ \setunit{\addspace\bibopenparen}
\printtext{Reihe \addcolon\space}%
\printfield{series}
\iffieldundef{number} % Überprüfen ob noch Bd kommt
{\printtext{\bibcloseparen}}
{\setunit{\addcomma\space}}
}%
\iffieldundef{number}%
{}
{ \iffieldundef{series}%
{\setunit{\addspace\bibopenparen}}
{}
\printtext{Bd \adddot}
\printfield{number}%
\printtext{\bibcloseparen\space}
}
\newunit}
А вот и МВЭ
\RequirePackage{filecontents}
\begin{filecontents*}{my_bibfile.bib}
@incollection{Akyar.2008,
author = {Akyar, Bedia},
title = {Dual Quaternions in Spatial Kinematics in an Algebraic Sense},
pages = {373--391},
bookpagination = {page},
publisher = {T{\"u}bitak},
isbn = {1010-7622},
editor = {{Scientific and Technological Research Council of Turkey}},
booktitle = {Turkish journal of mathematics},
year = {2008},
abstract = {},
shorthand = {AKYA08},
location = {Ankara},
edition = {32},
number = {4}
}
@book{Angeles.2007,
author = {Angeles, Jorge},
year = {2007},
title = {Fundamentals of Robotic Mechanical Systems},
url = {http://site.ebrary.com/lib/alltitles/docDetail.action?docID=10229254},
edition = {Third Edition},
publisher = {{Springer Science+Business Media LLC}},
isbn = {0-387-29412-0},
subtitle = {Theory, Methods, and Algorithms},
shorthand = {ANGE07},
language = {eng},
location = {Boston, MA, USA},
series = {Mechanical Engineering Series},
abstract = {},
doi = {10.1007/978-0-387-34580-2},
file = {http://gso.gbv.de/DB=2.1/PPNSET?PPN=546653987},
file = {http://external.dandelon.com/download/attachments/dandelon/ids/DEAGI363052149B0CFDDDC125715B0045ACDA.pdf},
file = {http://zbmath.org/?q=an:1140.70001}
}
\end{filecontents*}
\documentclass[fleqn]{scrreprt}
\usepackage[scaled]{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[style=alphabetic, % Use this style
isbn=false,
doi=false,
url=false,
maxbibnames = 4,
minbibnames = 3,
language = ngerman,
giveninits=true]{biblatex}
\bibliography{my_bibfile}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Первая ссылка имеет только номер (Здесь (Bd. 4)). Вторая имеет серию. Но перед закрывающимися скобками есть ненужный пробел.
решение1
Вы забыли слишком важный %
after \printfield{series}
. Добавление его в ваш макрос убирает ненужный пробел:
\renewbibmacro*{series+number}{%
\iffieldundef{series}% Überprüfen ob series vorhanden
{}
{ \setunit{\addspace\bibopenparen}
\printtext{Reihe \addcolon\space}%
\printfield{series}% <- here
\iffieldundef{number} % Überprüfen ob noch Bd kommt
{\printtext{\bibcloseparen}}
{\setunit{\addcomma\space}}
}%
\iffieldundef{number}%
{}
{ \iffieldundef{series}%
{\setunit{\addspace\bibopenparen}}
{}
\printtext{Bd \adddot}
\printfield{number}%
\printtext{\bibcloseparen\space}
}
\newunit}
Вышеуказанная версия подчеркивает точку, в которой генерируется ваш нежелательный пробел. Но, по сути, ваш код имеет и другие примеры потенциально нежелательных пробелов. В версии ниже я бы добавил tailing, %
чтобы избежать нежелательных пробелов в вашем макросе:
\renewbibmacro*{series+number}{%
\iffieldundef{series} % Überprüfen ob series vorhanden
{}
{\setunit{\addspace\bibopenparen}%
\printtext{Reihe\addcolon\space}%
\printfield{series}%
\iffieldundef{number} % Überprüfen ob noch Bd kommt
{\printtext{\bibcloseparen}}
{\setunit{\addcomma\space}}%
}%
\iffieldundef{number}
{}
{\iffieldundef{series}
{\setunit{\addspace\bibopenparen}}
{}%
\printtext{Bd\adddot}%
\printfield{number}%
\printtext{\bibcloseparen\space}%
}%
\newunit}
Я должен добавить, что может вызвать неодобрение тот факт, что строки "Reihe" и "Bd" жестко закодированы в вашем макросе, как это. Biblatex предлагает локализованные bibstrings, которые также являются расширяемыми, для этого. Кроме того, чтобы переопределить существующий макрос, вам лучше использовать \renewbibmacro
.