包含 Octave(MatLab 克隆)生成的 tikz tex 文件的问题

包含 Octave(MatLab 克隆)生成的 tikz tex 文件的问题

我在 Octave 中绘制了一个图形,并将其打印为 TikZ 图形(参见设备选项) 到名为的 tex 文件comparison_tikz.tex,然后我使用以下行将其导入到我的文档中

\input{comparison_tikz.tex}

我还在文档的前言部分包含了 tikz 包。但是,当我尝试编译文档时,出现以下错误:

line 17   Use of \tikz@parse@cs@xy polar doesn't match its definition ...gb]{0,0,0}{{25}}}{}{\pgfusepath{discard}}}
line 17   Extra }, or forgotten \endgroup ...gb]{0,0,0}{{25}}}{}{\pgfusepath{discard}}}
line 0    Missing control sequence inserted

我尝试用谷歌搜索,但找不到任何有关该错误的信息。我看到它抱怨极坐标的问题,但我制作的图并不使用极坐标。

当我双击任何错误消息时,它会将我带到生成的文件的第 17 行(看起来与文件中的其他行几乎完全相同)。无论如何,这是文件的开头:

% Title: glps_renderer figure
% Creator: GL2PS 1.3.6, (C) 1999-2011 C. Geuzaine
% For: Octave
% CreationDate: Wed Jun 13 08:48:06 2012
\begin{pgfpicture}
{
\pgftransformshift{\pgfpoint{246.399994pt}{73.195633pt}}
\pgfnode{rectangle}{north}{\fontsize{10}{0}\selectfont\textcolor[rgb]{0,0,0}{{10}}}{}{\pgfusepath{discard}}}
{
\pgftransformshift{\pgfpoint{333.199982pt}{73.195633pt}}
\pgfnode{rectangle}{north}{\fontsize{10}{0}\selectfont\textcolor[rgb]{0,0,0}{{15}}}{}{\pgfusepath{discard}}}
{
\pgftransformshift{\pgfpoint{419.999969pt}{73.195633pt}}
\pgfnode{rectangle}{north}{\fontsize{10}{0}\selectfont\textcolor[rgb]{0,0,0}{{20}}}{}{\pgfusepath{discard}}}
{
\pgftransformshift{\pgfpoint{506.799957pt}{73.195633pt}}
\pgfnode{rectangle}{north}{\fontsize{10}{0}\selectfont\textcolor[rgb]{0,0,0}{{25}}}{}{\pgfusepath{discard}}} % This is the line causing the error
{
\pgftransformshift{\pgfpoint{67.799995pt}{78.200020pt}}
\pgfnode{rectangle}{east}{\fontsize{10}{0}\selectfont\textcolor[rgb]{0,0,0}{{0}}}{}{\pgfusepath{discard}}}
{

如果我将图表打印为 tex 图形并尝试将其包含在内,则在尝试编译文档时也会出错;生成的 tex 文件如下所示

% Title: glps_renderer figure
% Creator: GL2PS 1.3.6, (C) 1999-2011 C. Geuzaine
% For: Octave
% CreationDate: Wed Jun 13 08:48:05 2012
\setlength{\unitlength}{1pt}
\begin{picture}(0,0)
\includegraphics{}
\end{picture}% This is the line causing the error
\begin{picture}(576,412)(0,0)
\fontsize{10}{0}
\selectfont\put(246.4,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{10}}}}
\fontsize{10}{0}
\selectfont\put(333.2,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{15}}}}
\fontsize{10}{0}
\selectfont\put(420,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{20}}}}
\fontsize{10}{0}
\selectfont\put(506.8,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{25}}}}
\fontsize{10}{0}
\selectfont\put(67.8,38.2){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0}}}}
\fontsize{10}{0}
\selectfont\put(67.8,95.25){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.005}}}}
\fontsize{10}{0}
\selectfont\put(72.8,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{0}}}}
\fontsize{10}{0}
\selectfont\put(159.6,33.1956){\makebox(0,0)[t]{\textcolor[rgb]{0,0,0}{{5}}}}
\fontsize{10}{0}
\selectfont\put(67.8,152.3){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.01}}}}
\fontsize{10}{0}
\selectfont\put(67.8,209.35){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.015}}}}
\fontsize{10}{0}
\selectfont\put(67.8,266.4){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.02}}}}
\fontsize{10}{0}
\selectfont\put(67.8,323.45){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.025}}}}
\fontsize{10}{0}
\selectfont\put(67.8,380.5){\makebox(0,0)[r]{\textcolor[rgb]{0,0,0}{{0.03}}}}
\end{picture}

错误信息如下

line 0    File `' not found.

当我双击该消息时,它会带我到生成的文件的第 8 行。

这些文件为什么 LaTeX 不喜欢?我认为它们应该可以正常工作,因为它们是由 Octave 生成​​的。我是否需要以某种特定方式设置我的文档才能使用这些文件?

编辑1(已解决):这是 tex 图形的一个最小(非)工作示例:

\documentclass[]{report}
\begin{document}

\input{comparison.tex}

\end{document}

comparison.tex上面包含的两个生成的 tex 文件中的后者在哪里。这给了我编译错误

line 11   Undefined control sequence ...box(0,0)[t]{\textcolor[rgb]{0,0,0}{{10}}}}
line 13   Undefined control sequence ...box(0,0)[t]{\textcolor[rgb]{0,0,0}{{15}}}}

等等,对于comparison.tex中的第11、13、15、...35行。它突出显示了代码中的\put和宏。\makebox

编辑2:下面是 TikZ 图形的一个最小(非)工作示例:

\documentclass[]{report}
\usepackage{tikz,graphicx,color}
\begin{document}

\input{comparison_tikz.tex}

\end{document}

comparison_tikz.tex上面包含的两个生成的 tex 文件中前者在哪里。这给了我编译错误

line 17   Use of \tikz@parse@cs@xy polar doesn't match its definition ...gb]{0,0,0}{{25}}}{}{\pgfusepath{discard}}}
line 17   Extra }, or forgotten \endgroup ...gb]{0,0,0}{{25}}}{}{\pgfusepath{discard}}}
line 0    Missing control sequence inserted
line 0    \begin{pgfpicture} on input line 5 ended by \end{document}.

答案1

graphicx您的 MWE 使用了和包中的命令color,但未加载它们,因此会产生有关未定义命令的错误。因此需要

\documentclass[]{report}
\usepackage{graphicx,color}
\begin{document}

\input{comparison.tex} % Uses commands from the graphicx and color packages

\end{document}

然后包含文件的第 7 行是

 \includegraphics{}

这是无稽之谈,包括一个没有指定文件名的图形,所以你会收到有关丢失文件的错误。

如果你将其更改为

%\includegraphics{}

它运行时没有错误。

答案2

我找到了 TikZ 问题的部分解决方案。Octave 文档说 FLTK 生成 PGF 代码。这意味着使用 FLTK 绘制图形时创建的所有图都将保存为 PGF 图片。另一方面gnuplot将创建 TikZ 图片。如果您执行以下操作,这些图片确实可以编译:

  1. 查找gnuplot-lua-tikz.sty。路径应该是这样的C:\octave\gnuplot\share\texmf\tex\latex
  2. 通过 MiKTeX 选项将所调用的目录添加texmf到已注册根目录列表中。
  3. 添加\usepackage{gnuplot-lua-tikz}到文档的序言中。
  4. 在 Octave 中,graphics_toolkit('gnuplot')在进行任何绘图之前执行。然后使用与之前相同的选项保存绘图-dtikz,并\input创建文件。

FLTK 生成的 PGF 代码仍然是一个未解决的问题。

答案3

我发现的解决方案是使用这个八度音程脚本它使用该包生成 TeX 代码pgfplots。它有限制,但可以进行基本的曲线绘制,但如果您希望它支持更高级的功能,则需要进行一些修改pgfplots

答案4

我遇到了完全相同的问题,解决方案比我最初想象的要简单得多。查看 Octave 的打印功能的帮助页面:

写入 LaTeX 文件的文本包含字符串确切地就像在图中指定的那样。如果使用了 TeX 模式解释器的任何特殊字符,则必须在 LaTeX 处理之前编辑该文件。 具体来说,特殊字符必须用美元符号 ('$...$') 括起来,并且 LaTeX 识别的其他字符可能也需要编辑(例如括号)。

确实,用美元将我的数学表达式包装在 Octave 图中立即解决了编译问题。

相关内容