LaTeX reader: Add ", " to suffix...
if it doesn't start w space or punctuation. Otherwise we get no space between the year and the suffix in author-date styles.
This commit is contained in:
parent
fe3d8ea418
commit
f59e33dd1a
3 changed files with 32 additions and 28 deletions
|
@ -78,14 +78,14 @@ natbibCitations = testGroup "natbib"
|
|||
=?> para (cite [baseCitation] (rt "\\citet{item1}"))
|
||||
, "suffix" =: "\\citet[p.~30]{item1}"
|
||||
=?> para
|
||||
(cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))
|
||||
(cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))
|
||||
, "suffix long" =: "\\citet[p.~30, with suffix]{item1}"
|
||||
=?> para (cite [baseCitation{ citationSuffix =
|
||||
toList $ text "p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))
|
||||
toList $ text ", p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))
|
||||
, "multiple" =: "\\citeauthor{item1} \\citetext{\\citeyear{item1}; \\citeyear[p.~30]{item2}; \\citealp[see also][]{item3}}"
|
||||
=?> para (cite [baseCitation{ citationMode = AuthorInText }
|
||||
,baseCitation{ citationMode = SuppressAuthor
|
||||
, citationSuffix = [Str "p.\160\&30"]
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&30"]
|
||||
, citationId = "item2" }
|
||||
,baseCitation{ citationId = "item3"
|
||||
, citationPrefix = [Str "see",Space,Str "also"]
|
||||
|
@ -94,28 +94,28 @@ natbibCitations = testGroup "natbib"
|
|||
, "group" =: "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationPrefix = [Str "see"]
|
||||
, citationSuffix = [Str "p.\160\&34\8211\&35"] }
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }
|
||||
,baseCitation{ citationMode = NormalCitation
|
||||
, citationId = "item3"
|
||||
, citationPrefix = [Str "also"]
|
||||
, citationSuffix = [Str "chap.",Space,Str "3"] }
|
||||
, citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }
|
||||
] (rt "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"))
|
||||
, "suffix and locator" =: "\\citep[pp.~33, 35--37, and nowhere else]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))
|
||||
, citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))
|
||||
, "suffix only" =: "\\citep[and nowhere else]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationSuffix = toList $ text "and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))
|
||||
, citationSuffix = toList $ text ", and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))
|
||||
, "no author" =: "\\citeyearpar{item1}, and now Doe with a locator \\citeyearpar[p.~44]{item2}"
|
||||
=?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\citeyearpar{item1}") <>
|
||||
text ", and now Doe with a locator " <>
|
||||
cite [baseCitation{ citationMode = SuppressAuthor
|
||||
, citationSuffix = [Str "p.\160\&44"]
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&44"]
|
||||
, citationId = "item2" }] (rt "\\citeyearpar[p.~44]{item2}"))
|
||||
, "markup" =: "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationPrefix = [Emph [Str "see"]]
|
||||
, citationSuffix = [Str "p.",Space,
|
||||
, citationSuffix = [Str ",",Space,Str "p.",Space,
|
||||
Strong [Str "32"]] }] (rt "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"))
|
||||
]
|
||||
|
||||
|
@ -125,14 +125,14 @@ biblatexCitations = testGroup "biblatex"
|
|||
=?> para (cite [baseCitation] (rt "\\textcite{item1}"))
|
||||
, "suffix" =: "\\textcite[p.~30]{item1}"
|
||||
=?> para
|
||||
(cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))
|
||||
(cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))
|
||||
, "suffix long" =: "\\textcite[p.~30, with suffix]{item1}"
|
||||
=?> para (cite [baseCitation{ citationSuffix =
|
||||
toList $ text "p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))
|
||||
toList $ text ", p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))
|
||||
, "multiple" =: "\\textcites{item1}[p.~30]{item2}[see also][]{item3}"
|
||||
=?> para (cite [baseCitation{ citationMode = AuthorInText }
|
||||
,baseCitation{ citationMode = NormalCitation
|
||||
, citationSuffix = [Str "p.\160\&30"]
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&30"]
|
||||
, citationId = "item2" }
|
||||
,baseCitation{ citationId = "item3"
|
||||
, citationPrefix = [Str "see",Space,Str "also"]
|
||||
|
@ -141,28 +141,28 @@ biblatexCitations = testGroup "biblatex"
|
|||
, "group" =: "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationPrefix = [Str "see"]
|
||||
, citationSuffix = [Str "p.\160\&34\8211\&35"] }
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }
|
||||
,baseCitation{ citationMode = NormalCitation
|
||||
, citationId = "item3"
|
||||
, citationPrefix = [Str "also"]
|
||||
, citationSuffix = [Str "chap.",Space,Str "3"] }
|
||||
, citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }
|
||||
] (rt "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"))
|
||||
, "suffix and locator" =: "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))
|
||||
, citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))
|
||||
, "suffix only" =: "\\autocite[and nowhere else]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationSuffix = toList $ text "and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))
|
||||
, citationSuffix = toList $ text ", and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))
|
||||
, "no author" =: "\\autocite*{item1}, and now Doe with a locator \\autocite*[p.~44]{item2}"
|
||||
=?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\autocite*{item1}") <>
|
||||
text ", and now Doe with a locator " <>
|
||||
cite [baseCitation{ citationMode = SuppressAuthor
|
||||
, citationSuffix = [Str "p.\160\&44"]
|
||||
, citationSuffix = [Str ",",Space,Str "p.\160\&44"]
|
||||
, citationId = "item2" }] (rt "\\autocite*[p.~44]{item2}"))
|
||||
, "markup" =: "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation
|
||||
, citationPrefix = [Emph [Str "see"]]
|
||||
, citationSuffix = [Str "p.",Space,
|
||||
, citationSuffix = [Str ",",Space,Str "p.",Space,
|
||||
Strong [Str "32"]] }] (rt "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"))
|
||||
, "parencite" =: "\\parencite{item1}"
|
||||
=?> para (cite [baseCitation{ citationMode = NormalCitation }] (rt "\\parencite{item1}"))
|
||||
|
|
|
@ -41,7 +41,7 @@ import qualified Text.Pandoc.UTF8 as UTF8
|
|||
import Data.Char ( chr, ord )
|
||||
import Control.Monad
|
||||
import Text.Pandoc.Builder
|
||||
import Data.Char (isLetter)
|
||||
import Data.Char (isLetter, isPunctuation, isSpace)
|
||||
import Control.Applicative
|
||||
import Data.Monoid
|
||||
import System.FilePath (replaceExtension)
|
||||
|
@ -800,20 +800,24 @@ preamble = mempty <$> manyTill preambleBlock beginDoc
|
|||
|
||||
-- citations
|
||||
|
||||
addPrefix :: Inlines -> [Citation] -> [Citation]
|
||||
addPrefix p (k:ks) = k {citationPrefix = toList p ++ citationPrefix k} : ks
|
||||
addPrefix :: [Inline] -> [Citation] -> [Citation]
|
||||
addPrefix p (k:ks) = k {citationPrefix = p ++ citationPrefix k} : ks
|
||||
addPrefix _ _ = []
|
||||
|
||||
addSuffix :: Inlines -> [Citation] -> [Citation]
|
||||
addSuffix :: [Inline] -> [Citation] -> [Citation]
|
||||
addSuffix s ks@(_:_) =
|
||||
let k = last ks
|
||||
in init ks ++ [k {citationSuffix = citationSuffix k ++ toList s}]
|
||||
let k = last ks
|
||||
s' = case s of
|
||||
(Str (c:_):_)
|
||||
| not (isPunctuation c || isSpace c) -> Str "," : Space : s
|
||||
_ -> s
|
||||
in init ks ++ [k {citationSuffix = citationSuffix k ++ s'}]
|
||||
addSuffix _ _ = []
|
||||
|
||||
simpleCiteArgs :: LP [Citation]
|
||||
simpleCiteArgs = try $ do
|
||||
first <- optionMaybe opt
|
||||
second <- optionMaybe opt
|
||||
first <- optionMaybe $ toList <$> opt
|
||||
second <- optionMaybe $ toList <$> opt
|
||||
char '{'
|
||||
keys <- manyTill citationLabel (char '}')
|
||||
let (pre, suf) = case (first , second ) of
|
||||
|
@ -850,7 +854,7 @@ citation name mode multi = do
|
|||
|
||||
complexNatbibCitation :: CitationMode -> LP Inlines
|
||||
complexNatbibCitation mode = try $ do
|
||||
let ils = (trimInlines . mconcat) <$>
|
||||
let ils = (toList . trimInlines . mconcat) <$>
|
||||
many (notFollowedBy (oneOf "\\};") >> inline)
|
||||
let parseOne = try $ do
|
||||
skipSpaces
|
||||
|
|
|
@ -259,7 +259,7 @@ Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docA
|
|||
,HorizontalRule
|
||||
,Header 1 [Str "LaTeX"]
|
||||
,BulletList
|
||||
[[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]
|
||||
[[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str ",",Space,Str "22-23"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]
|
||||
,[Para [RawInline "latex" "\\doublespacing"]]
|
||||
,[Para [Math InlineMath "2+2=4"]]
|
||||
,[Para [Math InlineMath "x \\in y"]]
|
||||
|
|
Loading…
Add table
Reference in a new issue