Beamer幻灯片中listings包的中文注释乱码解决方案
Beamer幻灯片中listings包的中文注释乱码解决方案
Beamer目前似乎已经是LaTeX下演示文稿(PPT、幻灯片)的标准,Beamer做演示文稿象写程序代码。于是,如果文稿内容本来就含有程序代码,特别是包含有下划线、@等特殊符号,一个个去处理显然是不切实际的,幸好有listings宏包,但是,如果代码里面有中文,或者注释里面有中文,要么编译不过,要么一堆乱码。
这个问题的解决,网上有不少方案,安全易用的方案是
改\begin{frame}为begin{frame}[fragile] \frametitle{ } 使用“逃逸”字,在lstset集合里设置escapeinside=``,选项 若需要设置代码字体,则使用\fontspec宏包,同时在lstset集合里加入basicstyle=\fontspec{字体},选项
经过这样设置之后,不能再用pdfLaTeX编译了,只能用XeLaTeX编译,而且,文件名也不再支持中文了,只能用demo.tex等名字来保存文件。
以上在Win10 & TeXlive2019 & TexWorks中测试。
导言区的设置,写Arduino代码:
\lstset{
language=C++, %代码语言C++
basicstyle=\fontspec{Times New Roman},
breaklines=true, %过长的代码自动换行
extendedchars=false, %代码跨页显示章节标题、页眉
escapeinside=``,
texcl=true,
}
正文开始frame时,加入fragile参数:
\begin{frame}[fragile]
\frametitle{用Blink测试ESP32烧录(一)}
int LED\_PIN=2指定ESP32板上的引脚2上的LED为输出。
但需注意,有些ESP32板上除了电源指示的LED,再没有其他LED。
\begin{lstlisting}
int LED_PIN=2
void setup() {
pinMode(LED_PIN, OUTPUT);/*指定2号脚为输出脚*/
}
void loop() {/*循环运行,除非断电*/
digitalWrite(LED_PIN, HIGH);/*给高电平*/
delay(1000);/*暂停1秒*/
digitalWrite(LED_PIN, LOW);/*给低电平*/
delay(1000);/*暂停1秒*/
}
\end{lstlisting}
\end{frame}
lstistings宏包似乎不支持C语言//这样的行注释。效果: