R代码块和LaTeX

时间:2015-07-10 16:08:11

标签: r latex global-variables knitr

我正在尝试创建一个数字变量(代码中称为nClusters),可以在R代码块和LaTeX中的knitr文档中使用。一个例子在下面的代码中。

在这里,我初始化并将数值变量nClusters分配给值7.稍后,在文档中,我在R代码块中调用它,这似乎工作正常。但是,然后我尝试在LaTeX部分(R代码块之外)调用它,这会导致问题:

\documentclass{article}
\usepackage{float, hyperref}
\usepackage[margin=1in]{geometry}
\usepackage{pgffor}

\begin{document}

<<options, echo=FALSE>>=
nClusters = 7 # I only want to define nClusters once
library(knitr)
opts_chunk$set(concordance=TRUE)
@

<<echo=FALSE,eval=TRUE,results='asis'>>=
# Here the call to nClusters works
for (i in 2:nClusters){
  print(paste("This is number",i))
}
@

% Here the call to nClusters does not work
\begin{center}
\foreach \i in {2,3,...,nClusters} {
  Hello \i\
}
\end{center}

\end{document}

当我编织这个时,我得到以下输出:

Current output

当输出应为:

Desired output

在对变量的LaTeX调用中发生了差异,因为如果我在7中硬编码,那么它就可以工作。因此,我的问题是:是否可以在knitr中创建一个可以在R代码块和LaTeX部件中调用的全局变量?

1 个答案:

答案 0 :(得分:0)

使用pgffor时,

echo 'test'; exit();

是以逗号分隔的值列表。任何东西都可以用作价值。如果您尝试使用以下代码,那么您的变量不会传递到脚本的LATEX部分:

    public function handle($request, Closure $next)
{
    if (!array_key_exists($request->segment(1), config('translatable.locales'))) {
        // Store segments in array
        $segments = $request->segments();
        // Set the default language code as the first segment
        $segments = array_prepend($segments, config('app.fallback_locale'));

        // Redirect to the correct url
        return redirect()->to(implode('/', $segments));
    }
    return $next($request);
}

你得到了

\foreach <variables> in {<list>} <commands>

这是一个以2,3开头并以C结尾的序列,我不知道在&#39; <&#39;

中打印出哪些字符?

你产生完全相同的结果。要评估R chunk外部的变量,您需要使用\begin{center} \foreach \i in {2,3,...,C} { Hello \i\ }

[1] ”This is number 2” [1] ”This is number 3” [1] ”This is number 4” [1] ”This is number 5” [1] ”This is
number 6” [1] ”This is number 7”
Hello 2 Hello 3 Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello Hello A Hello B Hello C

产生

right answer