【问题标题】:"Publish" to pdf“发布”为pdf
【发布时间】:2010-01-15 13:07:31
【问题描述】:

使用 Matlab,我想创建一个 pdf 文档,总结几个实验的结果。理想情况下,每个实验我会有一个页面,包含 2 个多面板图形和一些文本。

我认为publish.m 是可行的方法,但是,发布到 pdf 不支持插入分页符,我既无法控制图形质量(这相当糟糕),也无法控制图形大小(这意味着2 个数字占据了整个页面),我也不能将文本填充到页眉/页脚中。

我还能如何创建一个多页 pdf,并在 Matlab 中对布局进行一些控制?

【问题讨论】:

    标签: pdf matlab publish


    【解决方案1】:

    存在 Matlab 报告生成器工具箱,它可以很容易地做到这一点。 当然,这需要一些钱。

    您可以尝试从 Matlab 中写出一些标记文本,然后使用其他一些工具将其转换为 PDF。可能的转换器:

    • 写出LaTeX,然后用PdfLaTeX生成PDF
    • 写出reStructuredText,然后使用Python docutils生成PDF
    • 写出 DocBook XML,然后使用任何 DocBook 到 PDF 转换器
    • 写出 HTML,然后使用浏览器或 OpenOffice 将其打印为 PDF。

    如果您不想这样做,请查看 Matlab 文档。 您可以为已发布的数字指定图像大小/分辨率,我认为存在插入换行符的可能性。

    【讨论】:

    • 感谢您的建议。当然,报告生成器工具箱恰好是我无法访问的工具箱之一。不幸的是,正如我在问题中提到的那样,无法指定发布到 pdf 的图像大小/分辨率和换行符(查看 Matlab 文档和服务请求证实了这一点)。我想这将是学习足够的 LaTeX 来制作一个漂亮的文档,还是使用发布到 HTML 来快速制作东西之间的折腾。
    • 在 M-File cmets 中使用预格式化文本(单元格 > 插入文本标记 > 预格式化文本)怎么样?它支持换行符。为了能够定义图像大小,首先使用print -dpng 命令(参见help print)创建一个单独的图像文件,然后将生成的文件包含在您发布的M 文件中()。您可以指定选项来定义打印图像的大小。
    • 抱歉,我指的是“分页符”,而不是“换行符”。
    【解决方案2】:

    如果您真的想控制 pdf 生成,请查看 iText Java PDF library -- 您可以在 MATLAB 中相当轻松地使用 Java 库。

    【讨论】:

      【解决方案3】:
      1. 这是一个 example.m 文件,其中包含要发布的循环图:

        x = -5 : 5
        for i=1:3
          plot(x, x .^ i );
          snapnow;
          disp('<latex>\clearpage</latex>')
        end
        
      2. 从您的 MATLAB 安装目录中获取一个示例 xsl-stylesheet 文件

        ...\toolbox\matlab\codetools\private\mxdom2latex.xsl
        

        并将其复制到您的 example.m 文件旁边,例如 custom_mxdom2latex.xsl。

      3. 在您的自定义 .xsl 文件中找到以下破坏输出顺序的邪恶行:

        <xsl:apply-templates select="text"/>
        <xsl:apply-templates select="mcode"/>
        <xsl:apply-templates select="img"/>
        <xsl:apply-templates select="mcodeoutput"/>
        
      4. 用这个替换这些行:

        <xsl:apply-templates select="text|mcode|img|mcodeoutput"/>
        
      5. 发布:

        opts.format='latex';opts.stylesheet='custom_mxdom2latex.xsl'
        publish('example', opts)
        

        你已经完成了:)

      附:是的,没有记录,很遗憾。

      【讨论】:

      • 该死,我刚被 MATLAB 抛到一边,在我对 R/Sweave 的积极体验之后,它的报告看起来很糟糕......
      【解决方案4】:

      MathWorks 做了一个 Report Generator toolbox,它允许您设置输出样式 - 基本上它是 publish 函数的一个更高级的版本。

      【讨论】:

        【解决方案5】:

        最后我选择了 LaTeX,因为它提供的文档质量比我使用 HTML 高得多。

        不幸的是,即使在发布到 LaTeX 时,publish.m 也相当有限。例如,如果您在循环中添加多个图形,则无法设置分页符,并且调整图形大小以将 N 个图形精确地放在页面上是非常困难的。

        因此,我写了一个函数来直接写入LaTeX文件(使用文件交换中的export_fig来保存数字),另一个编译为pdf。 这样,我可以轻松生成 LaTeX 文件,并且我对格式化有很大的影响力。

        【讨论】:

          【解决方案6】:

          如上所述,LaTeX 是。如果您发布方程式,您最终会发现这对于良好的输出是必要的。一旦你走这条路,下面的标记就会很好地工作。然后我使用 TexWorks 将 LaTeX 转换为 pdf。一个附带的好处(也是我走这条路的真正原因)是得到比内置 pdf 转换器更好看的方程。在我做其他事情时下载和安装花了一两个小时,它的运行速度比直接转到 pdf 时要快一些。

          %% 
          % <latex>
          % \clearpage
          % </latex>
          

          旁注:Matlab 2012b 中的每个新方程都出现了一些我不记得的错误(方程出现了,我只是有一个错误)。当我切换到 LaTeX 时,这停止了,但我需要在 Matlab 中指定一个首选项文件,并插入这些行以获得我想要的所有方程功能。

          \usepackage{amsmath}

          \usepackage{amssymb}

          我对 LaTeX 或 TeXworks 了解不多,无法知道这些包在发布到 pdfLaTeX+MakeIndex+BibTeX 时默认使用的 TeXworks 添加了哪些功能

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-15
            • 2014-09-22
            • 2012-04-29
            • 2023-04-02
            • 1970-01-01
            相关资源
            最近更新 更多