From f0c47907ca1d7ee9600a574c3e007640c7700d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20L=C3=B6=C3=B6w?= Date: Sat, 17 Oct 2015 22:58:09 +0200 Subject: [PATCH] Consider header files when determining whether to use csquotes. --- README | 13 +++++++------ src/Text/Pandoc/Writers/LaTeX.hs | 9 +++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README b/README index f10de123c..df6798618 100644 --- a/README +++ b/README @@ -184,10 +184,10 @@ document contains images), [`color`], [`hyperref`], [`ulem`], [`mathspec`], [`polyglossia`] (with `lang`), [`xecjk`], and [`bidi`] (with the `dir` variable set). The [`upquote`] and [`microtype`] packages are used if available, and [`csquotes`] will -be used for [smart punctuation] if added to the template. The -[`natbib`], [`biblatex`], [`bibtex`], and [`biber`] packages can -optionally be used for [citation rendering]. These are included with -all recent versions of [TeX Live]. +be used for [smart punctuation] if added to the template or included in +any header file. The [`natbib`], [`biblatex`], [`bibtex`], and [`biber`] +packages can optionally be used for [citation rendering]. These are +included with all recent versions of [TeX Live]. PDF output can be controlled using [variables for LaTeX]. @@ -2377,8 +2377,9 @@ correct output, converting straight quotes to curly quotes, `---` to em-dashes, `--` to en-dashes, and `...` to ellipses. Nonbreaking spaces are inserted after certain abbreviations, such as "Mr." -Note: if your LaTeX template calls for the [`csquotes`] package, pandoc will -detect this automatically and use `\enquote{...}` for quoted text. +Note: if your LaTeX template or any included header file call for the +[`csquotes`] package, pandoc will detect this automatically and use +`\enquote{...}` for quoted text. Inline formatting ----------------- diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 770a674b7..15982736c 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -38,7 +38,7 @@ import Text.Pandoc.Options import Text.Pandoc.Templates import Text.Printf ( printf ) import Network.URI ( isURI, unEscapeString ) -import Data.Aeson (object, (.=)) +import Data.Aeson ( object, (.=), FromJSON ) import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse ) import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit, ord ) import Data.Maybe ( fromMaybe ) @@ -129,7 +129,12 @@ pandocToLaTeX options (Pandoc meta blocks) = do | otherwise -> return () -- check for \usepackage...{csquotes}; if present, we'll use -- \enquote{...} for smart quotes: - when ("{csquotes}" `isInfixOf` template) $ + let headerIncludesField :: FromJSON a => Maybe a + headerIncludesField = getField "header-includes" metadata + let headerIncludes = fromMaybe [] $ mplus + (fmap return headerIncludesField) + headerIncludesField + when (any (isInfixOf "{csquotes}") (template : headerIncludes)) $ modify $ \s -> s{stCsquotes = True} let (blocks'', lastHeader) = if writerCiteMethod options == Citeproc then (blocks', [])