我正在使用knitr和pandoc通过markdown生成一些odt/docx报告,现在我想知道如何制作表格.主要是我有兴趣添加规则(至少在标题下方的顶部,底部和一个,但是能够在表格中添加任意的规则也很好).
通过pandoc(没有任何特殊参数)从pandoc文档运行以下示例只会产生一个"普通"表,没有任何规则/颜色/指南(在任何一个-t odt或中-t docx).
+---------------+---------------+--------------------+
| Fruit | Price | Advantages |
+===============+===============+====================+
| Bananas | $1.34 | - built-in wrapper |
| | | - bright color |
+---------------+---------------+--------------------+
| Oranges | $2.10 | - cures scurvy |
| | | - tasty |
+---------------+---------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
我已经通过"样式"查看了在引用.docx/.odt中指定表格格式的可能性,但在"表格标题"和"表格内容"样式之外没有发现任何明显的东西,这两种样式似乎只涉及格式化表格中的文字.
由于对WYSIWYG风格的文档处理器不太熟悉,我对如何继续而感到迷茫.
我正在为我的一个小项目写一些管道 - core/attoparsec管道.我希望每个解析器都提供一个管道,等待ByteString输入到解析器并产生任何解析的值(重新启动解析器).没有错误处理,它将具有类似的类型
parserP :: Monad m => Parser a -> Pipe ByteString a m r
Run Code Online (Sandbox Code Playgroud)
现在,我不确定如何处理解析错误.我目前的想法是:
Either ParseError r而不仅仅是r)MonadError)ErrorT e m a对任何单子m(ParseError -> P.Pipe ByteString a m r),在解析错误的情况下简单地绑定到这样提供的管道)第一个解决方案似乎是错误的,因为使用管道的返回类型进行错误处理似乎更像是一个黑客攻击.一方面,它使管道组成更加丑陋,似乎或多或少被最终解决方案所包含(除了可能失去让下游管道能够通过使用tryAwait从错误中恢复并停止等待值的能力?).
第二种解决方案似乎不对,但我无法完全理解为什么.可能因为它(可能?)还需要一个参数将ParseError转换为monad所具有的任何错误类型(除非我们希望monad实现MonadError ParseError,这似乎会导致大量的簿记).最后,我似乎无法记得看到MonadError这么多,这表明使用它存在一些问题.
第三种解决方案适用于我的情况,因为管道将是管道的一部分,用户指定的monad(IO)不应该关心解析错误(它会将网络数据解析为产生用户的格式)指定的类型).但它看起来并不那么优雅,并且会再次(可能?)导致在任何其他环境中使用过很多书籍.
我没有真正考虑过最终的解决方案,但似乎有点费解.
对于这个特殊情况的任何想法我都会感激不尽(如果我离开并且遗漏了一些明显的东西,我就不会感到惊讶),以及任何(或多或少相关)关于管道中错误处理的讨论的参考( -core)/ conduit/interatee等
编辑:另一种可能性可能只采取一个monadic动作(而不是一个完整的管道),虽然我不太确定它是否可能只是概括,专业甚至相当于第四个.