[tex]图片文件名带点时的报错

  1. ‹ 更旧的帖子
  2. 去年
    去年Andy_Henry 重新编辑

    源文件:

    \documentclass{ctexbook} %xetex
    \usepackage{graphicx}
    \begin{document}
    南大巨神
    \begin{figure}
      \includegraphics{do.t.png}
    \end{figure}
    \end{document}

    ============================

    \documentclass{book} %pdftex
    nju study god
    \usepackage{graphicx}
    \begin{document}
    \begin{figure}
      \includegraphics{do.t.png}
    \end{figure}
    \end{document}
  3. 去年Andy_Henry 重新编辑

    xetex编译结果:带有错位图片

    ./dot_xetex.tex:6: LaTeX Error: Cannot determine size of graphic in do.t.png (n
    o BoundingBox).
    
    See the LaTeX manual or LaTeX Companion for explanation.
    Type  H <return>  for immediate help.
     ...                                              
                                                      
    l.6   \includegraphics{do.t.png}
                                    
    Try typing  <return>  to proceed.
    If that doesn't work, type  X <return>  to quit.
    
    File: do.t.png Graphic file (type eps)
    <do.t.png>
    [1
    
    ] (./dot_xetex.aux) ) 
    Here is how much of TeX's memory you used:
     20130 strings out of 492998
     424590 string characters out of 6139962
     468908 words of memory out of 5000000
     24012 multiletter control sequences out of 15000+600000
     530466 words of font info for 34 fonts, out of 8000000 for 9000
     1348 hyphenation exceptions out of 8191
     57i,4n,69p,10443b,290s stack positions out of 5000i,500n,10000p,200000b,80000s
    
    Output written on dot_xetex.pdf (1 page).
  4. 去年Andy_Henry 重新编辑

    pdftex编译结果:不产生图片

    ./dot_pdftex.tex:5: LaTeX Error: Unknown graphics extension: .t.png.
    
    See the LaTeX manual or LaTeX Companion for explanation.
    Type  H <return>  for immediate help.
     ...                                              
                                                      
    l.5   \includegraphics{do.t.png}
                                    
    Try typing  <return>  to proceed.
    If that doesn't work, type  X <return>  to quit.
    
    [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./dot_pdftex.aux) ) 
    Here is how much of TeX's memory you used:
     1430 strings out of 492990
     20086 string characters out of 6138689
     74321 words of memory out of 5000000
     5008 multiletter control sequences out of 15000+600000
     3993 words of font info for 15 fonts, out of 8000000 for 9000
     1141 hyphenation exceptions out of 8191
     41i,4n,25p,284b,146s stack positions out of 5000i,500n,10000p,200000b,80000s
    </us
    r/share/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
    Output written on dot_pdftex.pdf (1 page, 8181 bytes).
    PDF statistics:
     12 PDF objects out of 1000 (max. 8388607)
     7 compressed objects within 1 object stream
     0 named destinations out of 1000 (max. 500000)
     1 words of extra memory for PDF output out of 10000 (max. 10000000)
  5. 去年unsinn 重新编辑

    带点我还以为是像素图和矢量图的区别。。。。感觉突然变成了文件命名规范的事情。

    不过这确实挺有意思的,别说do.t.png了,do.t.pdf都是不行的。问题其实不是处在插图这里,而是在读取BoundingBox这里。我们可以通过如下代码(ghostscript)来读取BoundingBox.

    gs -sDEVICE=bbox -dNOPAUSE -dBATCH *.pdf

    也是基于上面的原因,如果手动写出BoundingBox(这幅图是0 0 200 210),代码为

    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    Hello World!
    
    \includegraphics[bb=0 0 200 210]{do.t.png}
    \end{document}

    编译是可以正常通过的。

    如果对TeX的插图有所了解,可以有如下论断:

    1. 在没有png, jpg格式的年代,主要是ps和eps文件,那时候,BoundingBox是直接写在文件中的(可以使用任意编辑器打开eps文件,前几行就写着BoundingBox),所以TeX是可以直接读的。这也是为什么do.t.png或者do.t.pdf不行,而do.t.eps可以的原因。
    2. 到了pdfTeX年代,png, jpg格式出现了,所以pdfTeX选择了原生支持(包括后面的诸多引擎,除了奇葩的日系引擎). 它支持的是jpg, png, pdf, MetaPost. 这可以读pdftex.def这个文件看出来(其他的引擎实现方式稍有不同,比如XeTeX的实现)。
    3. 由于pdfTeX最后会生成pdf,所以在生成pdf的过程中还要把图片转成pdf,这就是我说pdf赛高的原因,至少编译会快些。
    4. 但是插图和排版还是有差异的,排版算法只需要知道图多大就行,不需要图插进去,所以实际上首先会读取BoundingBox,然后交给排版算法,排完版后再插。pdfTeX当然原生支持读jpg, png, pdf, MetaPost的BoundingBox.
    5. 现在的问题是,pdfTeX觉得这是一个未知类型(t.png)的文件,就不知道这是什么图片类型格式了(这点我不能确认),然后并不能读出BoundingBox.(给人觉得它还是试着以eps的方式读过文件前几行的) 所以出现报错。而插图却是没问题的。
    6. 解决方案很多,一是命名规范的问题,不是类型少加点,二是告诉pdfTeX我们这个未知类型是什么。比如在导言区添加\DeclareGraphicsRule{.t.png}{png}{.t.png}{}或者\DeclareGraphicsRule{.t.png}{bmp}{.xbb}{},前者适用于pdfTeX,后者适用于XeTeX. 这个要看具体引擎的实现。
    7. 但这并不方便,所以还是统一命名规范好些。读取文件名这点,它们实现的是到第一个dot,后面的都算拓展名。大概算不上什么bug,毕竟还要处理eps.gz这种拓展名。
    8. 你是南大的吗?为什么会有南大巨神这种东西,我不是。
  6. 去年Andy_Henry 重新编辑

    @unsinn 带点我还以为是像素图和矢量图的区别。。。。感觉突然变成了文件命名规范的事情。

    不过这确实挺有意思的,别说do.t.png了,do.t.pdf都是不行的。问题其实不是处在插图这里,而是在读取BoundingBox这里。我们可以通过如下代码(ghostscript)来读取BoundingBox.

    gs -sDEVICE=bbox -dNOPAUSE -dBATCH *.pdf

    也是基于上面的原因,如果手动写出BoundingBox(这幅图是0 0 200 210),代码为

    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    Hello World!
    
    \includegraphics[bb=0 0 200 210]{do.t.png}
    \end{document}

    编译是可以正常通过的。

    如果对TeX的插图有所了解,可以有如下论断:

    1. 在没有png, jpg格式的年代,主要是ps和eps文件,那时候,BoundingBox是直接写在文件中的(可以使用任意编辑器打开eps文件,前几行就写着BoundingBox),所以TeX是可以直接读的。这也是为什么do.t.png或者do.t.pdf不行,而do.t.eps可以的原因。
    2. 到了pdfTeX年代,png, jpg格式出现了,所以pdfTeX选择了原生支持(包括后面的诸多引擎,除了奇葩的日系引擎). 它支持的是jpg, png, pdf, MetaPost. 这可以读pdftex.def这个文件看出来(其他的引擎实现方式稍有不同,比如XeTeX的实现)。
    3. 由于pdfTeX最后会生成pdf,所以在生成pdf的过程中还要把图片转成pdf,这就是我说pdf赛高的原因,至少编译会快些。
    4. 但是插图和排版还是有差异的,排版算法只需要知道图多大就行,不需要图插进去,所以实际上首先会读取BoundingBox,然后交给排版算法,排完版后再插。pdfTeX当然原生支持读jpg, png, pdf, MetaPost的BoundingBox.
    5. 现在的问题是,pdfTeX觉得这是一个未知类型(t.png)的文件,就不知道这是什么图片类型格式了(这点我不能确认),然后并不能读出BoundingBox.(给人觉得它还是试着以eps的方式读过文件前几行的) 所以出现报错。而插图却是没问题的。
    6. 解决方案很多,一是命名规范的问题,不是类型少加点,二是告诉pdfTeX我们这个未知类型是什么。比如在导言区添加\DeclareGraphicsRule{.t.png}{png}{.t.png}{}或者\DeclareGraphicsRule{.t.png}{bmp}{.xbb}{},前者适用于pdfTeX,后者适用于XeTeX. 这个要看具体引擎的实现。
    7. 但这并不方便,所以还是统一命名规范好些。读取文件名这点,它们实现的是到第一个dot,后面的都算拓展名。大概算不上什么bug,毕竟还要处理eps.gz这种拓展名。
    8. 你是南大的吗?为什么会有南大巨神这种东西,我不是。

    你不是南大的吗?难道我又记错人了?

    你对tex真是够了解的,难道是ctex的开发者?

    pdftex现在确实是没啥必要用了,但有些pdf特性的东西(越来越多支持xetex了),以及历史的问题,还是保留了。现在写新东西没必要用了。

    命名规范这个,当然最好是不加点。不知道他们当初是怎么编译通过的,不过我这里重新编译,最方便的就是直接改成eps,所以就这么做了。

  7. @unsinn 带点我还以为是像素图和矢量图的区别。。。。感觉突然变成了文件命名规范的事情。

    不过这确实挺有意思的,别说do.t.png了,do.t.pdf都是不行的。问题其实不是处在插图这里,而是在读取BoundingBox这里。我们可以通过如下代码(ghostscript)来读取BoundingBox.

    gs -sDEVICE=bbox -dNOPAUSE -dBATCH *.pdf

    也是基于上面的原因,如果手动写出BoundingBox(这幅图是0 0 200 210),代码为

    \documentclass{article}
    \usepackage{graphicx}
    \begin{document}
    Hello World!
    
    \includegraphics[bb=0 0 200 210]{do.t.png}
    \end{document}

    编译是可以正常通过的。

    如果对TeX的插图有所了解,可以有如下论断:

    1. 在没有png, jpg格式的年代,主要是ps和eps文件,那时候,BoundingBox是直接写在文件中的(可以使用任意编辑器打开eps文件,前几行就写着BoundingBox),所以TeX是可以直接读的。这也是为什么do.t.png或者do.t.pdf不行,而do.t.eps可以的原因。
    2. 到了pdfTeX年代,png, jpg格式出现了,所以pdfTeX选择了原生支持(包括后面的诸多引擎,除了奇葩的日系引擎). 它支持的是jpg, png, pdf, MetaPost. 这可以读pdftex.def这个文件看出来(其他的引擎实现方式稍有不同,比如XeTeX的实现)。
    3. 由于pdfTeX最后会生成pdf,所以在生成pdf的过程中还要把图片转成pdf,这就是我说pdf赛高的原因,至少编译会快些。
    4. 但是插图和排版还是有差异的,排版算法只需要知道图多大就行,不需要图插进去,所以实际上首先会读取BoundingBox,然后交给排版算法,排完版后再插。pdfTeX当然原生支持读jpg, png, pdf, MetaPost的BoundingBox.
    5. 现在的问题是,pdfTeX觉得这是一个未知类型(t.png)的文件,就不知道这是什么图片类型格式了(这点我不能确认),然后并不能读出BoundingBox.(给人觉得它还是试着以eps的方式读过文件前几行的) 所以出现报错。而插图却是没问题的。
    6. 解决方案很多,一是命名规范的问题,不是类型少加点,二是告诉pdfTeX我们这个未知类型是什么。比如在导言区添加\DeclareGraphicsRule{.t.png}{png}{.t.png}{}或者\DeclareGraphicsRule{.t.png}{bmp}{.xbb}{},前者适用于pdfTeX,后者适用于XeTeX. 这个要看具体引擎的实现。
    7. 但这并不方便,所以还是统一命名规范好些。读取文件名这点,它们实现的是到第一个dot,后面的都算拓展名。大概算不上什么bug,毕竟还要处理eps.gz这种拓展名。
    8. 你是南大的吗?为什么会有南大巨神这种东西,我不是。

    按照正常的想法,解析一个文件的扩展名的方法应该是从后往前进行读,读到第一个点就停止了
    也就是说如果是.esp.gz这个文件,那么它应该先被识别为被压缩的文件,那么这时候应该调用gzip对其解压缩,解压缩后的文件则是从第一个点开始往前,继续读到第二个点,如果没有第二个点则当无扩展名处理,这段的内容才应该是解压后文件的扩展名,这样的话其实是不太需要把esp.gz这种扩展名特殊处理的,即使是xxx.do.esp.gz.bz2.xz这样的文件名,用这个方法也可以很方便的分辨出来真正文件的扩展名是esp
    所以应该算是一个bug,不过是由于算法设计上的问题

  8. @Andy_Henry 你不是南大的吗?难道我又记错人了?

    你对tex真是够了解的,难道是ctex的开发者?

    pdftex现在确实是没啥必要用了,但有些pdf特性的东西(越来越多支持xetex了),以及历史的问题,还是保留了。现在写新东西没必要用了。

    命名规范这个,当然最好是不加点。不知道他们当初是怎么编译通过的,不过我这里重新编译,最方便的就是直接改成eps,所以就这么做了。

    我不是南大的。tex可以说是我吃饭的工具之一吧,但不是ctex的开发者。改成eps可行的原因我刚刚已经确认了,xetex.def里面规定,如果读不懂后缀,统统当eps来看。可能是历史原因。

  9. @unsinn 我不是南大的。tex可以说是我吃饭的工具之一吧,但不是ctex的开发者。改成eps可行的原因我刚刚已经确认了,xetex.def里面规定,如果读不懂后缀,统统当eps来看。可能是历史原因。

    可以向xetex那里提交一个pr,把扩展名的解析方式改一下比较好

  10. @Sakura 可以向xetex那里提交一个pr,把扩展名的解析方式改一下比较好

    不是XeTeX的问题,引擎倒也不背锅。这其实这和TeX的词法分析有关,后来意识到写成类似于\includegraphics{{do.t}.png}就行了。

    有了这个原理,问题不难解决,毕竟TeX有macro。实际上,已经有包griffle解决这个问题了,还解决了诸如文件名有空格之类的问题。

  11. @unsinn 我不是南大的。tex可以说是我吃饭的工具之一吧,但不是ctex的开发者。改成eps可行的原因我刚刚已经确认了,xetex.def里面规定,如果读不懂后缀,统统当eps来看。可能是历史原因。

    吃饭的工具。。太厉害了,以后有tex的问题就全找你了。先问一个吧,linux下哪个pdf阅读器可以支持反向查询?

  12. @Andy_Henry 吃饭的工具。。太厉害了,以后有tex的问题就全找你了。先问一个吧,linux下哪个pdf阅读器可以支持反向查询?

    zathura或者非常常见的evince,基本上支持synctex的都行吧。ide比如texstudio的话甚至可以具体到字而不是行,用的不多不清楚。

  13. 去年Andy_Henry 重新编辑

    @unsinn zathura或者非常常见的evince,基本上支持synctex的都行吧。ide比如texstudio的话甚至可以具体到字而不是行,用的不多不清楚。

    这句话貌似是针对windows说的?(ide内置不论)

    事实上,auctex下只需要设置 (setq TeX-source-correlate-mode t) 即可自动生成synctex文件并且默认的envice就可以直接支持,并不需要额外设置。

    zathura有个问题是,他的分辨率特别低,我至今不知道是咋回事,也没有去查原因和解决方案。毕竟现在用着还可以,就没继续深入研究。但如果zathura可用,我倒是想换成它的。

    -image-

  14. @Andy_Henry 这句话貌似是针对windows说的?(ide内置不论)

    zathura在windows是基本群为非交换群的拓扑群,不存在的。evince刚刚查了一下竟然有windows版。

    zathura有个问题是,他的分辨率特别低,我至今不知道是咋回事,也没有去查原因和解决方案。毕竟现在用着还可以,就没继续深入研究。但如果zathura可用,我倒是想换成它的。

    我以前用的时候没什么问题,现在不用linux桌面了,不太清楚。

  15. @unsinn 不是XeTeX的问题,引擎倒也不背锅。这其实这和TeX的词法分析有关,后来意识到写成类似于\includegraphics{{do.t}.png}就行了。

    有了这个原理,问题不难解决,毕竟TeX有macro。实际上,已经有包griffle解决这个问题了,还解决了诸如文件名有空格之类的问题。

    不错,已Mark

  16. @Andy_Henry
    这句话貌似是针对windows说的?(ide内置不论)

    事实上,auctex下只需要设置 (setq TeX-source-correlate-mode t) 即可自动生成synctex文件并且默认的envice就可以直接支持,并不需要额外设置。

    zathura有个问题是,他的分辨率特别低,我至今不知道是咋回事,也没有去查原因和解决方案。毕竟现在用着还可以,就没继续深入研究。但如果zathura可用,我倒是想换成它的。

    [please see images in original post]

    zathura分辨率没问题啊?

  17. 去年Andy_Henry 重新编辑

    @Turgon zathura分辨率没问题啊?

    -image-

  18. @Andy_Henry
    [please see images in original post]

    额。。。我是没问题。。。我tex默认就是调zathura显示的,很小的字母都看的清

  19. 去年unsinn 重新编辑

    @Andy_Henry [please see images in original post]

    我装了一个桌面试了试没问题,不知道你是为什么。

    • Screenshot_2017-10-21_10-42-25.png
  20. @unsinn 我装了一个桌面试了试没问题,不知道你是为什么。

    可能是高分屏的原因。

  21. 去年unsinn 重新编辑

    @Andy_Henry 可能是高分屏的原因。

    我也是高分屏(xfce4的dpi缩放简直太鬼畜了。。。),原则上pdf浏览和分辨率应该没什么关系。

 

后才能发言