为什么添加 \catcode`\:=11 \catcode`\@=11 会导致 tex4ht 无法编译 tikz 图片?

为什么添加 \catcode`\:=11 \catcode`\@=11 会导致 tex4ht 无法编译 tikz 图片?

我发现了有趣的问题。在我的 tex4ht 配置文件中,有这样一行

 \catcode`\:=11 \catcode`\@=11

它一直在那里。我认为这是为了解决由此产生的一个问题回答。或者我可能从其他地方感染了它。我现在不记得了。它从来没有造成过问题,除了现在。

但我刚刚发现 htlatex 在一张 tikz 图片上失败了。这是 MWE

\documentclass[12pt]{article}
\ifdefined\HCode
\def\pgfsysdriver{pgfsys-tex4ht.def}
\fi 
\usepackage{tikz}
\usetikzlibrary{arrows,calc,decorations.markings,math}
\begin{document}
\begin{tikzpicture}
\draw let \n1={2} in (0,0) -- (30:\n1);
\end{tikzpicture}
\end{document}

仅就上述例子而言,极坐标。如果我使用普通坐标,则不会出现错误:

\begin{tikzpicture}
\draw let \n1={2} in (0,0) -- (1,\n1);
\end{tikzpicture}

极坐标示例使用 pdflatex 编译良好。但使用 htlatex 时会出现此错误

 htlatex foo.tex "nma"

和错误

(/usr/local/texlive/2014/texmf-dist/tex/generic/tex4ht/html4.4ht)
(/usr/local/texlive/2014/texmf-dist/tex/generic/tex4ht/html4-math.4ht))
(./foo.aux))

! Package pgf Error: No shape named 30:2 is known.    
See the pgf package documentation for explanation.
Type  H <return>  for immediate help.

l.11 \draw let \n1={2} in (0,0) -- (30:\n1)
                                       ;
? x

上面使用的 nma.cfg 文件只有这个catcode命令:(我的 .cfg 文件大得多,但我将其缩小到这一行)这是用于重现错误的 nma.cfg 文件。

\Preamble{ext=htm,charset="utf-8",p-width,pic-align} 
\catcode`\:=11 \catcode`\@=11
\begin{document}
\EndPreamble

如果不使用.cfg文件,htlatex编译极坐标示例ok并生成图像

 htlatex foo.tex

我想我最终会catcode从我的 .cfg 文件中删除这一行,因为我现在不知道它为什么在那里,并且希望不会出现其他问题。

但我想知道是否有人知道为什么会发生这种情况。这可能表明其他地方存在更严重的问题,这就是我发布此帖子的原因。

我也刚刚更新到了最新的 TL 2014。以下是供参考的文件列表

*File List*
 article.cls    2014/09/29 v1.4h Standard LaTeX document class
  size12.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
  tex4ht.sty    
    tikz.sty    2013/12/13 v3.0.0 (rcs-revision 1.142)
     pgf.sty    2013/12/18 v3.0.0 (rcs-revision 1.14)
  pgfrcs.sty    2013/12/20 v3.0.0 (rcs-revision 1.28)
everyshi.sty    2001/05/15 v3.00 EveryShipout Package (MS)
  pgfrcs.code.tex
 pgfcore.sty    2010/04/11 v3.0.0 (rcs-revision 1.7)
graphicx.sty    2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
  keyval.sty    2014/10/28 v1.15 key=value parser (DPC)
graphics.sty    2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg    2010/04/23 v1.9 graphics configuration of TeX Live
graphics.cfg    2010/04/23 v1.9 graphics configuration of TeX Live
   dvips.def    2014/10/14 v3.0j Driver-dependent file (DPC,SPQR)
   dvips.def    2014/10/14 v3.0j Driver-dependent file (DPC,SPQR)
  pgfsys.sty    2013/11/30 v3.0.0 (rcs-revision 1.47)
  pgfsys.code.tex
     pgf.cfg    2008/05/14  (rcs-revision 1.7)
pgfsys-tex4ht.def    2013/08/06  (rcs-revision 1.25)
pgfsys-common-svg.def    2013/08/28  (rcs-revision 1.24)
  xcolor.sty    2007/01/21 v2.11 LaTeX color extensions (UK)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
pgfsyssoftpath.code.tex    2013/09/09  (rcs-revision 1.9)
pgfsyssoftpath.code.tex    2013/09/09  (rcs-revision 1.9)
pgfsysprotocol.code.tex    2006/10/16  (rcs-revision 1.4)
pgfsysprotocol.code.tex    2006/10/16  (rcs-revision 1.4)
 pgfcore.code.tex
pgfcorepoints.code.tex    2013/10/07  (rcs-revision 1.27)
pgfcorepathconstruct.code.tex    2013/10/07  (rcs-revision 1.29)
pgfcorepathusage.code.tex    2013/12/13  (rcs-revision 1.23)
pgfcorescopes.code.tex    2013/10/09  (rcs-revision 1.44)
pgfcoregraphicstate.code.tex    2013/09/19  (rcs-revision 1.11)
pgfcoretransformations.code.tex    2013/10/10  (rcs-revision 1.17)
pgfcorequick.code.tex    2008/10/09  (rcs-revision 1.3)
pgfcoreobjects.code.tex    2006/10/11  (rcs-revision 1.2)
pgfcorepathprocessing.code.tex    2013/09/09  (rcs-revision 1.9)
pgfcorearrows.code.tex    2013/11/07  (rcs-revision 1.40)
pgfcoreshade.code.tex    2013/07/15  (rcs-revision 1.15)
pgfcoreimage.code.tex    2013/07/15  (rcs-revision 1.18)
pgfcoreexternal.code.tex    2013/07/15  (rcs-revision 1.20)
pgfcorelayers.code.tex    2013/07/18  (rcs-revision 1.7)
pgfcoretransparency.code.tex    2013/09/30  (rcs-revision 1.5)
pgfcorepatterns.code.tex    2013/11/07  (rcs-revision 1.5)
pgfmoduleshapes.code.tex    2013/10/31  (rcs-revision 1.34)
pgfmoduleplot.code.tex    2013/07/31  (rcs-revision 1.12)
pgfcomp-version-0-65.sty    2007/07/03 v3.0.0 (rcs-revision 1.7)
pgfcomp-version-1-18.sty    2007/07/23 v3.0.0 (rcs-revision 1.1)
  pgffor.sty    2013/12/13 v3.0.0 (rcs-revision 1.25)
 pgfkeys.sty    
 pgfkeys.code.tex
 pgfmath.sty    
 pgfmath.code.tex
  pgffor.code.tex
    tikz.code.tex
pgflibraryplothandlers.code.tex    2013/08/31 v3.0.0 (rcs-revision 1.20)
pgfmodulematrix.code.tex    2013/09/17  (rcs-revision 1.8)
tikzlibrarytopaths.code.tex    2008/06/17 v3.0.0 (rcs-revision 1.2)
tikzlibraryarrows.code.tex    2008/01/09 v3.0.0 (rcs-revision 1.1)
pgflibraryarrows.code.tex    2013/09/23 v3.0.0 (rcs-revision 1.16)
tikzlibrarycalc.code.tex    2013/07/15 v3.0.0 (rcs-revision 1.9)
 ***********

答案1

冒号是 TikZ 中的语法字符,如果类别代码发生变化,则 TikZ 极坐标解析器将不再看到冒号。也许在极坐标语句之前tikzpicture通过, 恢复类别代码会有所帮助。\catcode`\:=12

例子:

\documentclass[12pt]{article}
\ifdefined\HCode
\def\pgfsysdriver{pgfsys-tex4ht.def}
\fi 
\usepackage{tikz}
\usetikzlibrary{arrows,calc,decorations.markings,math}
\begin{document}
\begin{tikzpicture}
  \catcode`\:=12
  \draw let \n1={2} in (0,0) -- (30:\n1);
\end{tikzpicture}
\end{document}

相关内容