分享

Beamer幻灯片中listings包的中文注释乱码解决方案

 新用户5228KeDY 2021-10-10

Beamer幻灯片中listings包的中文注释乱码解决方案

Beamer目前似乎已经是LaTeX下演示文稿(PPT、幻灯片)的标准,Beamer做演示文稿象写程序代码。于是,如果文稿内容本来就含有程序代码,特别是包含有下划线、@等特殊符号,一个个去处理显然是不切实际的,幸好有listings宏包,但是,如果代码里面有中文,或者注释里面有中文,要么编译不过,要么一堆乱码。

这个问题的解决,网上有不少方案,安全易用的方案是

  1. 改\begin{frame}为begin{frame}[fragile] \frametitle{ }
  2. 使用“逃逸”字,在lstset集合里设置escapeinside=``,选项
  3. 若需要设置代码字体,则使用\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语言//这样的行注释。效果:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多