【问题标题】:Is there an option to control output page orientation (using knitr->pander->pandoc->docx)是否有控制输出页面方向的选项(使用 knitr->pander->pandoc->docx)
【发布时间】:2013-04-16 21:18:41
【问题描述】:

我正在使用Tal's 介绍在现实世界中以尽可能少的开销生成单词表。 (请参阅那里的可重现示例 - 谢谢,Tal!)在实际应用中,表格太宽以在面向纵向的页面上打印它们,但您可能不想拆分它们。

很抱歉,如果我在 pandoc 或 pander 文档中忽略了这一点,但是在从 R 写入 Word .docx 文件时如何控制页面方向(纵向/横向)?

我也许应该补充一点,我开始使用 knitr+markdown,但我还不熟悉 LaTex 语法。但我会在完成我的工作的同时尽可能多地学习。

【问题讨论】:

  • 您只能使用 Pandoc 更改 docx 文档的全局方向(通过传递自定义 --reference-docx)。但是如果你想要一个由 LaTeX 和 Pandoc 生成的 pdf 文件(基于你的最后一段),那绝对是可能的。
  • 嗯,我已经使用了自定义的reference.docx,但是没有效果。
  • 我应该补充:第一@darocig:感谢您的支持!我试过了:system(paste0("pandoc --reference-docx=C:/Users/USER/AppData/Roaming/Pandoc/landscape.docx -o ", FILENAME, ".docx ", FILENAME, ".md")) 确实生成了一个 docx 文件,但它的格式仍然是字母、宽边距、纵向 - 我已经在参考文件中更改了所有内容。也许我只是错过了一些非常基本的东西。如果我知道该怎么做,我会回到这里。

标签: ms-word markdown knitr pandoc pander


【解决方案1】:

我很确定 docx 编写器没有实现分节符,据我所知 --reference-docx 允许自定义样式而不是页面布局(但我在这里也可能错了),这是来自 pandocs 指南--reference-docx:

--reference-docx=文件

在生成 docx 文件时使用指定的文件作为样式参考。 为获得最佳效果,参考 docx 应该是 使用 pandoc 生成的 docx 文件。参考docx的内容 被忽略,但它的样式表在新的 docx 中使用。如果不 参考 docx 在命令行中指定,pandoc 会查找 用户数据目录中的文件 reference.docx(参见 --data-dir)。如果 这也没有找到,将使用合理的默认值。这 pandoc 使用以下样式:[段落] Normal、Title、 作者,日期,标题 1,标题 2,标题 3,标题 4,标题 5, 块引用,定义术语,定义,正文,表格标题, 图片说明; [字符] 默认段落字体、正文字符、 逐字字符、脚注参考、链接。

哪些样式保存在docx 文档的/word/styles.xml 组件中。 另一方面,页面布局保存在<w:sectPr> 标记中的/word/document.xml 组件中,但据我所知,pandoc 的 docx 编写器忽略了这部分。

docx 编写器默认构建一个连续的文档,其中包含标题、段落、简单表格等元素......很像 html 输出。


选项#1(不能解决页面方向问题):

您可以通过样式定义的唯一页面布局选项是pageBreakBefore,它将在特定样式之前添加分页符

选项 #2(看起来很优雅,但尚未经过测试):

最近添加了 custom 编写器,它允许自定义 lua 脚本,您应该能够在其中定义某些 Pandoc 块将如何写入输出文件...意味着您可能会为将sectPr 标记插入文档的特定块定义分节符和页面布局。我还没有尝试过,但值得研究。 On pandoc github you can check out a sample lua script file for custom html output.

然而,这意味着,你必须安装 lua,学习语言,如果你认为值得花时间投资,这取决于你。

Optin #3(在 Word 中单击几下即可):

因为您可能会花费相当多的时间来设置如何插入部分以及正确的大小、边距以及如何使表格适合这样的布局...我建议您使用 pandoc 来放置 write您在 Word 中打开并手动进行布局的 document.docx:

  • 在横向页面上选择您想要的表格
  • 转到布局>边距
    >选择应用于:所选文本
    >选择页面设置>选择横向

现在,您的桌子周围应该会出现一个横向的新部分。

无论如何,您可能还想做的是稍微设置表格和表格标题的样式(字体大小,...),以达到最佳效果(所有文本样式都可以使用 pandoc 其中--reference-docx派上用场)。

选项 #4(在您可以只使用 pdf 而不是 docx 的情况下):

据我所知,pandoc 可以很好地处理md -> docx 中的表格(对齐,样式,...),在tex -> docx 中有时会遇到一些麻烦。但是,如果您的选项允许 pdf 输出,那么 Latex 将是您最好的朋友。例如,您的问题就像使用一样容易解决

\usepackage{pdflscape}

并将其添加到您的桌子周围

\begin{landscape}
...
\end{landscape}

这是我目前能想到的选项。

我始终建议您使用 pdf 格式的报告,因为您可以根据自己的喜好使用 Latex 设置样式,并且布局将保持您想要的样子。

但是,我也知道,由于各种原因,word 文档仍然是许多领域审稿的主要方式......所以我很可能会选择我建议的选项 3,主要是因为它是一种懒惰且快速的解决方案并且因为我通常没有很多文档,其中包含大量放置和样式笨拙的巨型桌子。

祝你好运;-)

【讨论】:

  • 谢谢,非常详尽。稍后我会仔细查看您的答案;目前我将坚持在 Word 中手动更改页面方向(添加分节符后)。有趣的是 pandoc 似乎忽略了<w:sectPr> 标签。这意味着除了七个'usual suspects' countries 之外的每个人都需要手动干预以遵循 ISO 标准。我觉得人们困惑地盯着只有一个 DinA4 托盘的非活动打印机。
  • 打印也不需要word doc文件,对吧?您将使用将布局和样式设置为所需设置的 pdf。
  • 我尝试使用\usepackage{pdflscape},但它不适用于 pandoc to pdf。
  • 感谢领导 - 我最终用 Lua 过滤器实现了这个!
【解决方案2】:

基于 Taleb 的回答 here 和一些 officerfunctions,我创建了一个可以像这样使用的小要点:

---
title: "Example"
author: "Dan Chaltiel"
output: 
  word_document:
    pandoc_args:
     '--lua-filter=page-break.lua'
---

I'm in portrait

\endLandscape

I'm in landscape

\endPortrait

I'm in portrait again

page-breaks.lua 是此处托管的文件:https://gist.github.com/DanChaltiel/e7505e62341093cfdc489265963b6c8f

这远非完美(例如,如果没有最后一个肖像部分,它将无法工作),但有时它非常有用。

【讨论】:

  • 希望我能得到这个来让我的 Word 文档从 RMarkdown 变成横向但不能!是否需要其他部件才能使其运行?收到此错误Error running filter page-break.lua: page-break.lua: openBinaryFile: does not exist (No such file or directory) Error: pandoc document conversion failed with error 83 Execution halted
  • @VickiB 好吧,错误很明显,看来你没有下载文件,或者没有放对地方
  • @VickiB 我认为这是一个很好的问题,请注意我 (@) 以便我看到它,也许我能找到一些东西
  • @MartineJ 取决于您的配置,通常,它位于 RStudio 项目的根目录或与您尝试编织的 Rmd 文件位于同一文件夹中
  • @Cocowalla 不知道,但这个答案有点过时了。你应该看看officedown。这是一个示例:link.
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 2021-08-26
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多