作为特殊字符符号,井号(#)的用途是什么?

作为特殊字符符号,井号(#)的用途是什么?

我了解所有特殊字符的用途,,,,,,,,,$和,但井号&()除外。何时以及为什么要使用它?%_{}^~\#

答案1

该字符#(类别代码为 6)有两种用途。

它在参数文本和替换文本中都表示宏的参数:

\def\foo#1{-#1-}

在此上下文中,它后面应该跟一个从 1 到 9 的数字,但限制是参数必须在参数文本中连续编号。请注意,LaTeX 会自动提供参数文本,因此,例如,

\newcommand{\foo}[3]{...}

最终简化为

\def\foo#1#2#3{...}

#参数文本中有一个特殊用法:如果#出现在左括号之前,则定义的宏的最后一个参数将由括号分隔。您可以在 TeXbook 或 TeX by Topic 中查看示例。

的第二种用法#是对齐前导。 基元后面\halign可以跟to <dimen>spread <dimen>,然后{应该出现 。 接下来是一系列<u>#<v>以 分隔&并以 结尾的块\cr,称为对齐序言,其目的是指定要添加到表中每个后续条目的标记。 表示#对齐中单元格的实际内容。典型的对齐前导可以是

#\hfil&\hfil#\hfil&\hfil#\hfil&\hfil#\cr

指定四列,第一列左对齐,接下来两列居中对齐,第四列右对齐。

在 LaTeX 中,tabular是通过 实现的\halign,对齐前言是根据环境的强制参数自动构建的。

答案2

#是宏参数字符,#1表示宏参数一,#2参数二等。如果您想将其用作字符本身,请使用\#或更改 catcode。

\newcommand{\mymacro}[5]{% #1 #2 #3 #4 #5 }

将使用 5 个宏参数,可#1用于#5

但是,如果存在,\newcommand\mymacro宏参数必须加倍:

\documentclass{article}

\newcommand{\mymacro}[1]{%
  \newcommand{\myinnermacro}[1]{%
    Outer: #1

    Inner: ##1
  } 

  \myinnermacro{\textbf{#1}}
}


\begin{document}
\mymacro{\LaTeX\ is beautiful}
\end{document} 

在此处输入图片描述

从截图中可以看出,的内容#1在内部宏中被屏蔽,然后被使用##1

当然, 该#属性也适用于\def和等等。\NewDocumentCommand

编辑

这是一个关于如何改变宏参数字符的坏例子;-)

\documentclass{article}

\catcode`#=11
\catcode`!=6


\newcommand{\mymacro}[1]{%
  \newcommand{\myinnermacro}[1]{%
    Outer: !1

    Inner: !!1
  } 

  \myinnermacro{\textbf{!1}}
}


\begin{document}
\mymacro{\LaTeX\ is beautiful}
\end{document} 

需要您自担风险使用它;-)

答案3

#用于定义命令;

\newcommand\zzz[2]{this #1 and this #2.}

定义一个带有两个参数的命令,例如

\zzz{a}{b}

扩展为

this a and this b.

相关内容