首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Pandoc设置几何学

通过Pandoc设置几何学
EN

Stack Overflow用户
提问于 2016-08-10 15:54:23
回答 2查看 469关注 0票数 0

我有一个非常宽的表,我将其转换为pandoc表格格式,并使用pandoc命令行工具将纸张宽度设置为20英寸,如下所示(用于pdf输出)--只是一个使用pandoc命令行工具的原型:

代码语言:javascript
复制
<processed input piped to pandoc here> | pandoc -V geometry:margin=.1in 
-V geometry:paperwidth=20in <other options>

有没有任何方法可以使用来设置这些变量?我想解析CSV到pandoc (使用来自Bayhac 2014的Fuel.hs,其中还包括pandoc生成的默认乳胶模板),然后在设置纸张宽度(根据pdf中行的最大长度计算)和边距后导出到pdf。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-11 08:47:02

使用pandoc作为库

有关详细信息,请参阅这个答案,但基本上您使用的是writeLaTeX函数和正确的WriterOptions

代码语言:javascript
复制
makePDF "xelatex" $ writeLaTeX opts document
  where
    opts = def {
      writerVariables = [("geometry","paperwidth=20in"), ("geometry", "margin=.1in")]
    }

它是如何在引擎盖下工作的

首先,geometry是一个模板变量,而不是文档元数据的一部分(参见这个答案)。正如您在LaTeX撰稿人中所看到的,最终输出是通过以下方式生成的:

代码语言:javascript
复制
renderTemplate' template context

这使用了来自renderTemplate'pandoc自己的模板系统函数。在该文件的开头,有一个广泛的示例和文档,说明如何编程使用它。

但基本上是这样的:

代码语言:javascript
复制
import Text.Pandoc.Writers.Shared (defField)
import Text.Pandoc.Templates (renderTemplate')
import Data.Aeson (Value(Object))
import GHC.Exts (fromList)

let context = defField "geometry:paperwidth" "20in"
            $ defField "geometry:margin" ".1in"
            $ Object $ fromList []
renderTemplate' template context

有必要吗?

我仍然不知道为什么要在haskell代码中完成所有这些,因为pandoc滤波器的明确设计是为了让您在文档中轻松地包含数据(比如CSV和pandoc-可定位过滤器),而不必在本质上重新实现pandoc及其模板系统等等。

票数 1
EN

Stack Overflow用户

发布于 2016-08-29 16:02:00

现在修好了。关键是以如下格式传递变量:

代码语言:javascript
复制
makePDF "xelatex" $ writeLaTeX opts document
  where
    opts = def {
      writerVariables = [("geometry","paperwidth=30in"), ("geometry", "margin=.1in")]
    }

对于Fuel.hsexport代码变成:

代码语言:javascript
复制
    export :: (MonadIO m) => String ->  Pandoc -> m (Either BL.ByteString BL.ByteString)
    export tmpl pdoc = liftIO $ makePDF "xelatex" 
      writeLaTeX (def { writerStandalone = True, writerTemplate = tmpl,
      writerVariables = [("geometry","paperwidth=30in"), ("geometry", 
      "margin=.1in")]}) pdoc

我已经修正了@mb21的答案,以反映这一修正。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38878260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档