W BibLaTeX, jak oddzielić tytuł i podtytuł dwukropkiem, ale nie wtedy, gdy tytuł kończy się znakiem zapytania?

Dec 09 2020

W przypadku BibLaTeX chciałbym oddzielić tytuł od podtytułu dwukropkiem, tak jak ma to miejsce w niektórych stylach cytowania. Chciałbym jednak, aby mechanizm wykrywał, czy tytuł kończy się cudzysłowem, a jeśli tak, pomija subtitlepunct.

Dokumentacja w §4.7.3 mówi:

\addcolon Dodaje dwukropek, chyba że jest poprzedzony przecinkiem, średnikiem, innym dwukropkiem lub kropką.

Czy mogę dodać „cudzysłów” do tej listy? To znaczy, czy istnieje rozwiązanie, które pozwala uniknąć \isdot?


\documentclass{article}

\begin{filecontents}{test.bib}
    @book{testbook,
      author = {A. U. Thor},
      year = {2020},
      title = {An example title?},
      subtitle = {An example subtitle}
    }
\end{filecontents}

\usepackage{biblatex}
\addbibresource{test.bib}
\renewcommand*{\subtitlepunct}{\addcolon\space}

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

Odpowiedzi

5 moewe Dec 09 2020 at 22:38

Można zadeklarować dopuszczalny przed interpunkcji \addcolonz \DeclarePunctuationPairs. Ustawienie domyślne

\DeclarePunctuationPairs{colon}{*!?}

dopuszcza kropki skrótów, wykrzykniki i znaki zapytania przed dwukropkiem. Po wszystkich innych znakach interpunkcyjnych dwukropek jest pomijany.

Prawdopodobnie chcesz

\documentclass{article}

\usepackage{biblatex}

\renewcommand*{\subtitlepunct}{\addcolon\space}

\DeclarePunctuationPairs{colon}{*}

\begin{filecontents}{\jobname.bib}
@book{testbook,
  author   = {A. U. Thor},
  year     = {2020},
  title    = {An example title?},
  subtitle = {An example subtitle}
}
\end{filecontents}
\addbibresource{\jobname.bib}

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

Zauważ, że \DeclarePunctuationPairsjest to zwykle specyficzne dla języka i dlatego zwykle wymaga życia \DefineBibliographyExtras. Nie jest to wymagane w MWE (które ani babelnie ładuje, ani polyglossia), ale może być bardzo istotne w twojej rzeczywistej aplikacji. Aby uzyskać więcej informacji, zobacz Rozpoznawanie znaków interpunkcyjnych Biblatex .