概括

概括

问题

Tikz 似乎有问题\usepackage[czech]{babel}

我有一个.Rnw用捷克语编写的中等大小的文档,其中包含一些通过knitr分块绘制的图表。当我设置时,dev = 'tikz'TeXmaker 向我发送了一个错误:

错误

Preview: PDFoutput 1 ! Package tikz Error: + or - expected. See tikz package documentation for explanation.

我没有时间修复它,所以我使用了dev='pdf'没有很好的 LaTeX 轴标签后处理(这对于必须使用大量希腊字母、下标等的人来说很糟糕)。

从那时起我做了一些研究,并没有在tikz文档中找到它,但发现有几个人解决了同样的问题tikz + LaTeX,他们说这是由于捷克 babel LaTeX 包造成的。

所以我尝试了一个最小示例,它在没有它的情况下可以编译,\usepackage[czech]{babel}但使用它时会出现相同的错误。删除它也允许大文档编译,但这不是一个解决方案,因为它是用捷克语编写的,所以我需要 babel。

代码

编辑:在绘图标签中添加了一些希腊字母,因为这就是我需要的原因tikz,还有一个带有捷克语特定字母的捷克语测试句子,以及另一个带有捷克语特定引号的句子,由捷克语 babel 包处理。

如果取消注释第二句,即使注释了也无法编译,\usepackage[czech]{babel}因为 babel 会处理这些„“字符。我可以用一些转义序列替换引号字符,但在我看来这不是一个好的选择。

\documentclass[12pt]{article}
\usepackage[czech]{babel}
\usepackage{tikz}
\begin{document}

Příliš žluťoučký kůň úpěl ďábelské ódy.
%„Příliš žluťoučký kůň úpěl ďábelské ódy.“

<<dev="tikz">>=
library(tikzDevice)
plot(1:10 , xlab = "$\\alpha_{\\beta^\\gamma}$")
@

\end{document}

环境

  • 操作系统:Windows 7
  • 编译于:TeXmaker 4.1.1
  • knitr 调用如下:R x64 v 3.0.3
  • R 包:tikzDevice v 0.7.0
  • TeX 包:pgf v 3.0.0

问题

有什么办法可以修复这个错误吗?

答案1

晚上好,这对我有用(假设我们使用er0.Rnw):

    \usepackage[czech]{babel}
    \catcode`"=13
    \catcode`-=13

添加这两行之后,我们在 R 中调用这三行(例如,我们可以pdflatex er0.tex稍后使用,或者,让我们用...knit2pdf代替knit):

    require(knitr)
    require(tikzDevice)
    knit("er0.Rnw")

我们在使用 babel 中的选项时会遇到同样的问题slovak。捷克语+斯洛伐克语引号样式„“可以正常工作。


Knitr 包使用 tikzDevice 包,该包需要 TeX 尺寸进行转换(它使用一个额外的 TeX 文件进行此过程),因此我们可以使用 R 中的另一种方法,而无需触及原始文件中的 TeX 代码er0.Rnw

    require(knitr)
    require(tikzDevice)
    tikzOld=options("tikzMetricPackages")  # Let's store the old values...
    tikzOld                                # Show us the old values...
    tikzNew=c("\\catcode`\"=13","\\catcode`-=13","\\usepackage[T1]{fontenc}","\\usetikzlibrary{calc}")
    tikzNew                                # List us the new values...
    options(tikzMetricPackages=tikzNew)    # Change me, please...
    knit("er0.Rnw")                        # Use the new values...
    options(tikzMetricPackages=tikzOld)    # Return me to the original setting...

如果我们希望使用 IL2 字体编码来排版和测量字符等,它也会很有用。

最后一步是{pdf|lua|xe}latex运行er0.tex。希望这能有所帮助,这是我在 TeX.SE 上的第一篇文章。Knitr+tikzDevice 规则!:-)

我们努力的结果

已添加\pagestyle{empty}\usepackage[utf8]{inputenc}在序言中(用于稍后的 pdflatexing),取消注释正文中的第二句并添加到文件fig.width=4, fig.height=4中的块中er0.Rnw\vspace*{-15mm}在文件中包含图形之前手动添加er0.tex以节省一些空间。

答案2

我想到了一个窍门:

  1. 注释掉 babel 包:%\usepackage[czech]{babel}
  2. 在文件knitr上运行.Rnw
  3. 打开运行.tex后生成的文档knitr,找到%\usepackage[czech]{babel}并取消注释。
  4. 编译.tex

然而,如果有人能找到更好的办法我将非常感激。

编辑

„“如果文件中有捷克引号,则它不起作用.Rnw

答案3

概括

为了子孙后代

在 TeXstudio 2.7.0 和其余版本上进行了测试环境问题部分(不是 TeXmaker,因为它应该没有太大区别)

当它出现时

如果你想在 knitr 块中.Rnw使用选项生成一些图形时编译文件dev='tikz'

并且您使用\usepackage[czech]{babel}\usepackage[slovak]{babel}

如果你在文档中使用„“引号,那么.Rnw你可能会在尝试使用如下命令编译它时遇到麻烦

"C:/Program Files/R/R-3.0.3/bin/x64/Rscript.exe" -e "library(knitr);knit2pdf('%.Rnw')" | txs:///view-pdf

错误

在 TeXstudio 中,它以很长的红色文本形式显示在消息部分,末尾某处的内容如下

Preview: Fontsize 12pt Preview: PDFoutput 1 ! Package tikz Error: + or - expected.

(我不知道该如何更好地描述它)

解决方案

您可以使用用户定义的命令(在 TeXstudio 中:选项 -> 配置 TeXstudio -> 构建 -> 用户命令 -> 添加):

"C:/Program Files/R/R-3.0.3/bin/x64/Rscript.exe" -e "library(knitr);library(tikzDevice);tikzOld=options('tikzMetricPackages');tikzNew=c('\\catcode`\'=13','\\catcode`-=13','\\usepackage[T1]{fontenc}','\\usetikzlibrary{calc}');options(tikzMetricPackages=tikzNew);knit2pdf('%.Rnw');options(tikzMetricPackages=tikzOld)" | txs:///view-pdf

此命令正确编译文件并使用 TeXstudio 的内部 PDF 查看器显示它([ALT] + [SHIFT] + [F1]如果它是您的第一个用户定义命令,则可以使用快捷方式运行它)。

如果不同时使用上述所有方法,您可能就不会遇到这个问题。

例如,如果你不需要tikz设备使用时捷克或者斯洛伐克巴别塔在您的文档中使用时„“您可能会使用dev='pdf'等等。

答案4

关于第二种选择。需要修复从"到 的括号内的\"内容。请尝试:

"C:/Program Files/R/R-3.0.3/bin/x64/Rscript.exe" -e "library(knitr);library(tikzDevice);tikzOld=options(\"tikzMetricPackages\");tikzNew=c(\"\\catcode`\\\"=13\",\"\\catcode`-=13\",\"\\usepackage[T1]{fontenc}\",\"\\usetikzlibrary{calc}\");options(tikzMetricPackages=tikzNew);knit(\"er0.Rnw\");options(tikzMetricPackages=tikzOld)"

我现在不确定它是否相关,但我在 Windows XP 上设置路径时遇到了问题,因为目录名中有波浪号(在 Linux 上运行良好)。因此,我external=FALSE在块中使用,并.Renviron在工作目录中用一行创建了文件:TMP='C:\striz\...\my-working-directory\figure'。之后,Knitr+tikzDevice 能够在子目录中找到生成的文件。

相关内容