[翻译] LaTeX Error: Environment XXX undefined

LaTeX环境错误解析
本文详细解释了在使用LaTeX时遇到环境未定义错误的原因及解决方法,包括未引入相应包、环境名输入错误及环境不存在的情况,并提供了解决方案。

原  文:LaTeX Error: Environment XXX undefined
译  者:Xovee
翻译时间:2020年6月11日

LaTeX Error: Environment XXX undefined

如果你使用了 LaTeX 不能识别的环境,你将会遇到下面这个错误:

在这里插入图片描述

出错原因

你没有引入相应的包

当你使用某个包之中的环境,但是没有引入这个包,就会发生这个报错。一个常见的例子是 align 环境,它是 amsmath 包之中的一个环境。所以,如果你要使用 align 环境,那么你需要在序言中添加 \usepackage{amsmath},例如:

% In your preamble

\usepackage{amsmath}

% In your main .tex file

\begin{align}
2x + 3y &= 7\\
5x - 2y &= 2
\end{align}

在这里插入图片描述

环境名输入错误

如果你在输入环境的时候,输错了其名字,那么也会遇到这个错误。例如:

\begin{lisQ}
    \item This is a list item
    \item This is another list item
\end{lisQ}

在这个例子里,list 环境被打错成 lisQ。所以,如果你遇到了这个错误,请检查文档中环境的名字是否被正确输入。

环境不存在

如果你使用了某个不存在的环境,也会遇到这个错误。
有关更多关于可用的环境、以及如何创建环境,请参考这篇文档。

#include<stdio.h> #include<string.h> #include <stdlib.h> #define MAX_USERS 100 #define FILENAME "yonghuxinxi.txt" struct User{ char username[50]; char passwd[50]; double balance; }; // 从文件加载用户数据 void loadUsers(struct User users[], int *userCount) { FILE *file = fopen(FILENAME, "r"); if (file == NULL) { printf("找到用户数据文件,将创建新文件\n"); return; } *userCount = 0; while (!feof(file) && *userCount < MAX_USERS) { // 从文件读取用户数据 int result = fscanf(file, "%s %s %lf\n", users[*userCount].username, users[*userCount].passwd, &users[*userCount].balance); // 确保成功读取了3个字段 if (result == 3) { (*userCount)++; } } fclose(file); printf("已加载 %d 位用户数据\n", *userCount); } // 保存用户数据到文件 void saveUsers(struct User users[], int userCount) { FILE *file = fopen(FILENAME, "w"); if (file == NULL) { printf("保存用户数据失败!\n"); return; } for (int i = 0; i < userCount; i++) { // 将用户数据写入文件 fprintf(file, "%s %s %.2f\n", users[i].username, users[i].passwd, users[i].balance); } fclose(file); } int welcome(int active,int *current){ if(*current==-1){ printf("---------欢迎来到XXX银行--------\n"); printf(" 请选择您要办理的业务! \n"); printf(" 注册新用户:1 \n"); printf(" 登录:2 \n"); printf("----------------------------------\n"); printf("请输入要办理业务的编号:"); }else{ printf(" -------用户界面------- \n"); printf(" 存款:3 \n"); printf(" 取款:4 \n"); printf(" 查询余额:5 \n"); printf(" 退出系统:0 \n"); printf("----------------------------------\n"); printf(" \n"); printf("请输入要办理业务的编号:"); } int num=0; scanf("%d",&num); active=num; return active; } // 注册新用户 void newlogin(struct User users[], int *userCount){ if(*userCount >= MAX_USERS){ printf("用户数量已达上限!无法继续注册。\n"); return; } struct User newUser; printf("请输入用户名:"); scanf("%s", newUser.username); for(int i = 0; i < *userCount; i++) { if(strcmp(users[i].username, newUser.username) == 0) { printf("用户名已存在!\n"); return; } } printf("请输入密码:"); scanf("%s", newUser.passwd); newUser.balance = 0.0; users[*userCount] = newUser; (*userCount)++; saveUsers(users, *userCount); printf("注册成功!\n"); } // 登录验证 int login(struct User users[], int userCount, int *current){ char inputusername[50]; char inputpasswd[50]; printf("请输入用户名:"); scanf("%s", inputusername); printf("请输入密码:"); scanf("%s", inputpasswd); for(int i = 0; i < userCount; i++){ if(strcmp(users[i].username, inputusername) == 0 && strcmp(users[i].passwd, inputpasswd) == 0) { *current = i; printf("登录成功!\n"); return 1; } } printf("用户名或密码错误!\n"); return 0; } // 存款 void deposit(struct User users[], int current, int userCount){ double add = 0; printf("请输入存款金额(元):"); scanf("%lf", &add); if(add <= 0) { printf("存款金额必须大于0!\n"); return; } users[current].balance += add; printf("存款成功!您当前卡上余额为:%.2f元\n", users[current].balance); saveUsers(users, userCount); } // 取款 void withdrawl(struct User users[], int current, int userCount){ double cut = 0; printf("请输入取款金额(元):"); scanf("%lf", &cut); if(cut <= 0) { printf("取款金额必须大于0!\n"); return; } if(users[current].balance < cut){ printf("您卡上余额不足!\n"); } else { users[current].balance -= cut; printf("取款成功!您当前卡上余额为:%.2f元\n", users[current].balance); saveUsers(users, userCount); } } //查询余额 void money(struct User users[], int current, int userCount){ printf("您当前卡上余额为:%.2f元\n", users[current].balance); } int main(){ struct User users[MAX_USERS]; int userCount = 0; int current = -1; int active; loadUsers(users, &userCount); while(1){ active = welcome(active,&current); switch(active){ case 1: newlogin(users, &userCount); break; case 3: if (current == -1){ printf("请先登录!\n"); } else { deposit(users, current, userCount); } break; case 4: if (current == -1){ printf("请先登录!\n"); } else { withdrawl(users, current, userCount); } break; case 2: if(userCount == 0){ printf("您还没有注册用户,请先注册!\n"); } else { login(users, userCount, &current); } break; case 5: if (current == -1){ printf("请先登录!\n"); } else { money(users, current, userCount); } break; case 0: saveUsers(users, userCount); printf("用户数据已保存,退出系统!\n"); return 0; default: printf("无效的选项,请重新输入!\n"); } } } 此代码中是否需要环境变量
06-25
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值