我正在寻找智慧,即我可能没有考虑到的潜在副作用。下划线很常见,对于没有经验的 LaTeX 用户来说,逃避它很烦人。假设我对数学模式的下标不感兴趣。将下划线设置为非活动字符是否安全?
默认情况下 _ 表示下标,您需要通过在其前面加上 catcode 0 将其转换为文字字符\
。
把这个放入我的文档中是否会让生活变得更轻松?
第 12 类 其他角色
\catcode`\_=12 %
\catcode`_=12 %
\catcode"005F=12 % unicode decimal syntax
\catcode'137=12 % octal syntax
\catcode95=12 % decimal syntax
或者
第 11 类字母字符
\catcode`\_=11 %
\catcode`_=11 %
\catcode"005F=11 % unicode decimal syntax
\catcode'137=11 % octal syntax
\catcode95=11 % decimal syntax
我的想法是,如果在正确的时间完成(加载所有包之后)就不会发生这种情况。
笔记
- 我正在使用
xelatex
,fontspec
因此我确保我的所有文档都是 UTF-8 编码的。 etoc
添加内容\contentsline
,这意味着下划线的 catcode 必须在这些宏的定义时间之前更改,否则在\begin{document}
下次运行之后读取 .toc 时,\contentsline
即使您稍后设置它,下划线也会在宏中被读为 catcode 8,因为该组保护任何定义后更改。
答案1
我认为制作_
可打印字符(类别代码 12)没有任何问题,除非字体编码为 OT1,因为使用此编码的字体在插槽处可能没有下划线"5F
。
如果您使用fontspec
,输出字体编码将自动设置为 TU,或者在旧版本中设置为 EU1 或 EU2(取决于 XeLaTeX 或 LuaLaTeX)。这些不是 OT1。
对于偶尔的数学模式下标,您可以使用它\sb
来代替通常的下划线。
一个相当简单的例子:
\documentclass[a4paper]{book}
\usepackage{fontspec}
\catcode`_=12
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{A title_with_underscores}\label{a_b}
\ref{a_b}
\end{document}
请注意,在将 用作可打印字符之前,必须在 之前进行 catcode 更改_
,特别是在\begin{document}
LaTeX 读取.aux
文件时。
关于要使用的语法,
\catcode`\_=12 %
\catcode`_=12 %
\catcode"5F=12 % unicode decimal syntax
\catcode'137=12 % octal syntax
\catcode95=12 % decimal syntax
很好。前两个指定了一个字母常数并且更方便。由于下划线的起始类别代码为 8,因此不需要反斜杠,但这也没什么坏处。
不设置_
为类别代码 11。这可能会在几种情况下造成伤害;例如
\macro_
将被解释为一个标记。