提问于:
浏览数:
2361
## 编译环境
操作系统
* [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 回答
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
未定义
-
非常感谢! – ⊙▽爆炒鹅卵石∧⊙ 2020-09-28 17:27 回复
0
`cls`文件里面,`@`就是相当于第27个英文字母,就是一个字母,没有什么,你把所有的`@`换成`a`也行
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。