xelatex:Minted 代码块将制表符表示为 ^^I

xelatex:Minted 代码块将制表符表示为 ^^I

我正在使用 org 模式生成 LaTeX 输出。由于我的 c 模式设置,我的代码片段最终会使用制表符缩进。更改这些设置会很不方便。虽然我发布的代码片段可以用 latex 编译,但我需要能够编译 Unicode 文档,因此我使用 xelatex -shell-escape 来编译自动生成的 latex 源。

生成的源代码如下所示:

这将生成如下的 LaTeX(删除了一些不相关的内容,从而重现了问题):

 \documentclass[11pt]{article}
 \tolerance=1000
 \usepackage{fontspec}
 \usepackage{minted}
 \author{Glen Stark}
 \date{\today}
 \title{sample}
 \begin{document}

 \section{Foo}

 \begin{minted}[]{c++}
 void foo()
 {
     void bar = fb();
     std::cout << "fbar" << "\n"
 }
 \end{minted}
 \end{document}

编译该代码,xelatex -shell-escape输出结果如下:

无效 foo()

^^Ivoid bar = fb();

^^Istd::cout //等等。

铸造块中的空白是制表符。显然,xelatex 插入了一些有趣的东西来代替制表符。我有一个解决方法,就是强制生成空格而不是制表符,但这很不方便。

有人知道解决方法/问题是什么吗?

答案1

该问题与xelatex 和 pdflatex 输出文件中的标签不同

解决方案应该是xelatex使用以下-8bit选项进行调用:

xelatex -8bit -shell-escape test

这是test.tex我使用的示例,用于表明在注释中仍然接受双字节字符。

\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage{minted}

\begin{document}

\section{Foo}

\begin{minted}[]{c++}
// comment éßàł
void foo()
        {
                void bar = fb();
                std::cout << "fbar" << "\n"
        }
\end{minted}

\end{document}

(注意:StackExchange 的界面将制表符更改为空格,因此请将其改回以进行测试。)

在此处输入图片描述

答案2

-8bit选项对我不起作用,它只会导致 xelatex 在处理我无法解析的 .pygtex 辅助文件时抛出编译错误。对我有用的是将我的函数保存到它自己的源代码文件中,然后使用命令\inputminted导入到 latex 中:

\inputminted{c++}{foo.cpp}

然后空白字符就会被正确显示。

相关内容