Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Markdown 标记为docx,包括复杂模板_Markdown_Docx_Pandoc - Fatal编程技术网

Markdown 标记为docx,包括复杂模板

Markdown 标记为docx,包括复杂模板,markdown,docx,pandoc,Markdown,Docx,Pandoc,我已经使用Pandoc将我的构建自动化,将降价文件转换为DOCX文件。我甚至使用了一个参考文档作为最终文档的样式。我使用的命令是: pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx Pandoc从docs/rendering中提取reference.docx,Pandoc以与参考文档相同的样式呈现mydoc.docx 然而,reference.docx包含的不仅仅是样式。它包含公司标志、序言

我已经使用Pandoc将我的构建自动化,将降价文件转换为DOCX文件。我甚至使用了一个参考文档作为最终文档的样式。我使用的命令是:

pandoc -f markdown -t docx --data-dir=docs/rendering/ mydoc.md -o mydoc.docx
Pandoc从
docs/rendering
中提取
reference.docx
,Pandoc以与参考文档相同的样式呈现
mydoc.docx

然而,
reference.docx
包含的不仅仅是样式。它包含公司标志、序言等


如何将降价内容与
reference.docx
的样式和内容自动合并。我的解决方案需要在Linux上运行。

理想情况下,PanDoc很快就会扩展此功能

我不知道有什么工具可以直接完成这项工作,但您可能会在代码中将
reference.docx
和您的PanDoc生成的
mydoc.docx
合并起来

docx格式是(大部分)XML文件的ZIP存档。最重要的是
word/document.xml
。如果您使用XML工具从一个文件中获取(大部分)document.XML,并将其插入到另一个文件中,您将获得更接近您需要的内容


我可以在Ruby中拼凑一个例子,如果有插图的话。

理想情况下,你可以使用自定义的docx模板,但pandoc还不支持。
reference.docx
文件只允许在新创建的docx文件中嵌入自定义样式

幸运的是,您可以使用odt而不是docx来近似此值。您可以相当轻松地修改,以包含自定义徽标、前言和其他内容。将自定义模板与
reference.odt
文件结合使用,以获取所有样式和自定义内容

一旦文件采用odt格式,就可以使用任意数量的命令行工具将odt转换为docx。例如,在Linux上,您可以运行

libreoffice --invisible --convert-to docx test.odt
或在OS X上:

/Applications/LibreOffice.app/Contents/MacOS/soffice.bin --invisible --convert-to docx test.odt
更新

使用用户Christian Long建议的管道版本:

pandoc -t latex mydoc.md | pandoc -f latex --data-dir=docs/rendering/ -o mydoc.docx

我知道这已经晚了,但我假设人们在最初的问题提出三年后仍然在寻找解决方案——我知道我是

我的解决方案是使用LaTeX作为markdown和docx之间的中介(实际上,我是从组织模式转换过来的,但有相同的区别)。因此,在您的情况下,我认为一个线性解决方案是:

pandoc -f markdown -t latex -o mydoc.tex mydoc.md && \
pandoc -f latex -t docx --data-dir=docs/rendering/ -o mydoc.docx mydoc.tex
这可能会让你更接近你的目标。当然,潘多克有大约一百个可以处理的论点,也许有办法让它变得更漂亮。自从你第一次发布你的问题以来,它也得到了不少更新。

UPDATE:此功能不完整 我在一些复杂的模板上使用了它,发现它很好地映射了字体、公司徽标等。但是在.docx->.docx中,我必须手动将标题样式应用于章节/章节分隔符。字体是正确的,但剖面不正确。我下一步试试.md->.docx


此功能现在在Pandoc中可用,如下所述:

从上面的链接:

pandoc  input --reference-docx=my-reference.docx -o out.docx
其中
my reference.docx
(注意:不是
.dotx
)可以是:

  • 当前文件夹或
  • 由--data dir或定义的文件夹
  • 数据目录的系统默认文件夹为
    • 类UNIX系统上的$HOME/.pandoc
    • C:\Documents And Settings\USERNAME\Application Data\pandoc在Windows XP上不应再使用
    • Windows Vista或更高版本上的C:\Users\USERNAME\AppData\Roaming\pandoc

您可以尝试MergeDocx(我们的商业产品;Java)我曾经尝试过这样做,但我发现只渲染具有特殊打印样式的网页并让Chrome从中生成PDF更容易。或将页面打印到PDF打印机。我不得不重新创建整个DOCX,但这似乎比合并整个格式更容易(而且有出错的风险)。为什么不自动将DOCX文件/模板转换为odt呢?然后在pandoc转换中使用odt?(我是pandoc和文档模板新手,请原谅我无知的问题。)pandoc需要odt模板中的特殊变量才能正常工作(例如,请参阅)。你不能在原生docx中创建它们,它们必须通过文本编辑器手动添加。此解决方案有效。为了简化一点,您可以跳过中间的
.tex
文件,将LaTeX格式的数据从一个pandoc传输到另一个pandoc
pandoc-t latex mydoc.md | pandoc-f latex--data dir=docs/rendering/-o mydoc.docx
这行代码似乎不完整,无法回答上述问题。