XeLaTeX 中的 listings 包:lstlisting 中的每个选项卡都会编译为 pdf 中的“^^I”

XeLaTeX 中的 listings 包:lstlisting 中的每个选项卡都会编译为 pdf 中的“^^I”

在 beamer 类中,当我使用 LaTeX 进行编译时,输出的 pdf 结果与我预期的完全一致。但是当我将其更改为 XeLaTeX 时,在 lstlisting 环境中,代码中的每个选项卡都会产生一个“^^I”占位符(请参阅下面的 output-pdf)。我该如何解决这个问题?

 if( Bedingung ) {
 ^^I//Code, der nur ausgefuehrt wird, wenn die Bedingung wahr ist 
 }
 ^^I^^I

LaTeX 代码(精简到最小,以一帧为例):

\begin{document}
    \begin{frame}[fragile]{if-Statements}
        \begin{block}{Syntax}   
            \begin{lstlisting}
if( Bedingung ) {
    //Code, der nur ausgefuehrt wird, wenn die Bedingung wahr ist
}       
            \end{lstlisting}
        \end{block}
        \begin{block}{Logik}    
            \begin{itemize}
                 \item Alles innerhalb eines if-Blocks wird nur ausgeführt, wenn die Bedingung (in Klammern) wahr ist.
            \end{itemize}
        \end{block}
    \end{frame}
\end{document}

所述框架的屏幕截图

答案1

已经可以用逐字文本实现该效果的小测试文件:

\documentclass{beamer}
\begin{document}
\begin{frame}[fragile]
\verb|a b|
\end{frame}
\end{document}

西拉特克斯

如果fragile给出了选项,则将beamer框架写入辅助文件\jobname.vrb。XeTeX 的问题就发生在这一步,\jobname.vrb包含:

\verb|a^^Ib|

Classbeamer通过将许多字母的类别代码更改为 12(“其他”,如数字)以逐字方式读取框架。否则,使用通常的类别代码,制表符将被打印为空格字符。然后,当文件由 XeTeX 写入时,它会看到一个“不可打印”的 ASCII 字符(ASCII 代码小于空格字符的“控制”字符),并使用可打印 ASCII 字符的替代符号^^I。pdfTeX 的行为在这方面有所不同。

可以通过使用 XeTeX 的选项来解决此问题-8bit,在帮助屏幕上:

-8bit     make all characters printable, don't use ^^X sequences

相关内容