在cls文件里边的\def\@XXXX这样的命令是什么意思?

2020-09-27 22:47发布

## 编译环境 操作系统 * [x] Windows 7/8/10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [x] TexLive `2...

## 编译环境 操作系统 * [x] Windows 7/8/10 * [ ] macOS * [ ] Linux `若需勾选,请把[ ]改成[x]` Tex发行版 * [x] TexLive `2019` * [ ] MikTeX `版本号` * [ ] CTeX `若需勾选,请把[ ]改成[x]` ## 我的问题 我在看一个cls文件(定义一个毕业论文封面的模板),请问下面这个命令是什么意思,@是什么意思?求大侠解答! ``` %%% ---- 封面 ----- %%% \makeatletter \def\stunum#1{\def\@stunum{#1}}\def\@stunum{} % 学号 \def\ctitle#1{\def\@ctitle{#1}}\def\@ctitle{} % 题目 \def\cschool#1{\def\@cschool{#1}}\def\@cschool{} % 院系 \def\cmajor#1{\def\@cmajor{#1}}\def\@cmajor{} % 专业 \def\cauthor#1{\def\@cauthor{#1}}\def\@cauthor{} % 作者 \def\cadvisor#1{\def\@cadvisor{#1}}\def\@cadvisor{} % 老师 \def\cdate#1{\def\@cdate{#1}}\def\@cdate{} % 日期 ```
2条回答
2020-09-27 23:33 .采纳回答
带 `@` 的宏通常只能用在 `cls` 或 `sty` 文件中,`tex` 文档中不能直接使用,需要先使用 `\makeatletter`。这有些类似于 python 中 `__name__` 的 `_`,表示内部使用的名称。 `\def\stunum#1{\def\@stunum{#1}}` 定义 `\stunum`,功能是将参数的内容存到内部宏 `\@stunum` 中;`\def\@stunum{}` 将 `\@stunum` 的初始化为空。

作者追问:2020-09-27 23:33

您好,谢谢您的解答,感激不尽!我还有下面疑问。

`\def\@stunum{}` 的作用是什么?我删除这段代码,并没有报错!


回答: 2020-09-27 23:33

这是将 `\@stunum` 初始化为空。如果删掉这行,在使用 `\stunum{}` 前,`\@stunum` 是为定义的,这时如果生成封面调用 `\@stunum` 就会报错。

回答: 2020-09-27 23:33

这是将 `\@stum` 初始化为空。如果删掉这行,在使用 `\stum` 前,`\@stum` 是为定义的,这时如果生成封面调用 `\@stum` 就会报错。

回答: 2020-09-27 23:33

未定义

一周热门 更多>