구두점을 삼키는 새로운 인용 명령

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입력 할 때 의미하는 바를 설명하고 도와야 합니다 .. 기본적으로 biblatexa .는 마침표 라고 가정합니다 . 약어 점을 입력하려면 \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.않아도됩니다. 그러나 당연히 그것은 .포스트 노트의 끝 부분에서 문장이 끝나는 마침표 인 a는 그렇게 인식되지 않는다는 것을 의미합니다.


s.v.자주 사용 하는 경우 .NET Framework를 사용하지 않는 편리한 명령을 정의 할 수 있습니다 \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}