列表中的制表符与空格:有什么区别?我应该注意吗?

列表中的制表符与空格:有什么区别?我应该注意吗?

这是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。

相关内容