Beamer文档frame环境使用minted插入代码触发FancyVerb报错
报错原因
beamer的frame环境默认会先把整帧内容读入宏参数做内部展开处理,而minted是基于fancyvrb实现的代码高亮环境,这类逐字抄录类环境要求LaTeX直接读取原始、未被提前展开的文本,不能嵌套在会提前吞入参数做展开的逻辑中。
默认模式下beamer的预读取操作会直接破坏代码原始格式:示例代码中Windows批处理变量%CD%里的%会被提前识别为LaTeX注释符,吞掉后续的路径内容,换行、反斜杠等特殊字符也会被错误解析,最终触发日志里的FancyVerb Error。
解决方法
给包含minted代码的帧添加fragile选项即可。该选项是beamer专门为包含逐字内容(代码块、verbatim环境等)的帧设计的,开启后beamer会放弃预读取整帧展开的逻辑,改为逐行正常解析内容,minted就能正常编译。
修改后的可用代码示例:
% 必须添加[fragile]参数 \begin{frame}[fragile] \frametitle{Docker启动Jupyter命令} \begin{minted}{bash} docker run --rm -p 8888:8888 \ -v %CD%/eleve:/home/jovyan/work \ -e JUPYTER_ENABLE_LAB=yes \ jupyter/scipy-notebook \end{minted} \end{frame}
使用注意点:
- 带
fragile选项的帧,不要在\begin{frame}[fragile]到\end{frame}之间随意放置LaTeX注释,避免触发解析异常 - 如果代码块较长,也可以把bash代码单独存为外部文件,用
\inputminted{bash}{代码文件路径}命令插入,该方式同样要求frame添加fragile选项。
内容的提问来源于stack exchange,提问作者Poor Standard
相关产品推荐
相关产品推荐

