我使用连字符作为命令名称的字母。但我允许用户在必要时重命名它们。然后使用\catcode`-=11
。假设我将连字符保留为命令名称中的字母,我想知道如果用户保留\catcode`-=11
整个文档,是否会遇到问题。
答案1
-
如果catcode 为 11,则某些 LaTeX 构造会失败:
\documentclass[a4paper]{article}
%\catcode`\-=11
\usepackage{array}[2021-01-01]
\usepackage{textgreek}
\begin{document}
aaa\-bbb\-ccc aaa\-bbb\-ccc aaa\-bbb\-ccc
aaa\-bbb\-ccc aaa\-bbb\-ccc aaa\-bbb\-ccc
aaa\-bbb\-ccc aaa\-bbb\-ccc aaa\-bbb\-ccc
aaa\-bbb\-ccc aaa\-bbb\-ccc aaa\-bbb\-ccc
aaa\-bbb\-ccc aaa\-bbb\-ccc aaa\-bbb\-ccc
$ \cos-x=\cos x$
$\alpha-\beta$
\textalpha-rays
\verb-\SomeCommand-
\begin{tabular}{lll}
1&2&3\\
\cline{2-3}
a&b&ct
\end{tabular}
\end{document}
如果您-
像@
经典方式或_
在内部使用expl3
,您可以提供
\DashLetterOn
和\DashLetterOff
像\makeatletter
/\makeatother
一样允许在序言中本地访问该语法,但不要将其-
用于文档使用的命令。
答案2
在文档中将连字符的 catcode 设置为字母是一个非常糟糕的主意。以下是一些测试示例:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\catcode`-=11
\tikz\draw(0,0)--(1,0); %errors
some long\-word\-with\-hyphenation %errors
\setlength{\parindent}{-1cm} %errors
\end{document}
哪些错误
! Package tikz Error: Giving up on this path. Did you forget a semicolon?.
See the tikz package documentation for explanation.
Type H <return> for immediate help.
...
l.86 \tikz\draw(0,0)-
-(1,0);
?
! Undefined control sequence.
l.88 some long\-word
\-with\-hyphenation
?
! Undefined control sequence.
l.88 some long\-word\-with
\-hyphenation
?
! Undefined control sequence.
l.88 some long\-word\-with\-hyphenation
?
! Missing number, treated as zero.
<to be read again>
-
l.90 \setlength{\parindent}{-1cm}
?
! Illegal unit of measure (pt inserted).
<to be read again>
-
l.90 \setlength{\parindent}{-1cm}