\meaning 是什么意思?

\meaning 是什么意思?

在代码中endnotes.sty有一个命令\meaning,其定义如下

\long\def\@endnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \begingroup
        \def\next{#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup}

如果我删除它,它就不再起作用了(我得到了有趣的错误Undefined control sequence. \GenericError)。有什么用\meaning

答案1

~ $ tex
This is TeX, Version 3.14159265 (TeX Live 2016) (preloaded format=tex)
**\relax

*\def\test#1{This is a test #1 macro}

*\show\test
> \test=macro:
#1->This is a test #1 macro.
<*> \show\test

\show给出日志文件和终端中宏(或原语)的含义(定义)。 \meaning显示相同的内容,但将其放在文档中。在上面的示例中,它被写入注释文件。

答案2

如果你处理文档

\documentclass{article}
\usepackage{endnotes}

\begin{document}

x\endnote{Recall that $\sqrt{2}$ is irrational}

\end{document}

您将获得一个扩展.ent名为

\@doanenote {1}
macro:->Recall
that
$\sqrt
{2}$
is
irrational
\@endanenote 

这是定义的结果

\long\def\@endnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \immediate\write\@enotes{\@doanenote{\@theenmark}}%
     \begingroup
        \def\next{#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup
     \immediate\write\@enotes{\@endanenote}}

\let\@doanenote=0
\let\@endanenote=0

这使得两个控制序列成为不可扩展的标记。

\meaning原语将单个标记作为参数,并扩展为该标记的字符串表示形式:所有字符的类别代码均为 12,但空格标记除外,空格标记被规范化为字符代码 32(空格),类别代码为 10。如果标记是宏(即,已使用\def\edef\gdef定义\xdef),则表示形式为

macro:〈parameter text〉->〈replacement text〉

因此,在endnotes上述情况下,\meaning\next将扩展为

macro:->Recall that $\sqrt {2}$ is irrational

因为参数文本为空。按照规则,字符串表示中的每个控制字后面都会跟着一个空格。

该宏\@endnotetext执行三个\write操作。首先,\@doanote {1}写出,因为\@doanote不可扩展,所以按原样写出(带有尾随空格),而\@theenmark将被扩展。此外{}不可扩展,因此我们得到示例中的第一行。

\meaning\next然后,在设置下写入扩展,\newlinechar='40这意味着空格(字符代码十进制 32,八进制'40) 将转换为换行符。我猜这样做是为了避免行太长,以防有较长的尾注。

最后\@endanenote写入(在新行上)。

.ent文件被命令读入时\theendnotes\@doanenote被赋予新的含义;基本上它会读取直到>找到,发出\begingroup,将标记设置为括号中的标记并开始排版注释文本;\@endanenote被重新定义为发出\par\endgroup


在其他情况下会返回什么\meaning?下面是几个例子;我使用纯 TeX,但在所有版本的 TeX 中结果都是一样的。

\let\foo=0 % like in endnote.sty
\def\next{Recall that $\sqrt{2}$ is irrational}
\def\macro#1{Something with #1}

\tt % typewriter type

\meaning\relax

\meaning a

\meaning 0

\meaning\alpha

\meaning\foo

\meaning\next

\meaning\macro

\meaning ~

\meaning\&

\meaning\pageno % plain tex

\bye

在此处输入图片描述

\let字符的控制序列将显示与使用该字符时相同的内容。用\chardef(like \&) 定义的控制序列将给出\char"字符的十六进制数;对于\mathchardef(like \alpha) 也是如此。

\next\macro显示了当有参数文本时的区别;最后,原语表示自身(如\relax)。还有其他几种情况,我展示了\pageno用 定义的\countdef

相关内容