在命令名称中使用连字符作为字母

在命令名称中使用连字符作为字母

我使用连字符作为命令名称的字母。但我允许用户在必要时重命名它们。然后使用\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}
                                 

相关内容