Perintah kutipan baru menelan tanda baca

Aug 17 2020

Saya menetapkan perintah cite baru untuk ditampilkan shorttitlealih-alih author- yearkombinasi. Masalahnya adalah ia menelan tanda baca yang mengikutinya.

Saya mencoba menggunakan \DeclareCitePunctuationPosition, tetapi tidak berhasil.

Bagaimana cara memperbaikinya?

\documentclass{article}
\usepackage{biblatex-chicago}

\DeclareCiteCommand{\citeabbr}
{\usebibmacro{cite:init}%
  \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\textit{\printfield{shorttitle}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}
  
\DeclareCitePunctuationPosition{\citeabbr}{r} % doesn't work

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
  title = {Dictionary of Medieval Latin from British Sources},
  shorttitle = {DMLBS},
  editor = {Howlett, D.R.},
  date = {1975/2013},
  publisher = {Oxford University Press},
  location = {Oxford},
  addendum = {DMLBS},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\usepackage{hyperref}    

\begin{document}
  \citeabbr[s.v.]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}

Jawaban

5 moewe Aug 17 2020 at 12:08

biblatex memiliki sistem yang sangat canggih untuk menghindari tanda baca ganda atau benturan tanda baca yang tidak diinginkan.

Secara khusus biblatexakan menekan tanda baca apa pun setelah titik akhir kalimat (tanda titik). Jadi '.;' menjadi hanya '.'. 'Masalahnya' adalah Anda tidak ingin menekan koma atau titik koma setelah titik yang menandakan singkatan, jadi 'sv;' baik-baik saja dan tidak perlu direduksi menjadi 'sv'. Sejak '.' pada dasarnya memiliki dua fungsi, Anda harus membantu biblatexdan menjelaskan apa yang Anda maksud saat mengetik .. Secara default biblatexmengasumsikan a .adalah titik. Jika Anda ingin memasukkan titik singkatan, Anda dapat mengucapkan \adddotatau hanya .\isdot.

Karenanya, berikut ini menampilkan 'sv;' baik baik saja.

\documentclass{article}
\usepackage{biblatex-chicago}

\DeclareCiteCommand{\citeabbr}
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\printfield[emph]{shorttitle}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}


\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
  title = {Dictionary of Medieval Latin from British Sources},
  shorttitle = {DMLBS},
  editor = {Howlett, D.R.},
  date = {1975/2013},
  publisher = {Oxford University Press},
  location = {Oxford},
  addendum = {DMLBS},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}

\begin{document}
  \citeabbr[s.v.\isdot]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}


Jika semua .yang mengakhiri catatan postingan Anda adalah titik singkatan, Anda dapat mengotomatiskannya dengan mengubah postnoteformat bidang (definisi aslinya dapat ditemukan di chicago-notes.cbx)

\DeclareFieldFormat{postnote}{% Changed for page compression option
  \ifboolexpr{%
    togl {cms@comprange}%
    and
    test {\ifpages{#1}}%
  }%
  {\iffieldundef{pagination}%
    {\mkcomprange{#1}}%
    {\mkcomprange[{\mkpageprefix[pagination]}]{#1}}}%
  {\iffieldundef{pagination}%
    {#1}%
    {\mkpageprefix[pagination]{#1}}%
   \isdot}}%

Kemudian Anda dapat menghindari keharusan menulis \isdotsetiap kali Anda menggunakan s.v.catatan pos. Tetapi tentu saja itu berarti bahwa a .yang seharusnya menjadi periode akhir kalimat di akhir catatan pos tidak akan dikenali seperti itu.


Jika Anda s.v.sangat sering menggunakan, Anda mungkin ingin menentukan perintah praktis untuk itu yang menghindari kebutuhan akan \isdot.

\documentclass{article}
\usepackage{biblatex-chicago}

\DeclareCiteCommand{\citeabbr}
  {\usebibmacro{cite:init}%
   \usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\printfield[emph]{shorttitle}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\NewBibliographyString{sv}
\DefineBibliographyStrings{english}{
  sv = {s\adddot v\adddot},
}
\newcommand*{\sv}{\bibstring{sv}}

\begin{filecontents}{\jobname.bib}
@book{Howlett1975,
  title = {Dictionary of Medieval Latin from British Sources},
  shorttitle = {DMLBS},
  editor = {Howlett, D.R.},
  date = {1975/2013},
  publisher = {Oxford University Press},
  location = {Oxford},
  addendum = {DMLBS},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}


\begin{document}
  \citeabbr[\sv]{Howlett1975}; this cite command has swallowed my semicolon.
\end{document}