尽管存在不可见的 0x08(退格)字符,仍可进行编译

尽管存在不可见的 0x08(退格)字符,仍可进行编译

使用 LaTeX 时,我在数学表达式中写指数时经常会遇到编译错误,即使语法有效。最近我发现这是由于错误输入了“退格”字符 (ASCII 0x08),但它并没有出现在我的 IDE 中(TeXstudio,最近我在 Anki 中制作了 LaTeX 抽认卡,也遇到了同样的问题)。

我有一个加拿大多语言标准键盘。为了使用插入符号^来写指数,我按下^( 右边的键P),释放然后按Space。但有时我打字太快,我会犯错误并且想要返回,所以我会立即按下^Backspace这会插入臭名昭著的“退格”字符,尽管它没有显示出来。由于不可见的字符,pdfLaTeX 将无法编译,所以我必须复制/粘贴到 Sublime Text(显示控制字符BS)或记事本(显示一个小框)中,擦除整行并再次输入文本,然后再次将其复制到我的 LaTeX 编辑器中。

这非常耗时,所以我希望有更简单的方法来解决这个问题(除了打字时不会犯任何错误)。理想情况下,pdfLaTeX 会简单地忽略 0x08 字符并进行编译。也许我必须在前言中添加一些有关字符编码的内容?或者,如果有办法像 Sublime Text 和 Notepad 那样在 TeXstudio 和 Anki 中显示控制字符,至少我会立即发现错误,而不必在另一个编辑器中复制/粘贴。

最后的评论:我认为问题可能是我的 CMS 键盘的配置方式,因为组合键^Backspace应该插入“Backspace”字符。但我注意到此组合键的行为取决于我正在使用的程序:记事本和 Word 不执行任何操作,Sublime Text 和 TeXworks(我不喜欢使用)删除最后一个字符(就像一个简单的Backspace),SE 编辑器插入一个^,等等。因此,问题似乎来自某些 IDE 本身(尽管我不太在意是否插入了 0x08 字符,但我可以找到在编译时忽略它的方法)。

答案1

LaTeX 允许为每个字符分配一个所谓的 catcode(类别代码),该代码决定了该字符在内部的处理方式。这适用于可见字符,也适用于不可见字符。其语法为\catcode<char number>=<catcode number>

现在,您有多种选择来处理该字符。以下是一些想法(请注意Invisible和之间的(不可见的)退格符backspace):

\documentclass{article}
\usepackage{xcolor}

\begin{document}
% 10 = Make it an ordinary space character, like '\x20'
\catcode8=10
Invisiblebackspace

% 9 = Ignore the character completely
\catcode8=9
Invisiblebackspace

% 13 = Make the character "active", i.e. treat it like a macro name
\catcode8=13
% ... and define a macro that adds a visual hint about that character in the final output
\def^^H{\textbf{\textcolor{red}{[\texttt{\char`\\0x08}]}}}
Invisiblebackspace
\end{document}

在此处输入图片描述

注意\def^^H{...},其中^^H是输入字符 的另一种方法'\x08'。 的字符位置H是 72,LaTeX 在这里减去 64 得到位置 8。

相关内容