清單中的製表符與空格:有什麼區別,我應該關心嗎?

清單中的製表符與空格:有什麼區別,我應該關心嗎?

這是一個後續問題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。預設按下該鍵時,您的 IDE 很可能會插入製表符Tab,但應該有一種方法將其配置為插入固定數量的空格(通常為 2,4 或 8)。不過,這樣的選擇可能不具追溯力;換句話說,僅透過啟動該選項,檔案中已存在的製表符可能不會被空格取代。您可能需要搜尋製表符並將其替換為空格才能刪除所有製表符。這可能很容易出錯,但如果您使用 IDE,您可能沒有其他選擇。然而...

編輯(遵循 Barbara Beeton 的評論): ... emacs 和 vim 等編輯器有一個內建功能,可以有效地用當前緩衝區中的空格替換所有製表符。在 emacs 中,你有untabify;在vim中,你有retab(參見)。

在此輸入影像描述

好的文字編輯器還允許您將不可見的字元(製表符、換行符等)新增至文字。可見的,這樣你就知道你實際上正在處理什麼類型的隱形角色。在上圖中(vim 緩衝區的螢幕截圖),符號表示製表符,¬符號表示換行符。

這是放棄 IDE 並開始使用文字編輯器的另外兩個原因:)

更新: texmaker 4.2 (2014/05/01) 現在允許高級用戶擴充IDE的功能透過從內部運行自訂 Javascript 程式碼。這為“retab”腳本打開了大門,但假設您了解一點 Javascript。

相關內容