我正在使用 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}
然后空白字符就会被正确显示。