这是Listings 包中存在换行和错误对齐的问题。为什么我在环境中复制和粘贴代码时会遇到问题lstlisting
?我应该注意列表中的制表符或空格吗?如果是,那为什么呢?制表符和空格究竟如何影响使用包排版的源代码中的水平间距listings
?
答案1
除了空格字符(ASCII 代码 32)之外,还有其他不可见字符;其中之一是制表机,又名制表符(ASCII 代码 9),在某些类型的源文件中使用;最值得注意的是,在 makefile 中。有关不可见字符的更多信息,请参阅维基百科关于 ASCII 控制字符的页面。
该listings
包对空格字符和制表符的处理方式非常不同,如文档第 2.5 节所述listings
。
如果您的源包含制表符,则可能会得到意外的输出。该包假设制表符在第 9、17、25、33 列等处停止。这是通过 预定义的
tabsize=8
。如果将 8 更改为数字 n,您将得到在第 n+1、2n+1、3n+1 列等处停止的制表符。
如果您不想有任何意外,并且您的代码只使用空格而不用制表符,那么坚持使用空格并完全避开制表符可能是一个好主意。
我猜你使用的是 LaTeX IDE,例如 texmaker,而不是文本编辑器,例如 emacs 或 vim。默认情况下,当Tab按下该键时,IDE 很可能插入制表符,但应该有一种方法可以将其配置为插入固定数量的空格(通常为 2、4 或 8)。不过,这样的选项可能不具有追溯力;换句话说,文件中已经存在的制表符不能通过激活该选项简单地替换为空格。你可能必须搜索并用空格替换制表符才能删除所有制表符。这可以说是容易出错的,但如果你使用 IDE,你可能没有其他选择。然而……
编辑(遵循 Barbara Beeton 的评论):... emacs 和 vim 等编辑器具有内置功能,可以有效地用空格替换当前缓冲区中的所有制表符。在 emacs 中,您有untabify
;在 vim 中,您有retab
(参见这)。
好的文本编辑器还允许您制作不可见的字符(制表符、换行符等)。可见的,这样您就知道您实际处理的是什么类型的不可见字符。在上图(vim 缓冲区的屏幕截图)中,符号▸
表示制表符,¬
符号表示换行符。
这是抛弃 IDE 并开始使用文本编辑器的另外两个理由:)
更新: texmaker 4.2 (2014/05/01) 现在允许高级用户扩展 IDE 的功能通过从内部运行自定义 Javascript 代码。这为“retab”脚本打开了大门,但假设您了解一些 Javascript。