aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2018-10-08 20:47:09 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2018-10-08 20:47:09 -0700
commita92e43575fb44c47263603b1dc5db9ef4f7421d3 (patch)
treea6ba58a1552d58d65c2264a351c6da64838e3820
parentb60c64d06e1fa7d5f3e41cc0c93da965a286e11c (diff)
downloadpandoc-a92e43575fb44c47263603b1dc5db9ef4f7421d3.tar.gz
LaTeX writer: with `--biblatex`, use `\autocite` when possible.
`\autocites{a1}{a2}{a3}` will not collapse the entries. So, if we don't have prefixes and suffixes, we use instead `\autocite{a1;a2;a3}`. Closes #4960.
-rw-r--r--src/Text/Pandoc/Writers/LaTeX.hs34
-rw-r--r--test/command/4960.md22
2 files changed, 43 insertions, 13 deletions
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs
index c1b5d0fa4..891c20f07 100644
--- a/src/Text/Pandoc/Writers/LaTeX.hs
+++ b/src/Text/Pandoc/Writers/LaTeX.hs
@@ -1366,19 +1366,27 @@ citationsToBiblatex
AuthorInText -> "textcite"
NormalCitation -> "autocite"
-citationsToBiblatex (c:cs) = do
- args <- mapM convertOne (c:cs)
- return $ text cmd <> foldl' (<>) empty args
- where
- cmd = case citationMode c of
- SuppressAuthor -> "\\autocites*"
- AuthorInText -> "\\textcites"
- NormalCitation -> "\\autocites"
- convertOne Citation { citationId = k
- , citationPrefix = p
- , citationSuffix = s
- }
- = citeArguments p s k
+citationsToBiblatex (c:cs)
+ | all (\cit -> null (citationPrefix cit) && null (citationSuffix cit)) (c:cs)
+ = do
+ let cmd = case citationMode c of
+ SuppressAuthor -> "\\autocite*"
+ AuthorInText -> "\\textcite"
+ NormalCitation -> "\\autocite"
+ return $ text cmd <>
+ braces (text (intercalate "," (map citationId (c:cs))))
+ | otherwise = do
+ let cmd = case citationMode c of
+ SuppressAuthor -> "\\autocites*"
+ AuthorInText -> "\\textcites"
+ NormalCitation -> "\\autocites"
+ let convertOne Citation { citationId = k
+ , citationPrefix = p
+ , citationSuffix = s
+ }
+ = citeArguments p s k
+ args <- mapM convertOne (c:cs)
+ return $ text cmd <> foldl' (<>) empty args
citationsToBiblatex _ = return empty
diff --git a/test/command/4960.md b/test/command/4960.md
new file mode 100644
index 000000000..7253b533a
--- /dev/null
+++ b/test/command/4960.md
@@ -0,0 +1,22 @@
+```
+% pandoc -t latex --biblatex
+[@a1;@a2;@a3]
+^D
+\autocite{a1,a2,a3}
+```
+
+```
+% pandoc -t latex --biblatex
+@a1 [@a2;@a3]
+^D
+\textcite{a1,a2,a3}
+```
+
+```
+% pandoc -t latex --biblatex
+[@a1, blah; @a2; see @a3]
+^D
+\autocites[blah]{a1}{a2}[see][]{a3}
+```
+
+