## 编译环境 操作系统 * [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 回答2

0
带 `@` 的宏通常只能用在 `cls` 或 `sty` 文件中,`tex` 文档中不能直接使用,需要先使用 `\makeatletter`。这有些类似于 python 中 `__name__` 的 `_`,表示内部使用的名称。 `\def\stunum#1{\def\@stunum{#1}}` 定义 `\stunum`,功能是将参数的内容存到内部宏 `\@stunum` 中;`\def\@stunum{}` 将 `\@stunum` 的初始化为空。

作者追问:2020-09-28 17:26

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

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


回答: 2020-10-05 20:36

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

回答: 2020-10-05 20:41

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

回答: 2020-10-05 20:41

未定义

0
`cls`文件里面,`@`就是相当于第27个英文字母,就是一个字母,没有什么,你把所有的`@`换成`a`也行

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。