You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加class.source="stan"后Xaringan无法正常渲染Stan代码块的解决方法

解决xaringan中cat引擎结合Stan语法高亮的渲染问题

问题原因

cat引擎的核心功能是将代码写入文件,其语法高亮的参数传递逻辑与普通代码块不同,直接添加class.source="stan"无法正确触发highlight.js的Stan语法高亮规则,导致渲染异常。

解决方案1:分离代码保存与展示逻辑

通过两个独立代码块实现:一个仅负责将代码写入文件(不显示),另一个用标准Stan代码块展示内容并实现语法高亮。

---
output: xaringan::moon_reader
---

---

# 隐藏的代码保存块(不显示在幻灯片中)
```{cat, engine.opts = list(file = 'code/stan/ex1.stan'), echo = FALSE}
data {
    int<lower=0> N; //number of data
    vector[N] x; //covariates
    vector[N] y; //variates
}

parameters {
  real alpha; //intercept
  real beta; //slope
  real<lower=0> sigma; //scatter
}

model {
  //priors
  alpha ~ normal(0, 10);
  beta ~ normal(0, 10);
  sigma ~ normal(0, 1);
  
  y ~normal(alpha + beta * x, sigma); //likelihood
}
带语法高亮的代码展示块
data {
    int<lower=0> N; //number of data
    vector[N] x; //covariates
    vector[N] y; //variates
}

parameters {
  real alpha; //intercept
  real beta; //slope
  real<lower=0> sigma; //scatter
}

model {
  //priors
  alpha ~ normal(0, 10);
  beta ~ normal(0, 10);
  sigma ~ normal(0, 1);
  
  y ~normal(alpha + beta * x, sigma); //likelihood
}
### 解决方案2:用knitr函数保存代码,动态展示
将代码存储为变量,通过`knitr::write_file`写入文件,再在Stan代码块中引用变量,避免重复编写代码。

```yaml
---
output: xaringan::moon_reader
---

---

```{r, echo = FALSE}
# 定义Stan代码内容
stan_code <- "data {
    int<lower=0> N; //number of data
    vector[N] x; //covariates
    vector[N] y; //variates
}

parameters {
  real alpha; //intercept
  real beta; //slope
  real<lower=0> sigma; //scatter
}

model {
  //priors
  alpha ~ normal(0, 10);
  beta ~ normal(0, 10);
  sigma ~ normal(0, 1);
  
  y ~normal(alpha + beta * x, sigma); //likelihood
}"

# 保存到指定文件
knitr::write_file(stan_code, "code/stan/ex1.stan")
动态展示带语法高亮的Stan代码
`r stan_code`
### 说明
两种方案都能同时实现代码保存到文件和Stan语法高亮的需求,方案2避免了代码重复,适合较长的Stan模型代码。

内容的提问来源于stack exchange,提问作者Sinval
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:02:51