解析Haskell图表生成器错误
我试图使用LaTeX图表生成器包来生成图表。继教程here,我有一个文件名为test.tex
具有以下内容:解析Haskell图表生成器错误
\documentclass[10pt]{article}
\usepackage[backend=ps, extension=eps, outputdir=diagrams]{diagrams-latex}
\usepackage{graphicx}
\begin{document}
\begin{diagram}[width=300,height=200]
{-# LANGUAGE FlexibleContexts #-}
dia = circle 1
\end{diagram}
\end{document}
我创建了一个空目录叫做diagrams
并试图编译,只被告知,有什么看起来是一个语法错误由diagrams-builder-ps
自动生成的文件。
$ pdflatex --enable-write18 --shell-escape test.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) (preloaded format=pdflatex)
\write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2016/03/31>
Babel <3.9r> and hyphenation patterns for 83 language(s) loaded.
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/size10.clo))
(/Users/nhalford/Library/texmf/tex/diagrams-latex.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/moreverb/moreverb.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/tools/verbatim.sty))
(/usr/local/texlive/2016/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/local/texlive/2016/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/local/texlive/2016/texmf-dist/tex/generic/xkeyval/xkvutils.tex
(/usr/local/texlive/2016/texmf-dist/tex/generic/xkeyval/keyval.tex))))
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/ifthen.sty))
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
(/usr/local/texlive/2016/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))))
No file test.aux.
(/usr/local/texlive/2016/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ifluatex.sty)
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ifpdf.sty))
(/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/grfext.sty
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty))
(/usr/local/texlive/2016/texmf-dist/tex/latex/oberdiek/kvoptions.sty
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/etexcmds.sty)))
(/usr/local/texlive/2016/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
Opening diagrams-latex stream diagrams/test-diagrams-latex-fig1.hs Error while compiling diagrams/test-diagrams-latex-fig1.hs
/var/folders/2g/_6mplpfn4fl338wr3cj949440000gn/T/Diagram58258-0.hs:3:20: error:
parse error on input ‘-’
Package diagrams-latex Warning: Conversion of diagrams/test-diagrams-latex-fig1
.hs failed.
Package diagrams-latex Warning: Please convert diagrams/test-diagrams-latex-fig
1.hs manually.
(./test.aux))
No pages of output.
Transcript written on test.log.
尝试在.hs
文件直接运行diagrams-builder-ps
或diagrams-builder-cairo
时,我也得到这个错误:
$ cd diagrams
$ ls
test-diagrams-latex-fig1.hs
$ diagrams-builder-ps -w 300 -h 200 test-diagrams-latex-fig1.hs
Error while compiling test-diagrams-latex-fig1.hs
/var/folders/2g/_6mplpfn4fl338wr3cj949440000gn/T/Diagram58289-0.hs:3:20: error:
parse error on input ‘-’
$ diagrams-builder-cairo -w 300 -h 200 test-diagrams-latex-fig1.hs
Error while compiling test-diagrams-latex-fig1.hs
/var/folders/2g/_6mplpfn4fl338wr3cj949440000gn/T/Diagram58294-0.hs:3:20: error:
parse error on input ‘-’
$ cat test-diagrams-latex-fig1.hs
{-# LANGUAGE FlexibleContexts #-}
dia = circle 1
$
不幸的是,系统删除临时文件.hs
立即用解析错误,所以我无法检查该文件,看看究竟是什么导致了这个问题。
感谢您的帮助!
哦,我想我只是想出了什么是错的,尽管我不确定解决问题的最佳方法。关键是这一行:
/var/folders/2g/_6mplpfn4fl338wr3cj949440000gn/T/Diagram58289-0.hs:3:20: error:
注意,临时文件的名称是Diagram58289-0.hs
。 diagrams-builder
调用openTempFile
(see here),然后使用生成文件的基本名称作为模块的名称。所以Diagram58289-0.hs
内容必须是这个样子:
{-# LANGUAGE FlexibleContexts #-}
module Diagram58289-0 where
dia = circle 1
的问题是,一个连字符是不是在一个模块名称有效,因此解析错误(果然,它是在第20栏第3行)。
尽管documentation for openTempFile
表示创建的文件将具有名称形式为“fooXXX.ext
其中XXX是一些随机数”,显然这不是在这里发生的事情。实际上,它看起来像behavior of openTempFile
changed recently;现在它将始终包含连字符。我猜这个行为在base-4.10
中改变了,所以它会显示给任何使用GHC 8.2的人。我有created an issue on the diagrams-builder
issue tracker跟踪这个问题。目前,一种解决方案是降级到GHC 8.0,但这可能不是一个非常有吸引力的选择。
感谢您的帮助!事实上,降级到GHC 8.0已经解决了这个问题,尽管这当然不是一个理想的解决方案。 –
当然!如果我们找到一个让GHC 8.2重新开始工作的好方法,我会在这里添加一条评论。 –
这现在已在图表生成器HEAD中修复:https://github.com/diagrams/diagrams-builder/commit/b44c754c15ab71d3350a6212ff73b3721b3b0e80。我会尽快推出一个新版本的bug fix。 –
您可以尝试使用Ctrl + Z来暂停进程。这可以帮助您查看临时文件。 – arrowd
我试过你的'test.tex',但不能重现错误。你能粘贴'test-diagrams-latex-fig1.hs'的内容吗? –
顺便提一下,你可能不想在'ps'或'cairo'后端使用'input'标志(这会导致'.eps'文件的内容直接包含在LaTeX源文件中合理)。它旨在用于'pgf'后端。但在任何情况下,这不是导致你的问题。 –