该名称不应该\jobname
扩展为不带扩展名的文件名吗?
我在看
它说显示结果的含义是宏。我的结果是否意味着这\jobname
不是宏?
代码
\documentclass{article}
\begin{document}
\makeatletter
\show\jobname
\makeatother
\end{document}
输出:
> \jobname=\jobname.
l.4 \show\jobname
答案1
\jobname
不是一个宏(本质上它没有用定义\def
)它是一个可扩展的原语,可以扩展到文件名。
你可以用同样的扩展名制作一个宏
\edef\xjobname{\jobname}
*\show\xjobname
> \xjobname=macro:
->texput.
因此,它们\xjobname
具有相同的扩展,\jobname
但它们的行为不同\show
,并且至关重要的是,如果用
\ifx\jobname\xjobname
但两个具有相同扩展的宏是\ifx
相等的。
答案2
通常这就是 TeX 基元的反应方式。从电子书(第三章:控制 TeX,第 10 页):
人们如何区分 TeX 基元和已在更高级别定义的控制序列?有两种方法:(1)本手册的索引列出了讨论的所有控制序列,每个基元都标有星号。(2)您可以在运行 TeX 时显示控制序列的含义。如果您输入
\show\cs
是\cs
任何控制序列,TeX 将以其当前含义响应。例如,\show\input
结果是> \input=\input.
,因为\input
是基元。另一方面,\show\thinspace
产生> \thinspace=macro: ->\kern .16667em .
这意味着
\thinspace
已被定义为 的缩写\kern .16667em
。通过输入,\show\kern
您可以验证\kern
是原始的。 的结果\show
会出现在您的终端上以及运行 TeX 后获得的日志文件中。
在强壮的方式虽然被声明为“宏”,但输出结果却非常奇怪。例如,\show\vspace
打印
> \vspace=macro: ->\protect \vspace .
在终端。
一些原语可以扩展还有一种方法深入了解强健命令的定义对于那些无法扩展的原语,你必须研究TeX 程序-代码.web
或者其文档- 为了了解它在做什么。
使用大卫的例子在 TeX 终端中输入以下内容(未指定文件名):
\edef\xjobname{\jobname}
*\show\xjobname
> \xjobname=macro:
->texput.
528.最初作业名称= 0;一旦知道真实姓名,它就变为非零。我们有作业名称= 0 当且仅当
log
文件尚未打开时,当然除了作业名称变为非零之后的短时间内。534.这打开日志文件常规...
[...]
如果 作业名称= 0然后 作业名称←“texput
”;
[...]