नया हवाला आदेश विराम चिह्नों को निगलता है

Aug 17 2020

मैंने - संयोजन के shorttitleबजाय दिखाने के लिए एक नया हवाला दिया । समस्या यह है कि यह इसके बाद विराम चिह्न को निगल जाता है।authoryear

मैंने उपयोग करने की कोशिश की \DeclareCitePunctuationPosition, लेकिन कोई फायदा नहीं हुआ।

मैं इसे कैसे ठीक करूं?

\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}

जवाब

5 moewe Aug 17 2020 at 12:08

biblatex अवांछनीय डबल विराम चिह्न या विराम चिह्नों से बचने के लिए एक बहुत ही परिष्कृत प्रणाली है।

विशेष रूप biblatexसे एक वाक्य-समाप्ति अवधि (पूर्ण विराम) के बाद किसी भी विराम चिह्न को दबा देगा। इसलिए '।;' बस '' बन जाता है। 'समस्या' यह है कि आप एक संक्षिप्त नाम के बाद एक अल्पविराम या अर्धविराम को दबाना नहीं चाहेंगे, इसलिए # sv; ' पूरी तरह से ठीक है और 'sv' की जरूरत नहीं है। चूंकि '।' अनिवार्य रूप से दो कार्य हैं, आपको इसके biblatexसाथ मदद करनी होगी और यह बताना होगा कि जब आप टाइप करते हैं तो उसका क्या मतलब होता है .। डिफ़ॉल्ट रूप से माना जाता biblatexहै कि .यह एक अवधि है। यदि आप एक संक्षिप्त नाम दर्ज करना चाहते हैं तो आप कह सकते हैं \adddotया बस .\isdot

इसलिए, निम्नलिखित 'sv;' प्रदर्शित करता है। बस ठीक।

\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}


यदि .आपके पोस्टनोट्स समाप्त होने वाले सभी postnoteशब्द संक्षिप्त नाम हैं, तो आप इसे फ़ील्ड प्रारूप को संशोधित करके स्वचालित कर सकते हैं (मूल परिभाषा को इसमें पाया जा सकता है 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}}%

तब आप \isdotहर बार जब आप s.v.एक पोस्टनोट में उपयोग करते हैं तो लिखने से बच सकते हैं । लेकिन निश्चित रूप से इसका मतलब है कि .पोस्टनोट के अंत में एक वाक्य-समाप्ति अवधि माना जाता है, इस तरह से मान्यता प्राप्त नहीं होगी।


यदि आप s.v.बहुत बार उपयोग कर रहे हैं , तो आप इसके लिए एक आसान कमांड परिभाषित कर सकते हैं जो इसकी आवश्यकता से बचा जाता है \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}