我了解所有特殊字符的用途,,,,,,,,,$
和,但井号&
()除外。何时以及为什么要使用它?%
_
{
}
^
~
\
#
答案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.