问题
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
我想到了一个窍门:
- 注释掉 babel 包:
%\usepackage[czech]{babel}
- 在文件
knitr
上运行.Rnw
- 打开运行
.tex
后生成的文档knitr
,找到%\usepackage[czech]{babel}
并取消注释。 - 编译
.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 能够在子目录中找到生成的文件。