From 4b220d592c163efb0bf5a0e1db2ed7d6be9c69e7 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Sat, 18 Dec 2021 12:13:06 -0800 Subject: Citeproc: avoid adding comma before an author-in-text citation... ...in a note if it begins with a title (no author). Closes #7761. --- src/Text/Pandoc/Citeproc.hs | 22 ++++++++++++++-------- test/command/7761.md | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 test/command/7761.md diff --git a/src/Text/Pandoc/Citeproc.hs b/src/Text/Pandoc/Citeproc.hs index f235f6e01..03a15e9f6 100644 --- a/src/Text/Pandoc/Citeproc.hs +++ b/src/Text/Pandoc/Citeproc.hs @@ -543,7 +543,7 @@ deNote (Note bs) = addParens [] = [] addParens (Cite (c:cs) ils : zs) | citationMode c == AuthorInText - = Cite (c:cs) (concatMap (noteAfterComma (needsPeriod zs)) ils) : + = Cite (c:cs) (addCommas (needsPeriod zs) ils) : addParens zs | otherwise = Cite (c:cs) (concatMap noteInParens ils) : addParens zs @@ -564,13 +564,19 @@ deNote (Note bs) = removeFinalPeriod ils ++ [Str ")"] noteInParens x = [x] - noteAfterComma needsPer (Span ("",["csl-note"],[]) ils) - | not (null ils) - = Str "," : Space : - if needsPer - then ils - else removeFinalPeriod ils - noteAfterComma _ x = [x] + -- We want to add a comma before a CSL note citation, but not + -- before the author name, and not before the first citation + -- if it doesn't begin with an author name. + addCommas = addCommas' True -- boolean == "at beginning" + + addCommas' _ _ [] = [] + addCommas' atBeginning needsPer + (Span ("",["csl-note"],[]) ils : rest) + | not (null ils) + = (if atBeginning then id else ([Str "," , Space] ++)) $ + (if needsPer then ils else removeFinalPeriod ils) ++ + addCommas' False needsPer rest + addCommas' _ needsPer (il : rest) = il : addCommas' False needsPer rest deNote x = x diff --git a/test/command/7761.md b/test/command/7761.md new file mode 100644 index 000000000..0307bcaee --- /dev/null +++ b/test/command/7761.md @@ -0,0 +1,35 @@ +``` +% pandoc --citeproc --csl command/chicago-fullnote-bibliography.csl -t plain +--- +references: +- id: noauthor + issued: 2020 + publisher: Oxford University Press + publisher-place: Oxford + title: Title + type: book +- id: author + author: + - family: Jones + given: Jim + issued: 2021 + title: Title + type: book + url: "https://duckduckgo.com/cite2021" +--- + +Text.[^n] + +[^n]: See @author. Another example of a sea level mapping tool with +similar limitations is @noauthor. +^D +Text.[1] + +Jones, Jim. Title, 2021. https://duckduckgo.com/cite2021. + +Title. Oxford: Oxford University Press, 2020. + +[1] See Jim Jones, Title, 2021, https://duckduckgo.com/cite2021. Another +example of a sea level mapping tool with similar limitations is Title +(Oxford: Oxford University Press, 2020). +``` -- cgit v1.2.3