入门_入门教程 - CSDN
精华内容
参与话题
  • 计算机入门

    千次阅读 多人点赞 2019-06-20 09:25:36
    有点烦躁,来写篇文章把,也算是对自己过往的一个总结,也给想要入门计算机的人分享一点经验。如果你是一个初学者,我敢保证,读完这篇文章让你节省一年以上的时间。因为这是我本科两年时间的经验。 还是先要介绍...

        专栏开了大概有一个星期了,一直没有时间来写文章,也没有心情来写文章。现在是23:45,一个人坐在实验室里边挺凉的。有点烦躁,来写篇文章把,也算是对自己过往的一个总结,也给想要入门计算机的人分享一点经验。如果你是一个初学者,我敢保证,读完这篇文章让你节省一年以上的时间。因为这是我本科两年时间的经验。

       还是先要介绍一下我自己,这样方便别人看文章的时候考虑文章有没有必要继续读。因为这篇文章对层次高一点的人来说,看起来是浪费时间的。所以先声明一下这篇文章仅供如入门者参考。顺便介绍一下我自己:我是在读本科大三,我很庆幸我选择了我喜欢的计算机专业,我也很庆幸我没有选错它,我是真的爱它,我只有一个女朋友,她叫DELL,她有时候会给我撒娇,比方说报个404的错误啊(使用struts2框架的时候刚入门,404很常见,哦对了,servlet的时候也会报404错误。我最感谢的就是一次次的飘红,一次次的报错,因为每一次都会让我加深对框架的理解,想要把错误解决掉,就一定要懂框架的执行流程。)她是最苛刻最严谨的,连一个英文字母错了,都不行。想要入门计算机这一行,最好是一个爱折腾的人,能够把折腾当做一种乐趣。如果你真的确定,你还爱她,并且发誓至死不渝,那就开始把!

       到了大学,不能说像大多数人一样懵懂,我还算是比较成熟的,从大一就开始做了各种兼职,实现了个人的小康生活,因为生活费从来没给家里要过,也从来没花完过。貌似有点跑题了哈,咱是谈技术的,其实也不然,我先说一下自己的经历,总结一下自己大学两年以来的错误,希望经验能够给后边的人吸取到。我是本科大学,在青岛。一开始就过着忙碌的生活把,一遍边增加自己的生活的能力,一遍上课。两年以来,最大的错误就是天真的以为上课跟着老师上课好好学就够了,这个致命的错误,导致的结果是浪费掉至少一年的时间。希望读到这里的朋友,如果是本科生的话,一定要记住大学里边全靠自己,不管你的大学多么优秀。我们永远要以最高的标准要求我么自己。对于我们来说,大二下学期,大三上学期应该是技术大爆炸的时期,到了大三下,就可以再学学前沿一点的技术了。在风口浪尖上虽然风险大一点,但是机会也就多一点。所以有幸刷到我这篇文章的你,希望你能够早点入门,不要觉得跟着老师好好上课就够了,我们计算机行业需要培养很强的自我学习能力才行。课上好好学是必须的,课下自己去找一些好的资源,自己学,效果会很好的。

      如果你有幸刷到我这篇文章,并且还能看到这里,那你一定是赚到了。接下来可全是干货了,分享一下自己的资源,学习方法。到了大二的暑假我才感受到了技术的魅力,和吸引力,以至于我暑假没回家,在宿舍自己鼓捣了一个半月,加强了前端,学习了JQuery,做出来一个小游戏,用JQuery插件实现各种小的功能,比方说淘上的放大镜,万花筒啊,手风琴啊,轮播图啊,炫酷的动态背景啊,等等。又稍微加强里一点java基础。这是我真正的接触到资源,就是有比较好的视频。学习这个,从书上看到的知识基本上都过时了。再说从书上获取知识,你要保证你学习能力极强,总结能力极强。前期入门的话还是去看一些好的视频,比人总结过得,学起来容易一点,也偏重点一些,我们要善于站在巨人的肩膀上才行。等你学到一定程度以后,别人总结的东西不够你吃的时候,可以淘一些好的书,去获取知识。

    ps:我分享一套Java整个体系的课程(尚硅谷老师分享的,我在这里无偿分享出来,想走java体系的,这一套就够了,跟着学)

      至于学习方法: 这是我自己的一篇关于学习方法的文章,希望可以帮到你

    链接:https://pan.baidu.com/s/1W6HyhFG7kkrYKWkeQDeOsA 
    提取码:wu6h 
     

      当你有了资源以后,希望你能够好好的利用,不要浪费掉。跟着好好的学,靡有不凡鲜克有终,不积小流无以致江海。希望能够坚持下去,入门没有那么容易,在安装工具上会花费大量的时间,个人建议不管安装什么都先去看教程,跟着完整的教程安装,会让你事半功倍。一开始自己敲成来的程序,只有我和上帝能看懂,出了Bug以后,只有我自己能解决。我们需要锻炼独自解决问题的能力,一开始你可以把调试的错误复制下来到百度上去搜搜看,可能一开始比较花时间,但是慢慢的你会发现,你解决问题的能力就上去了,浏览帖子的时间明显低了。再慢慢的,你会发现国内的站已经不能满足你解决的问题了,可以翻墙去国外的站搜搜看。

       千里之行始于足下,基础的东西最好掌握的牢固一点。但是是在不懂的东西,可以先过去,有些内容到了后边,就会自然而然的懂了。就想我一开始学习java基础。我死活不清楚泛型有什么用,后来跟着别人做项目,需要用到代码抽取了,泛型自然也就用上了,并且大发感慨,泛型太神奇了!太好用了,一开始基础很少接触到用法。一步一个脚印学下去,我相信,用不了三个月,你就对编程有点感觉了。半年,你就真的入门了。慢慢的跟着做项目,总结一些经验,自己试着敲一些代码出来。

       都写到这里了,如果你还在看,我就把压箱底的最后的一点东西拿出来把,只是个人经验,在学习的过程中,一定要做好笔记,很多东西,你会发现,你遗忘的速度远远超过你记忆的速度,很多东西要学好多遍的,至于到熟练的掌握。就需要大量的练习才行。笔记的话个人建议做电子版的,一来不容易丢失,二来查阅起来方便,三来电子笔记要快很多,一个截图两秒能抵你写的三分钟。一开始我的笔记都在word上,只有自己能看,后来开始写博客,我发现博客上写笔记真的很方便,而且自己能看,别人也能看。有错误别人说不一定还能给你指出来。在学习的过程中做好备份,比方说你安装的软件啊,什么的。做好备份,我相信你肯定会有重装电脑的需求的,到时候不用下载,有备份直接就能安装,都是自己经常使用的版本,这样会方便很多。将自己的重要的代码收藏起来,一些重用率很高的代码不防写在博客上,方便以后自己查看使用。

      最后的最后希望你能真的爱上你的女朋友。细心照顾她,别对她发脾气。作为程序员一定要有分享的精神,将自己的经验分享出来。一定要有工匠精神,对知识,对技术永远不满足,永远充满渴望,你要知道,一旦选择计算机这个行业,就一定意味着学习是一辈子的事了。你永远都有学不完的东西。临渊羡鱼不如退而结网。

     今后会持续的分享我个人的经验、教训、总结。刚入门的话可以继续关注我,谢谢。大家可以交流。(希望半夜赶出来的文章对初学者能有帮助)

     深夜了。我要回去睡觉了,明天还有课。

    ***增加(强列推荐读 下边的链接文章,同样是我自己写的)

    下边这篇文章给出了具体的学习计划,根据我的经验,我觉得成长就是在用时间犯错,然后换取经验。

    这个计划写于上边文章一年之后

    大学生如何走在别人的前边,即使非985,211。

     


    更新时间:2019.05.08


    如果觉得上边的内容还不够,可以看看下边的一张图,我今天得到的,我觉得它给我查漏补缺了! 

    由于图片过大,有点畸形了,建议下载下来看。(看到图片,直接点击就可以放大)

     

    链接:图片链接 
    提取码:tgri 
     

    展开全文
  • Python初级入门精讲

    万人学习 2020-08-25 15:56:32
    本课程为Python全栈开发初级入门篇-语言基础章节,学习完本篇章可对python语言有初步的掌握与理解,本课程侧重于初级学员,课程内容详细有针对性,务求各种类型的学员都可以掌握python开发。
  • c语言入门这一篇就够了-学习笔记(一万字)

    万次阅读 多人点赞 2018-07-19 09:00:15
    C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C语言结构体 https://www.imooc.com/course/programdetail/pid/37 c语言入门 C语言一经出现就以其功能...

    内容来自慕课网,个人学习笔记。加上了mtianyan标签标记知识点。

    C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C语言结构体

    mark

    https://www.imooc.com/course/programdetail/pid/37

    c语言入门

    C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。

    hello,world

    #include<stdio.h> 
    int main()
    {
        /*在双引号中间输入Hello World*/ 
        printf("Hello World");
        return 0; 
    }

    注:在最新的C标准中,main函数前的类型为int而不是void

    c语言的具体结构

    简单来说,一个C程序就是由若干头文件函数组成。

    mark

    • #include <stdio.h>就是一条预处理命令, 它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作。

    • 函数就是实现代码逻辑的一个小的单元

    必不可少之主函数

    一个C程序有且只有一个主函数,即main函数。

    mark

    • C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口

    • main前面的int就是主函数的类型.

    • printf()格式输出函数,这里就记住它的功能就是在屏幕上输出指定的信息

    • return是函数的返回值,根据函数类型的不同,返回的值也是不同的。

    • \n是转义字符中的换行符。(注意:C程序一定是从主函数开始执行的)

    良好习惯之规范

    1. 一个说明或一个语句占一行,例如:包含头文件、一个可执行语句结束都需要换行
    2. 函数体内的语句要有明显缩进通常以按一下Tab键为一个缩进
    3. 括号要成对写,如果需要删除的话也要成对删除
    4. 当一句可执行语句结束的时候末尾需要有分号
    5. 代码中所有符号均为英文半角符号

    mark

    程序解释——注释

    注释是写给程序员看的,不是写给电脑看的。

    C语言注释方法有两种:

    多行注释: /* 注释内容 */

    单行注释: //注释一行

    有名有姓的C(标识符)

    C语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:

    1. 标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。
    2. 标识符是严格区分大小写的。例如Imoocimooc 是两个不同的标识符。
    3. 标识符最好选择有意义的英文单词组成做到”见名知意”,不要使用中文。
    4. 标识符不能是C语言的关键字。想了解更多C语言关键字的知识。

    变量及赋值

    变量就是可以变化的量,而每个变量都会有一个名字(标识符)。变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名变量值是两个不同的概念。

    mark

    变量定义的一般形式为:数据类型 变量名;

    多个类型相同的变量:数据类型 变量名, 变量名, 变量名…;

    mark

    注意:在定义中不允许连续赋值,如int a=b=c=5;是不合法的。

    变量的赋值分为两种方式:

    1. 先声明再赋值
    2. 声明的同时赋值

    基本数据类型

    C语言中,数据类型可分为:

    1. 基本数据类型
    2. 构造数据类型
    3. 指针类型
    4. 空类型四大类

    数据类型分类

    最常用的整型, 实型与字符型(char,int,float,double):

    整型,实型,字符型

    整型数据是指不带小数的数字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):

    整型

    注:

    • int short int long int根据编译环境的不同,所取范围不同。
    • 而其中short intlong int至少是表中所写范围, 但是int在表中是以16位编译环境写的取值范围。
    • 另外 c语言int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。
    • ANSI标准定义int是占2个字节,TC是按ANSI标准的,它的int是占2个字节的。但是在VC里,一个int是占4个字节的。

    浮点数据是指带小数的数字。

    生活中有很多信息适合使用浮点型数据来表示,比如:人的体重(单位:公斤)、商品价格、圆周率等等。

    因为精度的不同又分为3种(float,double,long double):

    浮点型

    注:C语言中不存在字符串变量,字符串只能存在字符数组中,这个后面会讲。

    格式化输出语句

    格式化输出语句,也可以说是占位输出,是将各种类型的数据按照格式化后的类型及指定的位置从计算机上显示。

    其格式为:printf("输出格式符",输出项);

    c语言常用格式化符

    当输出语句中包含普通字符时,可以采用一下格式:

    printf("普通字符输出格式符", 输出项);

    mark

    注意:格式符个数要与变量、常量或者表达式的个数一一对应

    不可改变的常量

    在程序执行过程中,值不发生改变的量称为常量

    mtianyan: C语言的常量可以分为直接常量和符号常量。

    • 直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:
      • 整型常量:13、0、-13;
      • 实型常量:13.33、-24.4;
      • 字符常量:‘a’、‘M’
      • 字符串常量:”I love imooc!”

    mark

    在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:

    #define 标识符 常量值 
    #include <stdio.h>
    #define POCKETMONEY 10    //定义常量及常量值
    int main()
    {
        // POCKETMONEY = 12;  //小明私自增加零花钱对吗?
        printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
        return 0;  
    }

    符号常量不可以被改变。

    自动类型转换

    数据类型存在自动转换的情况.
    自动转换发生在不同数据类型运算时,在编译的时候自动完成

    自动转换

    char类型数据转换为int类型数据遵循ASCII码中的对应值.

    注:

    字节小的可以向字节大的自动转换,但字节大的不能向字节小的自动转换

    char可以转换为int,int可以转换为double,char可以转换为double。但是不可以反向。

    强制类型转换

    强制类型转换是通过定义类型转换运算来实现的。其一般形式为:

    (数据类型) (表达式)

    其作用是把表达式的运算结果强制转换成类型说明符所表示的类型

    在使用强制转换时应注意以下问题:

    1. 数据类型和表达式都必须加括号, 如把(int)(x/2+y)写成(int)x/2+y则成了把x转换成int型之后再除2再与y相加了。
    2. 转换后不会改变原数据的类型及变量值,只在本次运算中临时性转换
    3. 强制转换后的运算结果不遵循四舍五入原则。

    运算符号

    C语言中运算符:

    ※ 算术运算符
    ※ 赋值运算符
    ※ 关系运算符
    ※ 逻辑运算符
    ※ 三目运算符

    算术运算符

    c语言基本运算符:

    基本算术运算符

    除法运算中注意

    如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2;

    而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000

    mtianyan: 取余运算中注意

    该运算只适合用两个整数进行取余运算,如:10%3 = 1

    mtianyan: notes: 而10.0%3则是错误的;运算后的符号取决于被模数的符号,如(-10)%3 = -1;10%(-3) = 1;

    mtianyan: %%表示这里就是一个%符.

    注:C语言中没有乘方这个运算符,也不能用×, ÷等算术符号。

    自增与自减运算符

    • 自增运算符为++,其功能是使变量的值自增1
    • 自减运算符为--,其功能是使变量值自减1。

    它们经常使用在循环中。自增自减运算符有以下几种形式:

    自增自减

    赋值运算符

    C语言中赋值运算符分为简单赋值运算符复合赋值运算符

    简单赋值运算符=号了,下面讲一下复合赋值运算符:

    复合赋值运算符就是在简单赋值符=之前加上其它运算符构成.

    例如+=、-=、*=、/=、%=

    分析:定义整型变量a并赋值为3,a += 5;这个算式就等价于a = a+5; 将变量a和5相加之后再赋值给a

    注意:复合运算符中运算符和等号之间是不存在空格的。

    关系运算符

    C语言中的关系运算符:

    关系运算符

    关系表达式的值是,在C程序用整数10表示。

    注意:>=, <=, ==, !=这种符号之间不能存在空格

    逻辑运算符

    C语言中的逻辑运算符:

    逻辑运算符

    逻辑运算的值也是有两种分别为,C语言中用整型的1和0来表示。其求值规则如下:

    • 与运算 &&

    参与运算的两个变量都为真时,结果才为真,否则为假。例如:5>=5 && 7>5 ,运算结果为真;

    • 或运算 ||

    参与运算的两个变量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:5>=5||5>8,运算结果为真;

    • 非运算!

    参与运算的变量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>8),运算结果为真。

    三目运算符

    C语言中的三目运算符:?:,其格式为:

    表达式1 ? 表达式2 : 表达式3; 

    执行过程是:

    先判断表达式1的值是否为真,如果是真的话执行表达式2;如果是假的话执行表达式3。

    #include <stdio.h>
    int main()
    {
        //定义小编兜里的钱
        double money =12.0      ; 
        //定义打车回家的费用
        double cost =11.5       ;  
        printf("小编能不能打车回家呢:"); 
        //输出y小编就打车回家了,输出n小编就不能打车回家
        printf("%c\n",money>=cost?'y':'n'                        );
        return 0;
    }

    运算符大比拼之优先级比较

    各种运算符号的顺序:

    运算符的优先级

    优先级别为1的优先级最高,优先级别为10的优先级别最低。

    分支结构之简单if语句

    C语言中的分支结构语句中的if条件语句。

    简单if语句的基本结构如下:

    if(表达式)
    {
    执行代码块;
    }

    其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

    注意:if()后面没有分号,直接写{}

    分支结构之简单if-else语句

    简单的if-else语句的基本结构:

    if-else

    语义是: 如果表达式的值为真,则执行代码块1,否则执行代码块2。

    注意:

    if()后面没有分号,直接写{},else后面也没有分号,直接写{}

    分支结构之多重if-else语句

    C语言中多重if-else语句,其结构如下:

    if-else多重

    语义是:依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n。

    注意:当某一条件为真的时候,则不会向下执行该分支结构的其他语句。

    分支结构之嵌套if-else语句

    C语言中嵌套if-else语句。嵌套if-else语句的意思,就是在if-else语句中,再写if-else语句。其一般形式为:

    嵌套if-else

    循环结构之while循环

    反复不停的执行某个动作就是江湖人称的循环

    C语言中有三种循环结构,先看一下C语言while循环的结构

    while

    其中表达式表示循环条件,执行代码块为循环体

    while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体代码块。

    1. while语句中的表达式一般是关系表达或逻辑表达式,当表达式的值为假时不执行循环体,反之则循环体一直执行。

    2. 一定要记着在循环体中改变循环变量的值,否则会出现死循环(无休止的执行)。

    3. 循环体如果包括有一个以上的语句,则必须用{}括起来,组成复合语句。

    循环结构之do-while循环

    C语言中的do-while循环,一般形式如下:

    do-while

    do-while循环语句的语义是:

    它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句

    注意:mtianyan: 使用do-while结构语句时,while括号后必须有分号。

    循环结构之for循环(一)

    c语言中for循环一般形式:

    for

    它的执行过程如下:

    1. 执行表达式1,对循环变量做初始化;
    2. 判断表达式2,若其值为真(非0),则执行for循环体中执行代码块,然后向下执行;若其值为假(0),则结束循环;
    3. 执行表达式3,(i++)等对于循环变量进行操作的语句;
    4. 执行for循环中执行代码块后执行第二步;第一步初始化只会执行一次。
    5. 循环结束,程序继续向下执行。

    注意:for循环中的两个分号一定要写

    循环结构之for循环(二)

    在for循环中:

    • 表达式1是一个或多个赋值语句,它用来控制变量的初始值
    • 表达式2是一个关系表达式,它决定什么时候退出循环;
    • 表达式3是循环变量的步进值,定义控制循环变量每循环一次后按什么方式变化。
    • 这三部分之间用分号 ; 分开。

    使用for语句应该注意

    1. for循环中的“表达式1、2、3”均可不写为空,但两个分号(;;)不能缺省。
    2. 省略“表达式1(循环变量赋初值)”,表示不对循环变量赋初始值。
    3. 省略“表达式2(循环条件)”,不做其它处理,循环一直执行(死循环)。
    4. 省略“表达式3(循环变量增减量)”,不做其他处理,循环一直执行(死循环)。
    5. 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式
    6. 表达式1和表达式3可以是一个简单表达式也可以是多个表达式以逗号分割。
      6
    7. 表达式2一般是关系表达式逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
    8. 各表达式中的变量一定要在for循环之前定义

    怎么获得一个数的百位,十位和个位

    • 百位数:num/100 可以获得,因为 int 是整数型,小数部分会省略。比如 765/100 的结果是7
    • 十位数:num%100/10 。比如765%100先得到6565/10得到6
    • 个位数:num%10765%10得到5

    循环结构之三种循环比较

    while, do-while和for三种循环在具体的使用场合上是有区别的,如下:

    1. 知道循环次数的情况下更适合使用for循环;
    2. 在不知道循环次数的情况下适合使用while或者do-while循环:
      • 如果有可能一次都不循环应考虑使用while循环
      • 如果至少循环一次应考虑使用do-while循环。

    但是从本质上讲,while,do-while和for循环之间是可以相互转换的。

    循环结构之多重循环

    多重循环就是在循环结构的循环体中又出现循环结构。

    在实际开发中一般最多用到三层重循环

    因为循环层数越多,运行时间越长,程序越复杂,所以一般用2-3层多重循环就可以了。另外不同循环之间也是可以嵌套的。

    多重循环在执行的过程中,外层循环为父循环,内层循环为子循环

    父循环一次,子循环需要全部执行完,直到跳出循环。父循环再进入下一次,子循环继续执行…

    循环多重

    mtianyan: 打印三角形星星堆

    #include <stdio.h>
    int main()
    {
        int i, j, k;
        for(i=1; i<5; i++)
        {
            /* 观察每行的空格数量,补全循环条件 */
            for(j=i; j<5; j++)  
            {
                printf(" ");    //输出空格
            }
            /* 观察每行*号的数量,补全循环条件 */
            for( k=0;k<2*i-1;k++) 
            {
                printf("*");   //每行输出的*号
            }
            printf("\n");     //每次循环换行
        }
        return 0;
    }

    使用for循环打印9×9乘法表

    #include <stdio.h>
    int main() 
    { 
        // 定义相乘数字i,j以及结果result
        int i, j, result;
         for(i=9;i>=1;i--)
         {
            for(j=1;j<=i;j++)
            {
                printf("%d*%d=%d ",i,j,result=i*j);
            }
            printf("\n");
         }
        return 0;
    }

    结束语句之break语句

    那么循环5次的时候,需要中断不继续训练。在C语言中,可以使用break语句进行该操作.

    使用break语句时注意以下几点:

    1. 在没有循环结构的情况下,break不能用在单独的if-else语句中。
    2. 在多层循环中,一个break语句只跳出当前循环。

    结束语句之continue语句

    那么循环5次的时候,需要中断后继续训练。在C语言中,可以使用continue语句进行该操作

    continue语句的作用是结束本次循环开始执行下一次循环。

    break语句与continue语句的区别是:

    break是跳出当前整个循环,continue是结束本次循环开始下一次循环。

    分支结构之switch语句

    switch语句结构如下:

    switch

    mtianyan: switch语句时还应注意以下几点:

    1. 在case后的各常量表达式的值不能相同,否则会出现错误。
    2. 在case子句后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句。
    3. switch后面的表达式语句只能是整型或者字符类型
    4. 在case后,允许有多个语句,可以不用{}括起来。
    5. 各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
    6. default子句可以省略不用。

    mtianyan: switch与if语句的应用(计算是该年的第几天)

    #include <stdio.h>
    
    int main() 
    
    { 
    
        /* 定义需要计算的日期 */
    
        int date = 0;
    
        int year = 2008;
    
        int month = 8;
    
        int day = 8;
    
        switch(month)
    
        {
    
            case 12:date+=30;
    
            case 11:date+=31;
    
            case 10:date+=30;
    
            case 9:date+=31;
    
            case 8:date+=31;
    
            case 7:date+=30;
    
            case 6:date+=31;
    
            case 5:date+=30;
    
            case 4:date+=31;
    
            case 3:
    
            if((year%4==0&&year%100!=0)||year%400==0)
    
            {
    
                date+=29;
    
            }
    
            else
    
            {
    
                date+=28;
    
            }
            case 2:
    
            date+=31;
    
            case 1:
    
            date+=day;
    
            printf("%d年%d月%d日是该年的第%d天",year,month,day,date);
    
            break;
    
            default:
    
            printf("error");
    
            break;
    
        }
    
        return 0;
    
    }

    正确: continue只能用在循环体内

    臭名远扬之goto语句

    C语言中也有这样的语句,就是goto语句,goto语句是一种无条件分支语句.

    goto 语句的使用格式为:

    goto 语句标号;

    mark

    自创函数

    C语言提供了大量的库函数: 比如stdio.h提供输出函数

    自定义函数的一般形式:

    自定义函数

    注意:

    1. [] 包含的内容可以省略,数据类型说明省略,默认是 int 类型函数; 参数省略表示该函数是无参函数,参数不省略表示该函数是有参函数;
    2. 函数名称遵循标识符命名规范;
    3. mtianyan: 自定义函数尽量放在 main 函数之前,如果要放在main函数后面的话, 需要在main函数之前先声明自定义函数,声明格式为:
    [数据类型说明] 函数名称([参数]);

    函数调用

    我们需要用到自定义的函数的时候,就得调用它,那么在调用的时候就称之为函数调用

    在C语言中,函数调用的一般形式为:

    函数名([参数]); 

    注意:

    1. 对无参函数调用的时候可以将[]包含的省略。
    2. []中可以是常数,变量或其它构造类型数据及表达式,多个参数之间用逗号分隔。

    有参与无参

    在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数。

    有参和无参函数的一般形式如下:

    函数

    有参函数和无参函数的唯一区别在于:函数 () 中多了一个参数列表。

    • 有参函数更为灵活,输出的内容可以随着n的改变而随意变动,只要在main函数中传递一个参数就可以了
    • 而在无参函数中输出的相对就比较固定,当需要改动的时候还需要到自定义的方法内改变循环变量的值。

    mtianyan: 形参与实参

    函数的参数分为形参实参两种。

    • 形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。

    就类似小明,说了的话而不实际行动;

    • 实参是在调用时传递该函数的参数。

    就如小刚能实际行动起来。

    函数的形参和实参具有以下特点:

    • 形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。

    函数调用结束返回主调函数后则不能再使用该形参变量。

    • 实参可以是常量、变量、表达式、函数等。

    无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。

    • 在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。

    mark

    函数的返回值

    函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

    函数的返回值要注意以下几点:

    • 函数的值只能通过return语句返回主调函数。

    return语句的一般形式为:

    return 表达式   或者为:  return (表达式);
    • 函数值的类型和函数定义中函数的类型应保持一致。

    notes: 如果两者不一致,则以函数返回类型为准,自动进行类型转换。

    • 没有返回值的函数,返回类型void

    注意:

    void 函数中可以有执行代码块,但是不能有返回值.

    mtianyan: void函数中如果有return语句,该语句只能起到结束函数运行的功能。其格式为: return;

    递归函数(一)

    递归就是一个函数在它的函数体内调用它自身。

    执行递归函数将反复调用其自身,每调用一次就进入新的一层。

    注意递归函数必须有结束条件

    递归函数(二)

    5的阶乘这个例子进行一下剖析,看一看他的运算过程:

    递归

    程序在计算5的阶乘的时候,先执行递推,当n=1或者n=0的时候返回1,再回推将计算并返回。由此可以看出递归函数必须有结束条件。

    递归函数特点:

    1. 每一级函数调用时都有自己的变量,但是函数代码并不会得到复制,如计算5的阶乘时每递推一次变量都不同;
    2. 每次调用都会有一次返回,如计算5的阶乘时每递推一次都返回进行下一次;
    3. 递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
    4. 递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
    5. 递归函数中必须有终止语句。

    一句话总结递归:自我调用且有完成状态

    任务
    猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。

    #include <stdio.h>
    int getPeachNumber(int n)  
    {
        int num;    
        if(n==10)
        {
           return 1;      
        } 
        else
        {
            num = (getPeachNumber(n+1)+1)*2;  
            printf("第%d天所剩桃子%d个\n", n, num); 
        }
        return num;
    }
    int main()
    {
        int num = getPeachNumber(1);
        printf("猴子第一天摘了:%d个桃子。\n", num);
        return 0;
    }

    递归demo。

    有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?

    程序分析:
    利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。

    #include <stdio.h> 
    int dfs(int n) {
        return n == 1 ? 10 : dfs(n - 1) + 2;
    }
    int main() 
    {
    
        printf("第5个人的年龄是%d岁", dfs(5)); 
        return 0;
    } 

    局部与全局

    C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。

    • 局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。在复合语句中也可定义变量,其作用域只在复合语句范围内。
    • 全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。

    变量存储类别

    mtianyan: C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。

    • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
    • 动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。

    C语言中存储类别又分为四类:

    • 自动(auto)、
    • 静态(static)、
    • 寄存器的(register)
    • 外部的(extern)。

    1、用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。如:

    auto

    2、用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。如下为静态局部变量:

    static

    注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。

    3、为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。例如:

    register

    mtianyan: 注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量。

    4、用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。如:

    extern

    内部函数与外部函数

    • 在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
      static [数据类型] 函数名([参数])
    • 这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
    • 在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
      extern [数据类型] 函数名([参数])
    • C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。

    静态变量只赋值一次

    外部函数练习

    hello.c

    #include <stdio.h>
    #include "test.c"   //引用test.c文件
    extern void printLine()     //这里定义的方法对吗?
    {
       printf("**************\n");   
    }
    int main()
    {
        say();
        return 0;
    }

    test.c

    #include <stdio.h>
    void printLine();
    static void say(){
    printLine();
    printf("I love imooc\n");
    printf("good good study!\n");
    printf("day day up!\n");
    printLine();
    }

    对于hello.c来说,直接引入了test.c文件。那么就可以调用testc中的static方法say()
    而对于test.c并没有引入,可以通过声明来调用另一个源文件中暴露出来的方法。

    综合练习

    北京市出租车打车计费规则如下:
    1. 每公里单价计费2.3元
    2. 起步价13元(包含3公里)
    3. 晚上23点(含)至次日凌晨5点(不含)打车,每公里单价计费加收20%。
    4. 每次乘车加收1元钱的燃油附加税。
    小明每天上下班都要打车,公司和家的距离为12公里,上午上班时间为9点,下午下班时间为6点。
    请编写一个小程序计算小明每天打车的总费用。

    #include <stdio.h>
    
    float taxifee(int clock,int miles)
    {
        float money;
        if(miles<=3)
        {
            money=14;
            printf("费用为14\n");
        }
        else
        {
            if(clock>=23 || clock<5)
            {
                money=13+1+2.3*(miles-3)*1.2;
                printf("夜间车费为:%f\n",money);
            }
            else
            {
                money=13+1+2.3*(miles-3);
                printf("日间车费为:%f\n",money);
            }
        }
    
        return money;    
    }
    int main()
    {
        printf("打的总费用:%.1f\n",taxifee(9,12)+taxifee(18,12));
        return 0;
    }

    数组初体验

    程序中也需要容器,只不过该容器有点特殊,它在程序中是一块连续的,大小固定并且里面的数据类型一致的内存空间,它还有个好听的名字叫数组。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购
    物袋中的物品是按一定顺序放置的。

    我们来看一下如何声明一个数组:

    数据类型 数组名称[长度];

    数组只声明也不行啊,看一下数组是如何初始化的。说到初始化,C语言中的数组初始化是有三种形式的,分别是:

    1. 数据类型 数组名称[长度n] = {元素1,元素2…元素n};
    2. 数据类型 数组名称[] = {元素1,元素2…元素n};
    3. 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n;

    我们将数据放到数组中之后又如何获取数组中的元素呢?

    获取数组元素时: 数组名称[元素所对应下标];

    如:初始化一个数组 int arr[3] = {1,2,3}; 那么arr[0]就是元素1。

    注意:

    1. 数组的下标均以0开始
    2. 数组在初始化的时候,数组内元素的个数不能大于声明的数组长度;
    3. mtianyan: 如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;
    4. 在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。

    数组的遍历

    数组就可以采用循环的方式将每个元素遍历出来,而不用人为的每次获取指定某个位置上的元素,例如我们用for循环遍历一个数组:

    循环遍历数组

    注意以下几点:

    1. 最好避免出现数组越界访问,循环变量最好不要超出数组的长度.
    2. C语言的数组长度一经声明,长度就是固定,无法改变,并且C语言并不提供计算数组长度的方法

    由于C语言是没有检查数组长度改变或者数组越界的这个机制,可能会在编辑器中编译并通过,但是结果就不能肯定了,因此还是不要越界或者改变数组的长度

    c语言获取数组长度

    int length = sizeof(arr)/sizeof(arr[0]);

    数组作为函数参数

    数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数:

    1. 整个数组当作函数参数,即把数组名称传入函数中,例如:

    数组参数

    1. 数组中的元素当作函数参数,即把数组中的参数传入函数中,例如:

    数组元素函数参数

    数组作为函数参数时注意以下事项:

    1. 数组名作为函数实参传递时,函数定义处作为接收参数的数组类型形参既可以指定长度也可以不指定长度。
    2. 数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致。

    mtianyan: 数组的应用(一)[冒泡排序]

    以升序排序为例冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。就像小学排队时按大小个排一样,将一个同学拉出来和后面的比比,如果高就放后面,一直把队伍排好。

    #include <stdio.h>
    int main()
    {
        double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
        int i,j;
        printf("\n************排队前*************\n");
        for(i=0;i<10;i++)
        {
            if(i != 9)   
                printf("%1.2f, ", arr[i]);  //%1.2f表示小数点前一位,小数点后精确到两位
            else
                printf("%1.2f", arr[i]);    //%1.2f表示小数点前一位,小数点后精确到两位
        }
        for(i=8; i>=0; i--)
        {
            for(j=0;j<=i;j++)
            {
                if( arr[j]>arr[j+1])      //当前面的数比后面的数大时
                {
                    double temp;    //定义临时变量temp
                    temp=arr[j];//将前面的数赋值给temp
                    arr[j]=arr[j+1];             //前后之数颠倒位置
                    arr[j+1]=temp;//将较大的数放在后面    
                }                 
            }                
        }
        printf("\n************排队后*************\n");
        for(i=0;i<10;i++)
        {
            if(i != 9)   
                printf("%1.2f, ", arr[i]);  //%1.2f表示小数点前一位,小数点后精确到两位     
            else
                printf("%1.2f", arr[i]);    //%1.2f表示小数点前一位,小数点后精确到两位
        }
        return 0;    
    }

    数组的应用(二)[数组查找功能]

    当我们购物之后,拎着购物袋回到家,会一一检查购物袋中的物品看是否缺少或者都是想购之物。

    那么应用到程序中,可以使用数组查找功能,看看是否存在该数据,如果存在并返回该元素的下标。

    #include <stdio.h>
    int getIndex(int arr[5],int value)
    {
        int i;
        int index;
        for(i=0;i<5;i++)
        {
           /* 请完善数组查询功能 */
           if(arr[i]==value)
            {
                index=i;
                break;
            }  
           index=-1;
        }
        return index;
    }
    
    int main()
    {
        int arr[5]={3,12,9,8,6};
        int value = 8;
        int index = getIndex(arr,value);      //这里应该传什么参数呢?
        if(index!=-1)
        {
            printf("%d在数组中存在,下标为:%d\n",value,index);             
        }
        else
        {
            printf("%d在数组中不存在。\n",value);    
        }
        return 0;    
    }

    字符串与数组

    C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:

    1. char 字符串名称[长度] = “字符串值”;
    2. char 字符串名称[长度] = {‘字符1’,’字符2’,…,’字符n’,’\0’};

    注意:

    1. []中的长度是可以省略不写的;
    2. 采用第2种方式的时候最后一个元素必须是’\0’,’\0’表示字符串的结束标志;
    3. 采用第2种方式的时候在数组中不能写中文。
      在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。

    mtianyan:字符串函数

    常用的字符串函数如下(strlen,strcmp,strcpy,strcat,atoi):

    字符串函数

    使用字符串函数注意以下事项:

    1. strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的。比如:

    strlen

    1. strcmp()在比较的时候会把字符串先转换成ASCII码再进行比较,返回的结果为0表示s1和s2的ASCII码相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ASCII码小,例如:

    strcmp

    1. strcpy()拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝,比如:

    strcpy

    1. strcat在使用时s1与s2指的内存空间不能重叠,且s1要有足够的空间来容纳要复制的字符串,如:

    strcat

    多维数组

    多维数组的定义格式是:
    数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n];

    多维数组

    定义了一个名称为num,数据类型为int的二维数组。其中第一个[3]表示第一维下标的长度,就像购物时分类存放的购物;第二个[3]表示第二维下标的长度,就像每个购物袋中的元素。

    矩阵

    多维数组的初始化与一维数组的初始化类似也是分两种:

    1. 数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n] = {{值1,..,值n},{值1,..,值n},…,{值1,..,值n}};
    2. 数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n]; 数组名称[下标1][下标2]…[下标n] = 值;

    多维数组初始化要注意以下事项:

    1. 采用第一种始化时数组声明必须指定列的维数。mtianyan: 因为系统会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数;
    2. 采用第二种初始化时数组声明必须同时指定行和列的维数。

    二维数组定义的时候,可以不指定行的数量,但是必须指定列的数量

    二维数组定义的时候,可以不指定行的数量,但是必须指定列的数量。

    多维数组的遍历

    多维数组也是存在遍历的,和一维数组遍历一样,也是需要用到循环。不一样的就是多维数组需要采用嵌套循环

    注意:多维数组的每一维下标均不能越界

    综合练习:

    #include <stdio.h>
    #define N 10
    //打印分数 
    void printScore(int score[])
    {
        int i;
        printf("\n");
        for(i=0;i<N;i++)
        {
            printf("%d ",score[i]);               
        }
        printf("\n");     
    }
    //计算考试总分 
    int getTotalScore(int score[])
    {
        int sum = 0;
        int i;
        for(i=0;i<N;i++)
        {
            sum+=score[i];                
        } 
        return sum;
    }
    //计算平均分 
    int getAvgScore(int score[])
    {
        return getTotalScore(score)/N;   
    }
    //计算最高分 
    int getMax(int score[])
    {
        int max = -1;
        int i;
        for(i=0;i<N;i++)
        {
            if(score[i]>max)
            {
                max = score[i];              
            }                
        } 
        return max;
    }
    //计算最低分 
    int getMin(int score[])
    {
        int min =100;
        int i;
        for(i=0;i<N;i++)
        {
            if(score[i]< min)
            {
                min = score[i];              
            }                
        } 
        return min;
    }
    //分数降序排序 
    void sort(int score[])
    {
        int i,j;
        for(i=N-2;i>=0;i--)
        {
            for(j=0;j<=i;j++)
            {
                if(score[j]<score[j+1])
                {
                    int temp;
                    temp = score[j];
                    score[j] = score[j+1]; 
                    score[j+1]=temp;                  
                }                 
            }                   
        }
        printScore(score);     
    }
    
    int main()
    {
        int score[N]={67,98,75,63,82,79,81,91,66,84};
        int sum,avg,max,min;
        sum = getTotalScore(score);
        avg = getAvgScore(score);
        max = getMax(score);
        min = getMin(score);
        printf("总分是:%d\n",sum);
        printf("平均分是:%d\n",avg);
        printf("最高分是:%d\n",max);
        printf("最低分是:%d\n",min);
        printf("----------成绩排名---------\n");
        sort(score);
        return 0;    
    }
    展开全文
  • 《狂人C-程序员入门必备》

    千次下载 热门讨论 2020-07-30 23:31:06
    这本书对C程序的入门很有帮助,书中深入浅出,对初学者来说简直就是一本活教材。同时,书中也为以后深入编程中会遇到的问题做了详细的概述,并结合实例,让人一目了然。要想学好C语言,并且为以后的编程打下一个良好...
  • C#急速入门

    万人学习 2019-03-11 09:46:58
    1.C#急速入门 2.C#之面向对象 观看地址:https://edu.csdn.net/course/detail/9447 3.C#高级进阶(期待中……) 4.程序员内功修炼 - 数据结构(C#) 观看地址:https://edu.csdn.net/course/detail/10505 5.Unity百家...
  • 真小白入门之Github

    万次阅读 多人点赞 2020-04-17 11:23:18
    真小白入门之Github ---之前入门python的时候真的是千辛万苦的踩教程的坑,起初写python入门教程一个是为了记录另一个是为了可以帮到其他需要帮助的人。在真的接到大家被帮助的评论的时候真的炒鸡开心,github我也...

    真小白入门之Github

    -----之前入门python的时候真的是千辛万苦的踩教程的坑,起初写python入门教程一个是为了记录另一个是为了可以帮到其他需要帮助的人。在真的接到大家被帮助的评论的时候真的炒鸡开心,github我也刚刚开始入门,希望能帮到一同不停踩坑又打开这篇博客的你(篇幅较长,谨慎踩雷)!
    -----至于Github的介绍我觉得没有什么比百度更全面的了,都要入门了总该知道这是干啥的吧(莫名觉得自己很厉害的样子٩(๑❛ᴗ❛๑)۶)
    -----然后我是真的真的第一次接触github所以有什么不对的地方请多多指教!


    ####一、注册
    -1.打开https://github.com/
    打开就是个注册页面,我英文不太好(如此理直气壮ヾ(◍°∇°◍)ノ゙),如果恰好你也英文不太好的话可以用谷歌自带的翻译,很好用。我的谷歌因为其他的一些工作需要必须用低版本的目前翻译不了(其实也不知道是不是因为版本低),如果又恰好你的也不能用谷歌翻译,就用火狐自己下个翻译插件,哪里不懂点哪里(当然能好好学英语更好了)
    这里写图片描述
    密码需要至少包含一位小写字母,至少七位
    -2.点完sign up for GitHub就到这个(验证账户)页面
    这里写图片描述
    -3.点击create an account(注册填入的邮箱这时应该也收到邮件了)
    这里写图片描述
    用我超凡的英语能力翻译一下解释一下这个页面的选择项
    choose your personal plan(选择你的个人计划)
    单选选项:
    Unlimited public repositories for free (是免费库大家都可以看到你的代码,我选的这个)
    Unlimited private repositories for KaTeX parse error: Expected 'EOF', got '#' at position 1019: …,到这里我们真的注册成功了。 #̲###二、在github上创建… ssh-keygen -t rsa -C “你注册github时的邮箱地址”
    这里真的真的有重点,我真的真的踩了很多坑!
    ssh-keygen后面有空格
    -t后面有空格
    rsa后面有空格
    这里写图片描述
    如果出现上面的界面就是成功了,意思是你接下来是问你生成的key要保存在哪个路径,如果直接敲回车就是默认路径/c/Users/Administrator/.ssh/id_rsa.我是直接敲的回车就存在这里。
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    接着呢就会提示你输入密码,按两次回车就可以了我们不输入密码,这样我们每次提交或者下载代码的时候就不用输入密码了,当然你也可以输入密码,这样每次操作都需要密码(注意这个密码跟你登录github的密码是不同的哦)
    2.出现下面的界面就是告诉你你的key存在某某路径,就是你设置的那个路径
    这里写图片描述
    3.我是存在默认路径下,现在我们就去找到它
    这里写图片描述
    4.打开id_rsa.pub,复制里面的全部内容
    5.打开我们的github,鼠标移到头像的地方,选择settings
    这里写图片描述
    6.选择红框圈中的SSH and GPG keys
    这里写图片描述
    7.选择new ssh key,创建一个新的key
    这里写图片描述
    8.填入自己的标题,随便都可以的。然后将在id_rsa.pub里的全部内容粘贴在key下面的框内,填好后单击add ssh key
    这里写图片描述
    9.这样我们就将本地库与github库用ssh key连接起来了
    下图就是我们添加的key(没错我的key就叫keyone(~ ̄▽ ̄)~ )
    这里写图片描述
    连接起来以后我们就要测试一下是不是真的连起来了
    ####5.测试ssh key
    1.输入 ssh -T git@github.com (注意不是输入自己的邮箱哦)
    2.接下来会提示你
    The authenticity of host ‘github.com (xxx.xxx.xxx.xxx)’ can’t be established.
    RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx.
    Are you sure you want to continue connecting (yes/no)?
    输入yes即可
    3.如果你设了密码的话会提示输入密码吧,如果和我一样没有设密码就会出现以下提示You’ve successfully authenticated, but GitHub does not provide shell access这样就成功了
    这里写图片描述
    4.输入
    git config --global user.name “你github的名字” (注意前边是“- -global”,)
    git config --global user.email “你的github邮箱地址”
    5.接下来就要操作把我们一开始在github建的库搞到本地,方便我们进行操作
    5.1、我习惯把我的东西放在f盘,所以我在f盘建立了一个文件夹专门存储在github下载下来的库,输入f:/Github,这个自由选择哦
    这里写图片描述
    5.2、然后我们去github把我们创建的库的地址复制下来
    这里写图片描述
    5.3、输入git clone https://xxxxxxxxxxx (后面是你复制下来的地址)
    5.4、这样我定位的F盘Github文件夹下就有个叫test的文件夹了,这个其实就是一开始我们在github创建的那个叫test的库
    这里写图片描述
    6.我们可以试着在这个文件夹里创建一个文件并上传到我们的github的test库中
    这里写图片描述
    6.1、我们将文件位置定位到test中,然后输入ls来查看test文件夹中有什么文件
    这里写图片描述
    可以看到有我们创建的文本文档tet.txt
    6.2、输入 git add tet.txt
    这里写图片描述
    6.3、输入 git commit -m “注释”(这里因为我之前创建了一个叫tet的所以我又创建了一个叫tes的文件夹)
    这里写图片描述
    6.4、输入git push origin master,会出现输入邮箱地址的提示
    这里写图片描述
    输入后会弹出输入密码的框,输入github的密码
    这里写图片描述
    就会出现以上图中的提示,这时候我们就成功把文件提交到github上了
    7.我们一起去github看看我们从本地上传到github的文件
    如果你还停留在某个页面因为英文不好不知道点哪里,一头雾水找不到我们的库的时候,点下图的小黑猫就可以
    这里写图片描述
    然后我们就到了好像我们主页的地方的样子,就看见左下角的小红框处有我们一开始创建的那个叫test的库,是它是它就是它我们的英雄小哪吒!
    这里写图片描述
    单击后我们就到了这个页面,发现了我们在本地上传的tes.txt以及我瞎写的注释
    这里写图片描述
    8.这时候其实我们真的成功了,我们可以总结一下
    以后我们就先创建一个库把它档到本地,然后将我们的代码放到库的对应的文件夹中,然后git add ,git commit -m "注释注释注释啊 " 、最后git push origin master,我们就能将本地的代码提交到github库上了
    至此这篇教程就结束了,我是第一次接触github,所以可能会有很多不对的地方呀(o゚▽゚)o ,你可以批评我但是不可以骂我,嗯,标题的真小白当然就是指的我啦,希望大家愉快的入门

    展开全文
  • LaTex 入门

    万次阅读 多人点赞 2019-02-19 12:40:06
    LaTex简介 TeX 是由Donald Knuth创造的基于底层编程语言的电子排版系统[1](TEX是Honeywell公司在1980年为其Text Executive文本处理系统注册的商标,它与 TeX是两回事)。TeX能够对文档的排版进行非常精细的操作,...

    LaTex简介

    TeX 是由Donald Knuth创造的基于底层编程语言的电子排版系统[1](TEX是Honeywell公司在1980年为其Text Executive文本处理系统注册的商标,它与 TeX是两回事)。使用TeX可以对版面做精细的操作,生成精美的文档。TeX提供版面编辑的底层命令,但是使用时操作复杂,工作效率不高. TeX允许用这些底层命令定义出可以执行复杂操作的扩展命令. LaTex是由Leslie Lamport开发的的TeX扩展命令集合[5]。LaTexj通过整合常用的版面设置操作,降低排版的工作量和难度。 LaTex 强大的排版功能,特别是对科技文档的支持,已经使它成为撰写科研论文的事实上的标准[5]。

    TeX系统生成的是DVI(Device Independent)文件。随着pdf文件格式的流形,LaTex在支持DVI文件格式的同时也可生成PDF格式文件。

    TeX在不同的硬件和操作系统上有不同的实现版本。目前Unix/Linux上常用的TeX系统是teTeX,Windows中有MiKTeX和fpTeX。CTeX是中文套装[4]。下面仅简要介绍在使用LaTex中一些常见问题。

    LaTex 与 Word

    Word 是微软公司推出的一款文档和文字处理软件,它也具有较强的排版功能。与LaTex相比,Word最大优势是其"所见既所得"的特点,因而入门门槛低。另一方面Word的语法和拼写错误检查等能力比LaTex强。

    LaTex作为一款排版系统,格式控制、公式编辑方面比Word好用。LaTex生成的文档比Word文档更美观。LaTex的入门门槛比较高,使用LaTex不仅要编辑文本,整理文档格式,还要处理编译过程中出现的bugs,如果使用中文,更要注意GBK,UTF-8等文档编码这些琐碎问题。另外LaTex做的幻灯片没有Word做出来的好看。

    LaTex 和 Word两款软件针对的用户群体不一样,在文字处理和文档排版方面有不同的理念。 两者在功能上有许多重合之处,各有优势和不足。

    LaTex 命令架构

    Tex环境中,字符,图片等内容都放在隐形的盒子(box)容器内。这些盒子根据Tex和Latex的默认规则以及相关命令粘结成更大的盒子。字符组合成单词,单词组合出语句。语句在放入页面盒子时,根据版面格式分解成行列。

    版面格式布置盒子在页面中的位置,字符等文档内容的位置是由它们在盒子中相对坐标确定。例如,一个字符盒子如下图[20]所示。
    在这里插入图片描述[]1
    width是盒子的宽度。基线(baseline)将盒子分割成上下两部分。height和depth分别确定这两部分的高度。 字符盒子基于基线相互粘结。

    LaTex提供不同层次的命令帮助用户设置文档版面。它最底层是大约300个TeX基础命令,例如 \hbox, \vskip等。

    LaTex的核心是一组建立在TeX基础命令上的宏命令,例如 \documentclass, \usepackage, \begin.等。

    再往上就是类文件,例如foo.cls等。当\documentclass{foo}时,就是加载foo.cls文件。

    再往上是扩展包, 例如pic.sty等。我们可以使用\usepackage命令加载扩展包。

    安装

    Latex的衍生版本众多,中文环境中常用的时CTex。下载地址为

    http://www.ctex.org/CTeXDownload
    

    Ctex套装中自带Latex编辑器WinEdt

    LaTex文件格式简介

    TeX文件样例

    下面是一个TeX文件的简单样例:

    This is an example of TeX file format.
    
    An example of mathematical formulaion: $ ds = \sqrt{dx^2 + dy^2} $
    \bye 
    

    编译说明:
    前提: 已经正确安装TeX编译环境,例如:LaTeX
    操作步骤:

    1. 将上述内容保存在一文本文件中,例如: foo.tex.
    2. 在Windows控制台环境中,使用
    tex foo.tex
    

    既可生成相应的foo.dvi文件。

    LaTex文件样例

    下面一个样例[3]展示了LaTex文件的基本结构:

    \documentclass[12pt, letterpaper]{article}
    \usepackage[utf8]{inputenc}
    \usepackage{comment} 
    
    % Title
    \title{Document Title}
    \author{Nobody \thanks{Somebody}}
    \date{Some Date}
     
    \begin{document}
    
    \begin{titlepage}
    \maketitle
    \end{titlepage}
    
    \tableofcontents
    
    \begin{abstract}
    This is a simple paragraph at the beginning of the 
    document. A brief introduction about the main subject.
    \end{abstract}
    
    First document. This is a simple example, with no 
    extra parameters or packages included.
     
    % Comments 
    \begin{comment}
    This text won't show up in the compiled pdf
    this is just a multi-line comment. Useful
    to, for instance, comment out slow-rendering
    while working on the draft.
    \end{comment}
    
    \end{document} 
    

    LaTex文件结构

    一个LaTex文件分为两个部分:导言和正文。 在\begin{document}和\end{document }之间的是文档的正文内容。 在\begin{document}之前的命令称为preamble(导言)。 在preamble中通常定义文档的格式、语言等。上文所示LaTex文档其结构如下图所示:
    这里写图片描述

    文件拆分

    当文档内容的结构复杂,需要分别保存在多个LaTex文件时,可以使用\input 或\include命令构建文档结构。例如:

    \input{filename1}
    

    或者

    \include{filename1}
    

    [6]"\input{filename} imports the commands from filename.tex into the target file; it’s equivalent to typing all the commands from filename.tex right into the current file where the \input line is."

    [6]"\include{filename} essentially does a \clearpage before and after \input{filename}, together with some magic to switch to another .aux file, and omits the inclusion at all if you have an \includeonly without the filename in the argument. This is primarily useful when you have a big project on a slow computer; changing one of the include targets won’t force you to regenerate the outputs of all the rest."

    [6]"\include{filename} gets you the speed bonus, but it also can’t be nested, can’t appear in the preamble, and forces page breaks around the included text."

    导言部分 LaTex命令简介

    preamble(导言)部分通常用于定义文档的格式、语言等。常用的LaTex命令主要有\documentclass,\usepackage等。下面分别对几个常用的命令做简单介绍。

    \documentclass

    \documentclass命令是用于设置LaTex文件所生成文档的格式. 其命令语法如下所示:

    \documentclass[options]{class} 
    

    常用的文档格式有:

    Class 简介
    article 科技论文,报告,软件文档等
    IEEEtran IEEE Transactions 格式.
    proc 法律文书
    report 长篇报告(如:学位论文)
    book 书籍
    slides 幻灯片
    memoir 传记
    letter 信件
    beamer PPT

    文档格式修正项

    Options 简介
    12pt 文档正文使用的字体大小(默认为10pt)
    a4paper, letterpaper 页面规格(默认为letterpaper或a4paper)
    fleqn Typesets displayed formulas left-aligned instead of centered.
    leqno Places the numbering of formulas on the left hand side instead of the right.
    titlepage, notitlepage Specifies whether a new page should be started after the document title or not. The article class does not start a new page by default, while report and book do.
    twocolumn Instructs LaTeX to typeset the document in two columns instead of one.
    twoside, oneside Specifies whether double or single sided output should be generated. The classes article and report are single sided and the book class is double sided by default. Note that this option concerns the style of the document only. The option twoside does not tell the printer you use that it should actually make a two-sided printout.
    landscape Changes the layout of the document to print in landscape mode.
    openright, openany Makes chapters begin either only on right hand pages or on the next page available. This does not work with the article class, as it does not know about chapters. The report class by default starts chapters on the next page available and the book class starts them on right hand pages.
    draft makes LaTeX indicate hyphenation and justification problems with a small square in the right-hand margin of the problem line so they can be located quickly by a human. It also suppresses the inclusion of images and shows only a frame where they would normally occur.

    例如:

    \documentclass[12pt, a4paper]{article}
    

    意思是正文字体大小为12pt, 页面规格是A4, 使用article文档格式.

    \usepackage

    \usepackage命令设置在编译LaTex文件时要导入的扩展包,例如:

    \usepackage[utf8]{inputenc}
    
    \usepackage{comment}
    

    封面格式

    \title{Document Title}
    \author{Nobody \thanks{Somebody}}
    \date{Some Date}
    

    设置所要生成文档的封面内容: 文档名,作者,日期等(这只是设置了封面格式,生成封面的是\maketitle命令)。

    注释

    % Comments 
    

    从百分号%开始到这一个行结束的部分是LaTex文件的注释内容,不在编译后生成的pdf文档中显示。
    在\begin{comment}和\end{comment }之间也不在编译后生成的pdf文档中显示。

    保留字符

    # $ % ^ & _ { } \
    

    这些字符(reserved characters)在Latex中有特殊的意义,要想在生成的文档中显示这些字符,Latex文档中这些字符前加反斜杠"\\backslash\" :

    \#   \$   \%   \^   \&   \_  \{   \} 
    

    因为两个反斜杠"\\"在Latex中是换行命令,可使用

    $\backslash$
    

    输出反斜杠\\backslash\

    ~波浪线(tidle)在LaTeX中是插入空格命令,可用数学公式环境的$ \sim $向TeX文档中插入波浪线.

    正文部分LaTex命令模块简介

    生成封面

    \begin{titlepage}
    \maketitle
    \end{titlepage}
    

    按照在preamble中设置的封面格式生成文档封面

    生成目录

    \tableofcontents
    

    生成文档目录

    页码

    设置页码数字类型

    \pagenumbering{digit type}
    

    其中digit type有:

    • arabic      阿拉伯数字(1,2,3,4),默认样式
      
    • roman      小写罗马数字(i,ii,iii,iv)
      
    • Roman     大写罗马数字(I,II,III,IV)
      
    •   alph         小写拉丁字母(a,b,c,d)
      
    •   Aiph         大写拉丁字母(A,B,C,D)
      

    设置页码可使用

    \setcounter{page}{page number}
    

    如果想让当前页不标页码,可使用

    \thispagestyle{empty}
    

    例如,如果在封面不标记页码,目录页使用小写罗马数字标记页码,正文部分使用阿拉伯数字标记页码

    \begin{document}
    
    %% Making title pate
    \begin{titlepage}
    \maketitle
    \thispagestyle{empty} 
    \end{titlepage}
    
    %% Contents
    \pagenumbering{roman}
    \tableofcontents
    
    \newpage
    \pagenumbering{arabic}
    \setcounter{page}{1} 
    

    版面设置

    空白

    下面是LaTex插入空格命令小结[24]

    \,    inserts a \thinspace (equivalent to .16667em) in text mode, 
          or \thinmuskip (equivalent to 3mu) in math mode;
    \!    inserts a negative \thinmuskip in math mode;
    \>    inserts \medmuskip (equivalent to 4.0mu plus 2.0mu minus 4.0mu) in math mode;
    \;    inserts \thickmuskip (equivalent to 5.0mu plus 5.0mu) in math mode;
    \:    is equivalent to \> (see above);
    \enspace   inserts a space of .5em in text or math mode;
    \quad      inserts a space of 1em in text or math mode;
    \qquad     inserts a space of 2em in text or math mode;
    \kern <len>      inserts a skip of <len> (may be negative) in text or math mode (a plain TeX skip);
    \hskip <len>   (similar to \kern);
    \hspace{<len>}   inserts a space of length <len> (may be negative) in math or text mode (a LaTeX \hskip);
    \hphantom{<stuff>}   inserts space of length equivalent to <stuff> in math or text mode. 
          Should be \protected    when used in fragile commands (like \caption and sectional headings);
    \     inserts what is called a "control space" (in text or math mode);
        (直接键入空格) inserts an inter-word space in text mode (and is gobbled in math mode). 
        Similarly for \space and { }.
    ~     inserts an "unbreakable" space (similar to an HTML &nbsp;) (in text or math mode);
    \hfill    inserts a so-called "rubber length" or stretch between elements (in text or math mode). 
              Note that you may need to provide a type of anchor to fill from/to;  
    

    段落行间距

    使用{setspace}扩展包. 例如

    \documentclass[UTF8]{article}
    \usepackage{setspace}
    
    \begin{document}
    
    %%双倍行间距 
    \begin{spacing}{2.0}
    段落内容。
    \end{spacing}
    
    %%单倍行间距 
    \begin{spacing}{1.0}
    段落内容。
    \end{spacing}
    
    \end{document}
    

    段落间空白

    \hspace{1cm}
    \vspace{5pt}
    

    居中

    \begin{center} 
    ...
    \end{center}
    

    左对齐

    \begin{flushleft}
    ...
    \end{flushleft}
    

    右对齐

    \begin{flushright}
    ...
    \end{flushright}
    

    样例

    \begin{center} 
    登鹳雀楼 \\
    ~~~~~~~~ {\footnotesize 王之涣} \\
    \hfill \\ 
    白日依山尽 \\
    黄河入海流 \\ 
    欲穷千里目 \\
    更上一层楼 \\
    \end{center}
    
    \begin{flushleft}
    这一行在左侧 \\ 
    这一行也要在左侧 \\
    \end{flushleft}
    
    \begin{flushright}
    这一行在右侧  \\ 
    这一行也要在右侧  \\
    \end{flushright}
    

    效果如下图所示
    在这里插入图片描述

    verbatim 居中显示

    verbatim环境(抄录环境)使LaTex源文件的内容原样呈现于最终文档。这些内容不受center, flushleft, flushright等命令的影响。若想让verbatim环境中内容居中显示,需要使用 verbatimbox等扩展包.
    首先在导言区加入:

    \usepackage{verbatimbox}
    

    用verbbox环境界定显示内容,然后可通过\theverbbox引用这个verbbox环境对象。

    \begin{verbbox}
    #include <stdio.h>
    
    void main()
    {
        printf("Hello World! \n");
    }
    \end{verbbox}  
    
    \begin{figure}[ht]
      \centering            %% 居中显示 
      \theverbbox 
    \end{figure}
    

    同理,也可以使用flushleft, flushright 等命令实现左对齐和右对齐等效果。

    线框

    使用\fbox给文字加线框; 使用\parbox给段落添加线框.

    \fbox{A}
    
    \hfill 
    
    \fbox{
      Use $\backslash fbox$ environment for creating line box.
    }
    
    \begin{center}
    \fbox{
      Box lies in center. However  
    }
    \end{center}
    
    \begin{center}
    \fbox{ 
      \parbox{\textwidth}{ 
        \begin{center}
          This is a \\
          Full size box  \\
        \end{center}
      } 
    }
    \end{center}
    
    \begin{center}
    \fbox{ 
      \parbox{0.4\textwidth}{ 
        \begin{center}
          This is a \\
          Small size box  \\
        \end{center}
      } 
    }
    \end{center}
    

    显示效果如图所示:
    在这里插入图片描述

    图片插入及引用

    下面样例展示如何在文档中插入图片并在文中通过图片编号引用图片。

    \usepackage[pdftex]{graphicx}
    % 设置图片文件存放路径
    \graphicspath{{../figures}  
     
    \begin{document}
    % 在正文中引用图片时使用\ref 
      In Figure \ref{fig:foo} 
    \begin{figure}
    %设置对齐格式
    \centering   %图片居于页面中部
    %指定图形大小和图形名称  
    \includegraphics [width=0.8,height=2.5]{foo.png} 
    %设置标题 
    \caption{Foo} 
    %设置图形引用名称
    \label{fig:foo} 
    \end{figure}
     
    \end{document}
    

    有关插入图形的更多设置请参阅[9]

    表格

    Latex中使用tabular环境定义表格, 例如[15]

    \begin{tabular}{llr}
    \hline
    \multicolumn{2}{c}{Item} \\
    \cline{1-2}
    Animal    & Description & Price (\$) \\
    \hline
    Gnat      & per gram    & 13.65      \\
              & each        & 0.01       \\
    Gnu       & stuffed     & 92.50      \\
    Emu       & stuffed     & 33.33      \\
    Armadillo & frozen      & 8.99       \\
    \hline
    \end{tabular}
    

    表格对齐格式

    首先要在第一行设置表格中各个单元对齐格式。

    \begin{tabular}[pos]{table spec}  
    

    table spec选项

    选项 释意 样例
    l 左对齐 {l c r}
    c 居中 {l c r}
    r 右对齐 {l c r}
    p{‘width’} 置顶 {l c p{5cm}}
    m{‘width’} 纵向居中 {l c m{5cm}}
    b{‘width’} 置底 {l c b{5cm}}
    | 纵向分隔线 {l | c |r }
    || 纵向双分割线 {|| l | c |r ||}

    在table spec选项中可使用 >{\format} 设置字体

    pos 选项通常用于设置表格单元中显示内容相对于其基线的纵向位置.一般不使用这个选项.

    从第二行开始设置表格每一行中列向单元的数量,对齐格式等相关配置.

    选项 释意
    & 列分隔
    \ 新列
    \hline 画一条水平线
    \newline 在列中换行
    \cline{i-j} 在水平方向从第 i 列 到 第 j 列画横线段

    表格中行间距

    \arraystretch 命令可以设置行间距(默认值是1.0),例如

    \renewcommand{\arraystretch}{1.5}
    

    使用\noalign{\smallskip} 也可以改变行间距. \smallskip 命令等价于\vspace{smallskipamount}。smallskipamount的大小依赖于文档类型. 与\smallskip 命令类似的还有\medskip,\bigskip . 另外,也可以在每一行尾的 换行符 后设置行间距。 例如

    \begin{tabular}{c}
    \hline
    Normal  \\
    \hline  
      smallskip(under the characters)  \\ \noalign{\smallskip} 
    \hline  \noalign{\smallskip} 
    smallskip(over the characters) \\ 
    \hline  \noalign{\medskip} 
     medskip  \\
    \hline  \noalign{\bigskip}
     bigskip  \\
    \hline
      0.5cm \\[0.5cm]  
    \hline   
    \end{tabular}
    

    效果如图所示
    在这里插入图片描述

    三线表样例
    Latex中默认的线条宽度是0.4pt, 如果想要使用粗一点的线条,可以使用 booktabs环境包. 这需要在Latex文档的导言部分添加命令:

    \usepackage{booktabs}  
    

    样例如下所示

    \begin{table}[h]
    \centering
    \begin{tabular}{ccc}
    \toprule
    Name & ID & Gender\\
    \midrule
    Tom & 001& Male\\
    Rose & 002& Female\\
    \bottomrule
    \end{tabular}
    \caption{这是一张三线表}
    \end{table} 
    

    其中\toprule 命令是画出表格最上边的一条粗实线(rule). \bottomrule命令是画出表格最下边的一条粗实线.
    \midrule 命令是画出表格中间的细实线。 效果如下图所示:
    在这里插入图片描述

    有关表格的更多设置请参阅[15]

    浮动体

    文档中通常需要插入图片或表格以辅助正文表述。图片和表格的内容丰富,一般在一个页面中纵跨多行,并伴有标题等辅助性内容。LaTex将一个图片或表格当作单独整体并定义为浮动体。
    为了避免不合理的分页,它们的显示位置不受限于上下文坐标, LaTeX根据相应的算法插入到合适的位置。为了达到理想的排版效果,LaTeX算法可接受位置描述符等参数调配图表位置。位置描述符有以下几种:

    描述符 期望位置
    h 将浮动体放在这里(Latex会根据其排版美学做调整) Place the float here, i.e., approximately at the same point it occurs in the source text (however, not exactly at the spot) )
    t 将浮动体放在页的顶部 Position at the top of the page.
    b 将浮动体放在页的底部 Position at the bottom of the page.
    p 将浮动体单独成页 Put on a special page for floats only.
    ! 忽略LaTeX的排版美学内置参数 Override internal parameters LaTeX uses for determining “good” float positions.
    H 将浮动体强制放在这里 Places the float at precisely the location in the LaTeX code. Requires the float package,i.e., \usepackage{float}. This is somewhat equivalent to !ht.

    画图

    Latex中的绘图工具有picture扩展包, tikz扩展包等. 其中picture扩展包是标准扩展包。正文中可直接使用picture包命令绘图,而使用tikz扩展包时则需要在导言中添加

    \usepackage{tikz}
    

    ( picture 和 CJK一起使用能正常编译. tikz 和CJK两个扩展包之间有兼容问题. 使用tikz 和CJKutf8的utf8编码文件能正常编译, 但不能在tikz环境中直接中文. 可以通过\mbox{}在tikz环境中插入中文字符 )
    本节主要介绍的picture扩展包和tikz扩展包的基本绘图命令.

    picture扩展包

    picture扩展包中命令主要分为两类: 绘图环境设置命令和绘图命令。 绘制的基本图形有: 直线段,带箭头直线段,二阶贝塞尔曲线段,圆及椭圆等. 下面是一个picture扩展包使用样例

    \setlength{\unitlength}{1cm}
    \thicklines
    \begin{picture}(10,6)
      \put(2,2.2){\line(1,0){6}}
      \put(2,2.2){\circle{2}}
      \put(6,2.2){\oval(4,2)[r]}
    \end{picture}
    

    绘图环境设置命令

    \begin{picture}(width,height)(x-offset,y-offset)
    

    picture扩展包默认所绘制图形的坐标范围是二维矩形. width,height分别设定图形绘制范围的宽度和高度, 度量单位由

    \setlength{\unitlength}{1cm}
    

    设定 (\setlength不是 picture扩展包的命令). \unitlength 默认单位是 1pt.

    x-offset和y-offset是\begin{picture}命令的可选项, 它们分别设定左下角点的横向坐标值和纵向坐标值

    picture中基本绘图命令有

    \put(x, y){object}
    \qbezier(x1, y1)(x2, y2)(x3, y3)
    \multiput(x, y)(dx, dy){n}{object}
    

    基本图形有:

    线段

    \put(x, y){ \line(x1, y1){length} }
    

    {length} – 线段在水平方向投影长度(如果垂直线段,则是垂直方向投影长度)
    (x1, y1) – 线段的方向向量. 方向向量中元素仅限于在(−6, −5, … , 5, 6) 中取值. x1 与 y1要互质. 因此,方向向量总计只有25个,如下所示:

    \setlength{\unitlength}{5cm}
    \begin{picture}(1,1)
    \put(0,0){\line(0,1){1}}
    \put(0,0){\line(1,0){1}}
    \put(0,0){\line(1,1){1}}
    \put(0,0){\line(1,2){.5}}
    \put(0,0){\line(1,3){.3333}}
    \put(0,0){\line(1,4){.25}}
    \put(0,0){\line(1,5){.2}}
    \put(0,0){\line(1,6){.1667}}
    \put(0,0){\line(2,1){1}}
    \put(0,0){\line(2,3){.6667}}
    \put(0,0){\line(2,5){.4}}
    \put(0,0){\line(3,1){1}}
    \put(0,0){\line(3,2){1}}
    \put(0,0){\line(3,4){.75}}
    \put(0,0){\line(3,5){.6}}
    \put(0,0){\line(4,1){1}}
    \put(0,0){\line(4,3){1}}
    \put(0,0){\line(4,5){.8}}
    \put(0,0){\line(5,1){1}}
    \put(0,0){\line(5,2){1}}
    \put(0,0){\line(5,3){1}}
    \put(0,0){\line(5,4){1}}
    \put(0,0){\line(5,6){.8333}}
    \put(0,0){\line(6,1){1}}
    \put(0,0){\line(6,5){1}}
    \end{picture}
    

    带箭头线段

    \put(x, y){\vector(x1, y1){length}}
    

    (x1, y1) – 线段的方向向量. 方向向量中元素仅限于在(−4, −3, … , 3, 4) 中取值. x1 与 y1要互质.如下所示:

    \setlength{\unitlength}{0.75mm}
    \begin{picture}(60,40)
    \put(30,20){\vector(1,0){30}}
    \put(30,20){\vector(4,1){20}}
    \put(30,20){\vector(3,1){25}}
    \put(30,20){\vector(2,1){30}}
    \put(30,20){\vector(1,2){10}}
    \thicklines
    \put(30,20){\vector(-4,1){30}}
    \put(30,20){\vector(-1,4){5}}
    \thinlines
    \put(30,20){\vector(-1,-1){5}}
    \put(30,20){\vector(-1,-4){5}}
    \end{picture}
    

    圆形

    \put(x, y){\circle{diameter}}
    

    (x, y) – 圆心坐标
    {diameter} – 直径,circle命令画出圆的最大直径约为14mm
    \circle* – 画实心圆

    字符

    \put(0.7,0.3){$A$}
    

    例如:

    \setlength{\unitlength}{0.8cm}
    \begin{picture}(6,5)
    \thicklines
    \put(1,0.5){\line(2,1){3}}
    \put(4,2){\line(-2,1){2}}
    \put(2,3){\line(-2,-5){1}}
    \put(0.7,0.3){$A$}
    \put(4.05,1.9){$B$}
    \put(1.7,2.95){$C$}
    \put(3.1,2.5){$a$}
    \put(1.3,1.7){$b$}
    \put(2.5,1.05){$c$}
    \put(0.3,4){$F=\sqrt{s(s-a)(s-b)(s-c)}$}
    \put(3.5,0.4){$\displaystyle s:=\frac{a+b+c}{2}$}
    \end{picture}
    

    椭圆

    \put(x, y){\oval(w, h)}
    
    \put(x, y){\oval(w, h)[position]}
    

    二阶贝塞尔曲线

    \qbezier(x1, y1)(x, y)(x2, y2)
    
    \multiput(x, y)(dx, dy ){n}{object}
    

    例如

      \linethickness{0.075mm}
      \multiput(0,0)(1,0){26} {\line(0,1){20}}
    

    用户自定义图形

    用户可使用 \newsavebox, \savebox 和\usebox命令设置自定义图形。一个savebox是一类未修饰的盒子(box)。\newsavebox命令声明一个盒子。\savebox命令设定盒子(box)的内容。 \usebox命令将盒子插入文档中。 (A savebox is an non-rendered box that is saved for later repeated rendering via the usebox command. The command \newsavebox creates a placeholder for storing content; the command \savebox stores the specified content in the placeholder without rendering it in the document; and \usebox renders the content of the placeholder into the document[20].)
    例如:

    \newsavebox{foo}
    

    声明 一个名为foo的盒子.

    \savebox{foo}(width,height)[position]{content}
    

    定义 盒子foo

    \put(x, y){\usebox{foo}}
    

    调用盒子foo

    例如:

    \newsavebox{\foldera}
    \savebox{\foldera}
    (40,32)[bl]{% definition
    \multiput(0,0)(0,28){2}
    {\line(1,0){40}}
    \multiput(0,0)(40,0){2}
    {\line(0,1){28}}
    \put(1,28){\oval(2,2)[tl]}
    \put(1,29){\line(1,0){5}}
    \put(9,29){\oval(6,6)[tl]}
    \put(9,32){\line(1,0){8}}
    \put(17,29){\oval(6,6)[tr]}
    \put(20,29){\line(1,0){19}}
    \put(39,28){\oval(2,2)[tr]}
    }
    \newsavebox{\folderb}
    \savebox{\folderb}
    (40,32)[l]{% definition
    \put(0,14){\line(1,0){8}}
    \put(8,0){\usebox{\foldera}}
    }
    \setlength{\unitlength}{0.5mm}
    \begin{picture}(120,168)
    \put(34,26){\line(0,1){102}}
    \put(14,128){\usebox{\foldera}}
    \multiput(34,86)(0,-37){3}
    {\usebox{\folderb}}
    \end{picture}
    

    savebox与 {picture}环境没有依赖关系。将savebox的定义放在 {picture}环境之外,那么整个文档都可以使用这个savebox。

    样例

    下面是几个使用picture环境画图的样例[22]

    \setlength{\unitlength}{1mm}
    \begin{picture}(120,68)
      \put(0,28){\vector(1,0){115}} \put(116,27){$x_A$}
      \put(53,7){\vector(0,1){61}} \put(46,66){$ct_A$}
      \put(2,27){\line(3,1){110}}
      \multiput(53,28)(-12,12){2}{\circle*{2}}
      \put(77,52){\circle*{2}}
      \put(53,28){\vector(-1,1){11}} \put(53,28){\vector(1,1){23}}
      \put(54,23){$E_1$} \put(35,41){$E_2$} \put(71,53){$E_3$}
      \put(28,2){$B'$}   \multiput(30,7)(2,6){9}{\line(1,3){1.5}}
      \put(44,2){$B$}  \put(46,7){\line(1,3){17.5}}
      \put(51,2){$A$}
      \put(60,2){$B''$} \multiput(62,7)(2,6){9}{\line(1,3){1.5}}
      \put(83,54){\line(1,-1){5}}
      \put(89,48){Gerade der} \put(89,44){Gleichzeitigkeit}
      \put(15,54){$\alpha=\alpha'$}
      \put(15,52){\line(1,0){10}}
      % draw_arc P1=(54/43) P2=(53/40) P3=(53/41) r=25
      \qbezier(60.906,51.717)(57.057,53.000)(53.000,53.000)
      % draw_arc P1=(54/43) P2=(53/40) P3=(53/41) r=26
      \qbezier(61.222,52.666)(57.219,54.000)(53.000,54.000)
      % \put(57.219,66.000){\makebox(0,0){$\alpha$}}
       \put(58.000,56.500){\makebox(0,0){$\alpha$}}
      % draw_arc P1=(6/40) P2=(5/40) P3=(8/41) r=20
      \qbezier(25.000,28.000)(25.000,31.246)(23.974,34.325)
      % draw_arc P1=(6/40) P2=(5/40) P3=(8/41) r=21
      \qbezier(26.000,28.000)(26.000,31.408)(24.922,34.641)
      \put(29.000,32.408){\makebox(0,0){$\alpha'$}}
    \end{picture}
    

    在这里插入图片描述

    \setlength{\unitlength}{1mm}
    \begin{picture}(96,38)
      \put(0,12){\vector(1,0){91}}
      \put(92,11){$x_L$}
      \put(6,10){$\underbrace{\rule{4cm}{0cm}}$}
      \put(26,5){\makebox(0,0){$v\cdot\Delta t_L$}}
      \multiput(1,12)(0,20){2}{\line(1,0){10}}
      \multiput(1,12)(10,0){2}{\line(0,1){20}}
      \multiput(41,12)(0,20){2}{\line(1,0){10}}
      \multiput(41,12)(10,0){2}{\line(0,1){20}}
      \multiput(6,12)(40,0){2}{\circle*{2}}
      \put(46,32){\circle*{2}}
      \put(46,12){\line(0,1){20}}
      \put(6,12){\vector(2,1){39}}
      \put(18,25){$c\cdot\Delta t_L$}
      \put(46,32){\vector(2,-1){39}}
      \put(46,22){\line(2,-1){8}}
      \put(54.5,16){$h=c\cdot\Delta\tau$}
    \end{picture}
    

    在这里插入图片描述

    \setlength{\unitlength}{1mm}
    \begin{picture}(93,46)
      \put( 0,14){\vector(1,0){60}}
      \put(61,13){$x$}
      \put(20,4){\vector(0,1){37}}
      \put(19,43){$y$}
      \put(50,34){\circle*{2}}
      \put(52,35){$P$}
      \multiput(20,34)(4,0){8}{\line(1,0){2}}
      \put(14.5,33.5){$y_P$}
      \multiput(50,14)(0,4){5}{\line(0,1){2}}
      \put(48,11){$x_P$}
      \put( 2,8){\vector(3,1){56}}
      \put(59,26.5){$x'$}
      \multiput(50,34)(1.9,-5.7){2}
        {\line(1,-3){1.2}}
      \put(52,22){$x_P'$}
      \multiput(50,34)(-5.8,-1.933){6}
        {\line(-3,-1){3.6}}
      \put(12,21){$y_P'$}
      \put(22,8){\vector(-1,3){10.5}}
      \put(10,41){$y'$}
    \end{picture}
    

    在这里插入图片描述

    tikz包

    使用tikz包绘制基本图形样例[16]

    绘图环境的坐标系

    tikz环境中绘制的是二维图形,
    在设定点坐标时,既可以使用卡氏坐标(Cartesian coordinates),也就是我们常用的直角坐标系,例如

    (1cm, 10pt)
    

    也可以使用极坐标(polar coordinates)

    (30:1cm)
    

    中文字符

    在tikz环境中使用中文,可以用CJKutf8环境,tex文件保存格式为utf8, 通过\mbox{}在tikz环境中插入中文字符. 例如:

    \path (0,4.6) node[left] {\mbox{中文}}
    

    直线段

    \draw (0,0) -- (4,0);
    

    多个相连的直线段

    \draw (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
    

    封闭的直线段环

    \draw (0,0) -- (4,0) -- (4,4) -- (0,4) -- cycle;
    

    贝塞尔曲线

    \draw (0,0) .. controls (0,4) and (4,0) .. (4,4);
    

    抛物线

    \draw (0,0) parabola (4,4); 
    

    圆弧

    \draw (3,0) arc (0:75:3cm);
    

    \draw (2,2) circle (3cm);
    

    椭圆

    \draw (2,2) ellipse (3cm and 1cm);
    

    矩形

    \draw (0,0) rectangle (4,4);
    

    设置线型

    \draw[red,thick,dashed] (2,2) circle (3cm);
    

    网格

    \draw[step=1cm,gray,very thin] (-2,-2) grid (6,6);
    

    无边界网格(缩小绘图范围,达到消隐网格边界的效果)

    \draw[step=1cm,gray,very thin] (-1.9,-1.9) grid (5.9,5.9);
    

    坐标轴

    \draw[thick,->] (0,0) -- (4.5,0);
    \draw[thick,->] (0,0) -- (0,4.5);
    

    端点带标注坐标轴

    \draw[thick,->] (0,0) -- (4.5,0) node[anchor=north west] {x axis};
    \draw[thick,->] (0,0) -- (0,4.5) node[anchor=south east] {y axis};
    

    坐标轴刻度

    \foreach \x in {0,1,2,3,4}
        \draw (\x cm,1pt) -- (\x cm,-1pt) node[anchor=north] {$\x$};
    \foreach \y in {0,1,2,3,4}
        \draw (1pt,\y cm) -- (-1pt,\y cm) node[anchor=east] {$\y$};
    

    Kjell Magne Fauske提供的使用tikz包画图样例:

    \documentclass[UTF8]{article}
    \usepackage{tikz}
    
    \begin{document}
    
    \newpage
    \pagestyle{empty}
    
    % 3D Cone
    % Author: Gene Ressler. Adapted to TikZ by Kjell Magne Fauske.
    % See http://www.frontiernet.net/~eugene.ressler/ for more details.
    
    % The following code is generated by Sketch. I have edited it a bit
    % to make it easier to read.
    \begin{tikzpicture}
        \tikzstyle{conefill} = [fill=blue!20,fill opacity=0.8]
        \tikzstyle{ann} = [fill=white,font=\footnotesize,inner sep=1pt]
        \tikzstyle{ghostfill} = [fill=white]
        \tikzstyle{ghostdraw} = [draw=black!50]
    
        \filldraw[conefill](-.775,1.922)--(-1.162,.283)--(-.274,.5)
                            --(-.183,2.067)--cycle;
        \filldraw[conefill](-.183,2.067)--(-.274,.5)--(.775,.424)
                            --(.516,2.016)--cycle;
        \filldraw[conefill](.516,2.016)--(.775,.424)--(1.369,.1)
                            --(.913,1.8)--cycle;
        \filldraw[conefill](-.913,1.667)--(-1.369,-.1)--(-1.162,.283)
                            --(-.775,1.922)--cycle;
        \draw(1.461,.107)--(1.734,.127);
        \draw[arrows=<->](1.643,1.853)--(1.643,.12);
        \filldraw[conefill](.913,1.8)--(1.369,.1)--(1.162,-.283)
                            --(.775,1.545)--cycle;
        \draw[arrows=->,line width=.4pt](.274,-.5)--(0,0)--(0,2.86);
        \draw[arrows=-,line width=.4pt](0,0)--(-1.369,-.1);
        \draw[arrows=->,line width=.4pt](-1.369,-.1)--(-2.1,-.153);
        \filldraw[conefill](-.516,1.45)--(-.775,-.424)--(-1.369,-.1)
                            --(-.913,1.667)--cycle;
        \draw(-1.369,.073)--(-1.369,2.76);
        \draw(1.004,1.807)--(1.734,1.86);
        \filldraw[conefill](.775,1.545)--(1.162,-.283)--(.274,-.5)
                            --(.183,1.4)--cycle;
        \draw[arrows=<->](0,2.34)--(-.913,2.273);
        \draw(-.913,1.84)--(-.913,2.447);
        \draw[arrows=<->](0,2.687)--(-1.369,2.587);
        \filldraw[conefill](.183,1.4)--(.274,-.5)--(-.775,-.424)
                            --(-.516,1.45)--cycle;
        \draw[arrows=<-,line width=.4pt](.42,-.767)--(.274,-.5);
        \node[ann] at (-.456,2.307) {$r_0$};
        \node[ann] at (-.685,2.637) {$r_1$};
        \node[ann] at (1.643,.987) {$h$};
        \path (.42,-.767) node[below] {$x$}
            (0,2.86) node[above] {$y$}
            (-2.1,-.153) node[left] {$z$};
        % Second version of the cone
        \begin{scope}[xshift=3.5cm]
        \filldraw[ghostdraw,ghostfill](-.775,1.922)--(-1.162,.283)--(-.274,.5)
                                       --(-.183,2.067)--cycle;
        \filldraw[ghostdraw,ghostfill](-.183,2.067)--(-.274,.5)--(.775,.424)
                                       --(.516,2.016)--cycle;
        \filldraw[ghostdraw,ghostfill](.516,2.016)--(.775,.424)--(1.369,.1)
                                       --(.913,1.8)--cycle;
        \filldraw[ghostdraw,ghostfill](-.913,1.667)--(-1.369,-.1)--(-1.162,.283)
                                       --(-.775,1.922)--cycle;
        \filldraw[ghostdraw,ghostfill](.913,1.8)--(1.369,.1)--(1.162,-.283)
                                       --(.775,1.545)--cycle;
        \filldraw[ghostdraw,ghostfill](-.516,1.45)--(-.775,-.424)--(-1.369,-.1)
                                       --(-.913,1.667)--cycle;
        \filldraw[ghostdraw,ghostfill](.775,1.545)--(1.162,-.283)--(.274,-.5)
                                       --(.183,1.4)--cycle;
        \filldraw[fill=red,fill opacity=0.5](-.516,1.45)--(-.775,-.424)--(.274,-.5)
                                             --(.183,1.4)--cycle;
        \fill(-.775,-.424) circle (2pt);
        \fill(.274,-.5) circle (2pt);
        \fill(-.516,1.45) circle (2pt);
        \fill(.183,1.4) circle (2pt);
        \path[font=\footnotesize]
                (.913,1.8) node[right] {$i\hbox{$=$}0$}
                (1.369,.1) node[right] {$i\hbox{$=$}1$};
        \path[font=\footnotesize]
                (-.645,.513) node[left] {$j$}
                (.228,.45) node[right] {$j\hbox{$+$}1$};
        \draw (-.209,.482)+(-60:.25) [yscale=1.3,->] arc(-60:240:.25);
        \fill[black,font=\footnotesize]
                        (-.516,1.45) node [above] {$P_{00}$}
                        (-.775,-.424) node [below] {$P_{10}$}
                        (.183,1.4) node [above] {$P_{01}$}
                        (.274,-.5) node [below] {$P_{11}$};
        \end{scope}
    \end{tikzpicture}
    
    \end{document}
    

    效果如下图所示:
    这里写图片描述

    动画

    使用LaTex在pdf文件中插入动画需要{animate}扩展包,可在LaTex文件引导区添加

    \usepackage{animate}
    

    插入动画命令\animategraphics的语法是

    \animategraphics[<options>]{<frame rate>}{<file basename>}{<first>}{<last>}
    

    < frame rate>定义动画的帧速,< file basename>图形文件名的基, < first>、< last>图形文件起始和结束的序号。例如:panda0.png, panda1.png, …, panda100.png

    附:
    gif动画分解网址:
    https://ezgif.com/split/
    http://www.webtoolss.com/gif_bunkai.html

    样例:

      \animategraphics[
      autoplay,loop,controls,
      width=.7\textwidth,
      height=.7\textheight
      ]{4}{./pandagif/panda}{0}{100}
    

    其中动画图片panda0.png, panda1.png, …, panda100.png都保存在pandagif文件夹中

    时间轴(timeline)

    画时间轴

    下面这个例子[23]基于table画竖向时间轴. 只使用了xcolor扩展包,

    \documentclass{article}
    \usepackage{xcolor}
    \newcommand\ytl[2]{
    \parbox[b]{8em}{\hfill{\color{cyan}\bfseries\sffamily #1}~$\cdots\cdots$~}\makebox[0pt][c]{$\bullet$}\vrule\quad \parbox[c]{4.5cm}{\vspace{7pt}\color{red!40!black!80}\raggedright\sffamily #2.\\[7pt]}\\[-3pt]}
    \begin{document}
    \begin{table}
    \caption{Timeline of something.}
    \centering
    \begin{minipage}[t]{.7\linewidth}
    \color{gray}
    \rule{\linewidth}{1pt}
    \ytl{1947}{AT and T Bell Labs develop the idea of cellular phones}
    \ytl{1968}{Xerox Palo Alto Research Centre envisage the `Dynabook'}
    \ytl{1971}{Busicom 'Handy-LE' Calculator}
    \ytl{1973}{First mobile handset invented by Martin Cooper}
    \ytl{1978}{Parker Bros. Merlin Computer Toy}
    \ytl{1981}{Osborne 1 Portable Computer}
    \ytl{1982}{Grid Compass 1100 Clamshell Laptop}
    \ytl{1983}{TRS-80 Model 100 Portable PC}
    \ytl{1984}{Psion Organiser Handheld Computer}
    \ytl{1991}{Psion Series 3 Minicomputer}
    \bigskip
    \rule{\linewidth}{1pt}%
    \end{minipage}%
    \end{table}
    \end{document}
    

    显示效果如下:在这里插入图片描述

    流程图

    使用tikz宏包画流程图样例如下:

    \documentclass[UTF8]{article} 
    %% 在导言中设置tikz扩展包
    \usepackage{tikz}
    \usetikzlibrary{arrows, 
                    shapes.geometric,
                    decorations.pathmorphing,
                    backgrounds,
                    positioning,
                    fit,
                    petri,
                    automata}
    \begin{document}
    \thispagestyle{empty}
     %  在正文中定义流程图中控件样式 
    \tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30]
    \tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=blue!30]
    \tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=orange!30]
    \tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=green!30]
    \tikzstyle{Data} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30]
    \tikzstyle{arrow} = [thick,->,>=stealth]
    
    %% 设置流程图内容
    \begin{tikzpicture}[node distance=2cm]
     %定义流程图具体控件
    \node (start) [startstop] {Start};
    \node (in1) [io, below of=start] {Input};
    \node (pro1) [process, below of=in1] {Process 1};
    \node (dec1) [decision, below of=pro1, yshift=-0.5cm] {Decision 1};
    \node (pro2a) [process, below of=dec1, yshift=-0.5cm] {Process 2a};
    \node (pro2b) [process, right of=dec1, xshift=2cm] {Process 2b};
    \node (out1) [io, below of=pro2a] {Output};
    \node (stop) [startstop, below of=out1] {Stop};
    
     %连接控件
    \draw [arrow](start) -- (in1);
    \draw [arrow](in1) -- (pro1);
    \draw [arrow](pro1) -- (dec1);
    \draw [arrow](dec1) -- (pro2a);
    \draw [arrow](dec1) -- (pro2b);
    \draw [arrow](dec1) -- node[anchor=east] {yes} (pro2a);
    \draw [arrow](dec1) -- node[anchor=south] {no} (pro2b);
    \draw [arrow](pro2b) |- (pro1);
    \draw [arrow](pro2a) -- (out1);
    \draw [arrow](out1) -- (stop);
    \end{tikzpicture} 
    \end{document}
    

    数学公式

    按照数学公式在文中的位置可分为两种: 行中公式和独立公式.

    行中公式

    行中公式可使用如下两种形式:

    毕达哥拉斯定理 \begin{math} x^{2}+y^{2}=z^{2} \end{math}又称勾股定理。
    

    毕达哥拉斯定理 $ x^{2}+y^{2}=z^{2} $又称勾股定理。
    

    使用上面两种方法编译后得到的文档是一样的,具体如下图所示:
    这里写图片描述

    独立公式

    独立公式可使用

    $$
    v = v^{1}e_{1} + v^{2}e_{2} + v^{3}e_{3} = v^{i}e_{i}, i = 1,2,3
    $$
    或
    \begin{equation}
    v = v^{1}e_{1} + v^{2}e_{2} + v^{3}e_{3} = v^{i}e_{i}, i = 1,2,3
    \end{equation}
    

    效果如下图所示:
    这里写图片描述
    由上图可看出,使用 {equation} 命令默认带公式编号,使用 $$ 命令默认不带公式编号。

    数学公式显示样式

    有些数学符号会根据文档中上下文的不同而改变其显示形式。例如,在正文环境中和在独立数学公式环境中,分式会有不同的显示样式.

    $f(x) = \sum_{n=0}^{10} \frac{x}{n!}$  \\
    
    $$
    f(x) = \sum_{n=0}^{10} \frac{x}{n!}
    $$
    

    在这里插入图片描述

    如果想改变数学符号的默认显示样式, 可使用下列样式命令设定:
    \displaystyle
    \textstyle
    \scriptstyle
    \scriptscriptstyle

    例如:

    In-line math components can be set with independent math display style 
    $f(x) = \displaystyle \sum_{n=0}^{10} \frac{x}{n!}$, and vice versa:
    $$
    f(x) = \scriptstyle \sum_{n=0}^{10} \frac{x}{n!}
    $$
    

    在这里插入图片描述

    引用公式

    在文中引用公式编号可使用以下方式

    \begin{equation}\label{eq:Pythagorean theorem}
    x^{2}+y^{2}=z^{2}
    \end{equation}
    公式\ref{eq:Pythagorean theorem}是毕达哥拉斯定理,在中国又称勾股定理。
    

    效果如下:
    这里写图片描述

    在数学公式中插入中文

    使用\mbox{}可在数学公式中插入中文。

    $$
    \mbox{例如:} x_{1}, x_{2}, \cdots, x_{N} 
    $$ 
    

    效果如下图:
    这里写图片描述

    多行公式

    $$
    \left [
    \begin{array}{cc}
    v^{i} e_{i} & v^{i} e_{j}  \\
    v^{j} e_{i} & v^{j} e_{j}  \\
    \end{array}
    \right ]
    $$
    

    效果如下图所示:
    这里写图片描述

    $$
    \left \{
    \begin{array}{r c l}
    (f + g)(x)    & = &  f(x) + g(x) \\
    (\alpha f)(x) & = &  \alpha f(x) \\
    (fg)(x)       & = &  f(x)g(x)    \\
    \end{array}
    \right .
    $$
    

    效果如下图所示:
    在这里插入图片描述

    多行公式也可以在{eqnarray}环境实现,例如:

    \begin{eqnarray} 
    w(0) & = & 0 \\
    \frac{\partial w}{\partial x}\Big |_{x=0} & = & 0  \\
    \end{eqnarray}
    

    下标

    1. 一般数学公式中下标可以使用
    $$ s = \int_{a}^{b} |\dot{x}(t)| dt  $$
    
    1. 有时需要将下标放在正下方, 如果是数学符号,可使用$ \limits$命令
    $$ r'(t) = \lim \limits_{\triangle t \rightarrow 0} \frac{ r(t + \triangle t) - r(t)}{ \triangle t }$$
    

    这里写图片描述

    1. 如果是普通符号,那么要用KaTeX parse error: Expected group after '\mathop' at end of input: \mathop先转成数学符号再用$\limits$

    长竖线

    数学公式中的竖线高度可通过 “\big” “\Big” “\bigg” “\Bigg” 调整。

    $$
    \frac{\partial w}{\partial x}\Big |_{x=0} = 0 
    $$
    

    根号

    The square root of 100 is $\sqrt{100}=10$. 
    \\
    The cubic root of 64 is $\sqrt[3]{64}=4$.
    

    得到的文档如下图所示
    这里写图片描述

    页脚注释和页边注释

    页脚注释

    在正文中添加页脚注释的命令是:\footnote, 例如:

    正文内容\footnote{注释内容}
    

    Latex会按顺序为脚注设置编号。

    也可以使用\footnotemark和\footnotetext 添加页脚注释,例如:

    在这里添加页脚注释角标\footnotemark
    %% ...
    在这里设置注释内容\footnotetext{注释内容}
    

    \footnote脚注命令不能在数学公式,表格,子页面等环境中使用。如果想在表格中引用页脚注释,可参考下面的例子:

    正文内容\footnote{注释内容\label{fnote}}
    在这里也引用与上边脚注相同的角标 \textsuperscript{\ref{fnote}}
    

    页边注释

    在正文中添加页边注释的命令是:\marginpar, 例如:

    \marginpar{注释内容}
    

    关于页脚注释和页边注释命令的使用以及其它内容请参考[19]

    枚举项编号样式

    使用{enumitem}扩展包

    \usepackage{enumitem}
    
    \begin{enumerate}[label=(\alph*)]
    \item an apple
    \item a banana
    \item a carrot
    \item a durian
    \end{enumerate}
    
    \begin{enumerate}[label=(\Alph*)]
    \item an apple
    \item a banana
    \item a carrot
    \item a durian
    \end{enumerate}
    
    \begin{enumerate}[label=(\roman*)]
    \item an apple
    \item a banana
    \item a carrot
    \item a durian
    \end{enumerate}
    

    使用参考文献

    Latex中参考文献命令格式是[7]:

     \begin{thebibliography}{9}
    \bibitem{latexcompanion} 
    Michel Goossens, Frank Mittelbach, and Alexander Samarin. 
    \textit{The \LaTeX\ Companion}. 
    Addison-Wesley, Reading, Massachusetts, 1993.
     
    \bibitem{einstein} 
    Albert Einstein. 
    \textit{Zur Elektrodynamik bewegter K{\"o}rper}. (German) 
    [\textit{On the electrodynamics of moving bodies}]. 
    Annalen der Physik, 322(10):891–921, 1905.
     
    \bibitem{knuthwebsite} 
    Knuth: Computers and Typesetting,
    \\\texttt{http://www-cs-faculty.stanford.edu/\~{}uno/abcde.html}
    \end{thebibliography}
    

    注意:\bibitem命令中 参考文献引用名中可以有空格。

    Bibtex是常用的参考文献管理工具。Bibtex将参考文献条目内容保存在一个.bib后缀文件中。 Bibtex能根据参考文献在正文中被引用的顺序自动过滤并调整文献编号,因此不同论文中可以使用同一个bib文件。 Bibtex使用的参考文献格式如下所示[7][8]:

    @article{name1,
         author = {Auther 1 and Auther 2},
         title = {The \LaTeX\ Companion},
         journal = {Journal name},
         volume = {49},
         pages = {409-436},
         year = {19xx},
         abstract = {摘要主要是给自己参考, 这一项不是必须的}
    }
    @book{name2,
         author = {Auther 1 and Auther 2},
         title = {The TeX Book},
         publisher = "Springer",
         year = {19xx},
         abstract = {摘要}
    }
    @article{einstein,
        author =       "Albert Einstein",
        title =        "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German})
            [{On} the electrodynamics of moving bodies]",
        journal =      "Annalen der Physik",
        volume =       "322",
        number =       "10",
        pages =        "891--921",
        year =         "1905",
        DOI =          "http://dx.doi.org/10.1002/andp.19053221004"
    }
     
    @book{latexcompanion,
        author    = "Michel Goossens and Frank Mittelbach and Alexander Samarin",
        title     = "The \LaTeX\ Companion",
        year      = "1993",
        publisher = "Addison-Wesley",
        address   = "Reading, Massachusetts"
    }
     
    @misc{knuthwebsite,
        author    = "Donald Knuth",
        title     = "Knuth: Computers and Typesetting",
        url       = "http://www-cs-faculty.stanford.edu/\~{}uno/abcde.html"
    }
    
    @article{article,
      author  = {Peter Adams}, 
      title   = {The title of the work},
      journal = {The name of the journal},
      year    = 1993,
      number  = 2,
      pages   = {201-213},
      month   = 7,
      note    = {An optional note}, 
      volume  = 4
    }
    
    @book{book,
      author    = {Peter Babington}, 
      title     = {The title of the work},
      publisher = {The name of the publisher},
      year      = 1993,
      volume    = 4,
      series    = 10,
      address   = {The address},
      edition   = 3,
      month     = 7,
      note      = {An optional note},
      isbn      = {3257227892}
    }
    
    @booklet{booklet,
      title        = {The title of the work},
      author       = {Peter Caxton}, 
      howpublished = {How it was published},
      address      = {The address of the publisher},
      month        = 7,
      year         = 1993,
      note         = {An optional note}
    }
    
    @conference{conference,
      author       = {Peter Draper}, 
      title        = {The title of the work},
      booktitle    = {The title of the book},
      year         = 1993,
      editor       = {The editor},
      volume       = 4,
      series       = 5,
      pages        = 213,
      address      = {The address of the publisher},
      month        = 7,
      organization = {The organization},
      publisher    = {The publisher},
      note         = {An optional note}  
    }
    
    @inbook{inbook,
      author       = {Peter Eston}, 
      title        = {The title of the work},
      chapter      = 8,
      pages        = {201-213},
      publisher    = {The name of the publisher},
      year         = 1993,
      volume       = 4,
      series       = 5,
      address      = {The address of the publisher},
      edition      = 3,
      month        = 7,
      note         = {An optional note}
    }
    
    @incollection{incollection,
      author       = {Peter Farindon}, 
      title        = {The title of the work},
      booktitle    = {The title of the book},
      publisher    = {The name of the publisher},
      year         = 1993,
      editor       = {The editor},
      volume       = 4,
      series       = 5,
      chapter      = 8,
      pages        = {201-213},
      address      = {The address of the publisher},
      edition      = 3,
      month        = 7,
      note         = {An optional note}
    }
    
    @manual{manual,
      title        = {The title of the work},
      author       = {Peter Gainsford}, 
      organization = {The organization},
      address      = {The address of the publisher},
      edition      = 3,
      month        = 7,
      year         = 1993,
      note         = {An optional note}
    }
    
    @mastersthesis{mastersthesis,
      author       = {Peter Harwood}, 
      title        = {The title of the work},
      school       = {The school of the thesis},
      year         = 1993,
      address      = {The address of the publisher},
      month        = 7,
      note         = {An optional note}
    }
    
    @misc{misc,
      author       = {Peter Isley}, 
      title        = {The title of the work},
      howpublished = {How it was published},
      month        = 7,
      year         = 1993,
      note         = {An optional note}
    }
    
    @phdthesis{phdthesis,
      author       = {Peter Joslin}, 
      title        = {The title of the work},
      school       = {The school of the thesis},
      year         = 1993,
      address      = {The address of the publisher},
      month        = 7,
      note         = {An optional note}
    }
    
    @proceedings{proceedings,
      title        = {The title of the work},
      year         = 1993,
      editor       = {Peter Kidwelly},
      volume       = 4,
      series       = 5,
      address      = {The address of the publisher},
      month        = 7,
      organization = {The organization},
      publisher    = {The name of the publisher},
      note         = {An optional note}
    }
    
    @techreport{techreport,
      author       = {Peter Lambert}, 
      title        = {The title of the work},
      institution  = {The institution that published},
      year         = 1993,
      number       = 2,
      address      = {The address of the publisher},
      month        = 7,
      note         = {An optional note}
    }
    
    @unpublished{unpublished,
      author       = {Peter Marcheford}, 
      title        = {The title of the work},
      note         = {An optional note},
      month        = 7,
      year         = 1993
    }
    

    可将上述内容保存到一个.bib后缀文件,例如foo.bib。
    注意:bib文件中 参考文献引用名中不能有空格。

    在preamble中添加(不加这个命令也能用)

    \usepackage{cite}
    

    在正文中引用时方法如下:

    \begin{document}
    
    \cite{name1}"The geometric definition of dot product is coordinate independent, ..."\cite{latexcompanion,knuthwebsite}
    
    \medskip
    
    %% IEEEtran是参考文献显示格式
    \bibliographystyle{IEEEtran}
    %% foo is the bib file name
    \bibliography{foo} 
     
    \end{document} 
    

    注意
    1) 应用多个文献时,例如:\cite{latexcompanion,knuthwebsite}, 参考文献引用名之间用逗号分隔,不能插入空格。
    2) \bibliography{foo} 中使用文件名(本例中是foo),不能带.bib后缀.

    常用的bibliographystyle有: abbrv, acm, alpha, apalike, ieetr, plain,siam, unsrt等。
    BibTeX常用的项有[7]:
    address annote author
    booktitle chapter crossref
    edition editor institution
    journal key month
    note number organization
    pages publisher school
    series title type
    volume year URL
    ISBN ISSN LCCN
    abstract keywords price
    copyright language contents

    Beamer样例

    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    %    设置文档类型为 beamer
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \documentclass{beamer}
    \usepackage{beamerthemesplit}
    \usepackage{animate}
    
    \title{Example Presentation Created with the Beamer Package}
    \author{Till Tantau}
    \date{\today}
    
    \begin{document}
    
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    %    TITLE PAGE
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \frame{\titlepage}
    
    \section*{Outline}
    
    \frame{\tableofcontents}
    
    \section{Introduction}
    \subsection{Overview of the Beamer Class}
    
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    %    使用 frame 命令生成一页
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \frame
    {
        \frametitle{Features of the Beamer Class}
        \begin{itemize}
        \item<1-> Normal LaTeX class.
        \item<2-> Easy overlays.
        \item<3-> No external programs needed.
        \end{itemize}
    }
    
    \begin{frame}{Metropolis title formats}
    	  supports 4 different title formats:
    	\begin{itemize}
    		\item Regular
    		\item \textsc{Small caps}
    		\item \textsc{all small caps}
    		\item ALL CAPS
    	\end{itemize}
    	They can either be set at once for every title type or individually.
    \end{frame}
    
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    %    公式于图片并列
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    \begin{frame}{Euler–Bernoulli 梁理论}
    \begin{figure}[H]
    \begin{minipage}{0.48\linewidth}
     \centerline{\includegraphics[width=4.0cm]{foo.PNG}}
    \end{minipage}
    \hfill
    \begin{minipage}{.48\linewidth}
    $ \displaystyle  \frac{d^{2}}{dx^{2}} (EI_{y} \frac{d^{2} \omega}{dx^{2}}) = q$
    \end{minipage}
    \caption{Euler–Bernoulli 方程}
    \label{zrotate}
    \end{figure}
    \end{frame} 
    
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    %    插入代码片段, 需要使用 fragile
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    \begin{frame} [fragile]
    \frametitle{Code}
    \begin{verbatim}
    int main (int argc, char* argv[])
    {
        printf("Hello world. \n");
        return 0;
    }
    \end{verbatim}
    \end{frame} 
    
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    %    插入动画
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    \begin{frame}
      \animategraphics[
      autoplay,loop,controls,
      width=.7\textwidth,
      height=.7\textheight
      ]{4}{/pandagif/panda}{0}{100}
    \end{frame}
    \end{document}
    

    字体与字号

    Latex的字体由小到大分别为

    \tiny
    \scriptsize
    \footnotesize
    \small
    \normalsize
    \large
    \Large
    \LARGE
    \huge
    \Huge
    

    例如
    如果在文档局部微调某些字句的字体大小:

        {\tiny           Hello}\\
        {\scriptsize     Hello}\\
        {\footnotesize   Hello}\\
        {\small          Hello}\\
        {\normalsize     Hello}\\
        {\large          Hello}\\
        {\Large          Hello}\\
        {\LARGE          Hello}\\
        {\huge           Hello}\\
        {\Huge           Hello}\\
    

    如果需要在大范围调整,可使用\begin{}和\end{} 命令。 例如:

    \begin{footnotesize}
    The  package uses new font size other than default size.
    \end{footnotesize} 
    

    Latex字体大小一般以pt做单位,pt是point的简写。pt与长度单位的换算关系是:
    1点(point) = 0.013837英寸(inch) = 0.35146毫米(mm)
    Latex文档字体大小的默认值\normalsize 是 10 points。\documentclass命令可以在导言区修改字体大小默认值,例如:

    \documentclass[12pt, letterpaper]{article}
    

    中文排版通常使用字号,例如:五号字,六号字等。 字号与pt的关系如下所列:

    \begin{tabular}{lll}
    \hline
    七号   & 5.25pt  & 1.845mm \\
    六号   & 7.875pt & 2.768mm \\
    小五号 & 9pt     & 3.163mm \\
    五号   & 10.5pt  & 3.69mm \\
    小四号 & 12pt    & 4.2175mm \\
    四号   & 13.75pt & 4.83mm \\
    三号   & 15.75pt & 5.53mm \\
    二号   & 21pt    & 7.38mm \\
    一号   & 27.5pt  & 9.48mm \\
    小初号 & 36pt    & 12.65mm \\
    初号   & 42pt    & 14.76mm \\
    \hline
    \end{tabular}
    

    设置字号的命令

    \zihao{5}
    \zihao{-5}
    

    常用的中文字体有

    \kaishu 楷体
    \songti 宋体
    \heiti 黑体
    \fangsong 仿宋
    \lishu 隶书
    \youyuan 幼圆 
    

    颜色

    设置字符颜色, 字符框颜色和背景色

    使用\textcolor命令,可以基于红,黄,蓝三原色改变字符颜色

    \textcolor[rgb]{0.00,0.50,1.00}{text} 
    
    \textcolor[RGB]{0,128,255}{text}
    

    如果使用[rgb],红,黄,蓝三原色的比例的取值范围是[0,1], 例如: {0.00,0.50,1.00}
    如果使用[RGB],红,黄,蓝三原色的比例的取值范围是[0,1], 例如: {0,128,255}

    使用xcolor扩展包,可以直接使用已经调配好的颜色名
    首先在LaTex导言区添加

    \usepackage{xcolor}
    

    使用样例:

    \textcolor{blue}{text}
    {\color{red}some text}
    

    设置字符背景色

    \colorbox{blue}{text}
    

    设置字符框颜色和背景色

    \fcolorbox{blue}{yellow}{text}
    

    自定义颜色名

    通过\definecolor命令可以自定义颜色名. \definecolor命令的语法是:

    \definecolor{name}{model}{color-spec}
    

    例如:

    \definecolor{orange}{rgb}{1,0.5,0}
    

    设置verbatim环境中字符颜色

    然而在verbatim环境中,"\textcolor[RGB]{0,128,255}{text}"都会当作普通字符显示,无法改变字符颜色。 使用fancyvrb扩展包,就可以改变verbatim环境中字符颜色。
    首先在LaTex导言区添加

    \usepackage{fancyvrb}
    \usepackage{xcolor}
    

    使用样例

    \color{blue}
    \begin{verbatim}
    The  characters' color have been chenged to blue.                   
    \end{verbatim} 
    
    \color{black}  %% 改回原来的颜色
    

    \color 命令会改变从它所在行开始知道页面结束所有文档内容中字符的颜色。

    LaTex文件编码格式与使用中文

    要在Latex环境中使用中文,首先要选择tex文件的编码(encoding)方式,常用的有UTF-8和GBK等。在Windows中,使用WinEdt编辑UTF-8格式tex文件时,修改配置文件(Options -> Options Interface -> Language, Unicode, Sorting -> Unicode(UTF-8) Support )中UTF8FILTER项

    UTF8FILTER="Tex;UTF-8|ACP;EDT;INI;"
    

    将WinEdt设置为默认使用UTF8格式打开tex文件。
    如果WinEdt打开一个UTF-8格式的文件显示乱码,可在Document->Document Setting->Format->File Format中选择UTF-8
    或者在在该文件的开始处添加一行

    % !Mode:: "TeX:UTF-8"
    

    Latex环境中使用中文需要注意的一点是: Latex编辑器读入文件的使用的编码格式一定要与该文件的编码格式一致。

    1. 使用CJK中文包(UTF8格式)
    \documentclass[UTF8]{article}
    \usepackage{CJK}  
    \begin{document}
    \begin{CJK}{UTF8}{song}
    Hello, World!
    
    世界, 你好!
    
    \emph{世界, 你好!}
    
    \textbf{世界, 你好!}
    
    {\CJKfamily{hei}  黑体}
    
    {\CJKfamily{kai}  楷体}
    
    {\CJKfamily{li} 隶书}
    
    {\CJKfamily{fs} 仿宋}
    
    {\CJKfamily{song} 仿宋}
    
    \end{CJK}
    \end{document}
    

    第一行$ \documentclass $ 后的 [UTF8][UTF8][UTF8] 指定编辑器按照UTF8格式读入该文件,所以也要以UTF8格式保存该文件。

    1. 使用CTEX中文包(UTF8格式)
    \documentclass[UTF8]{article}
    \usepackage{CTEX}
    
    \begin{document}
    
    \section{字体设置}
    
    {\kaishu 楷体}
    
    {\songti 宋体}
    
    {\heiti 黑体}
    
    {\fangsong 仿宋}
    
    {\lishu 隶书}
    
    {\youyuan 幼圆}  
    
    \end{document} 
    

    pdf文档效果
    这里写图片描述

    1. 使用CJK中文包(GBK格式)
    \documentclass{article}
    \usepackage{CJK}  
    \begin{document}
    \begin{CJK*}{GBK}{song}
    Hello, World!
    
    世界, 你好!
    
    \emph{世界, 你好!}
    
    \textbf{世界, 你好!}
    \end{CJK*}
    \end{document}
    
    1. 输入中文繁体字
      在Windows 10操作系统中,使用微软拼音输入法, 通过 Ctrl + Shift + f 可以转换中文繁/简体

    LaTeX文件编译

    常用的LaTeX文件编辑软件有WinEdt等,也可以自己动手编译,例如使用Windows的批处理,使用Visual Studio的make等.

    使用WinEdt

    Shift+Ctrl+P

    Windows 10中使用批处理编译

    使用 Windows的 记事本(在文件资源管理器中打开文件夹(如D:\foo), 点击鼠标右键->新建->文本文档), 也可以使用别的编译软件如Notepad++等。写入以下命令

    pdflatex %1 
    bibtex %1 
    pdflatex %1 
    pdflatex %1 
    start %1.pdf
    

    保存为bat文件(可以命名为foo.bat)
    开始->Windows附件->命令提示符,输入以下命令

    cd d:\foo 
    foo.bat
    

    Visual Studio的make

    下面是一例用于编译LaTeX文件的Makefile文件:

    BINPATH = D:\CTEX\MiKTeX\miktex\bin\  
      
    TeX = $(BINPATH)\pdflatex.exe   
    TeX_FLAGS = -shell-escape -interaction=nonstopmode -file-line-error  
    PRE =  $(TeX) -ini -job-name="preamble" "&pdflatex preamble.tex\dump"  
    BIB = $(BINPATH)\bibtex.exe  
      
    FileName = main  
      
    all: $(FileName).pdf  
      
    main.pdf: $(FileName).tex   
        $(TeX) $(TeX_FLAGS) $(FileName).tex  
        $(BIB) $(FileName).tex  
        $(TeX) $(FileName).tex  
        $(TeX) $(FileName).tex  
      
    clean:   
        del $(FileName).pdf  
        del $(FileName).log  
    

    常见编译错误

    "豢\documentclass{article}"
    在Windows系统中,当文档中需要插入中文字符时,需将Latex文件使用UTF-8编码保存。如果使用Windows系统自带的记事本编辑Latex文件,经常遇到下面的编译错误:

    豢\documentclass{article}
    

    出现这种编译错误的原因是因为 Windows 会在 UTF 编码的文件最开始加一个 BOM。

    解决办法:
    不要使用Windows系统自带的记事本保存.tex文件,直接使用别的编辑软件(例如WinEdt, Notepad++等)创建.tex文件。

    "Too Many Unprocessed Floats"
    如果一浮动对象不能被立即处理,它就会被放到未处理的浮动对象队列@freelist 中,
    @freelist 一般只保存18个未处理浮动对象,当未处理的浮动对象的数目过多时,就会出现"Too Many Unprocessed Floats"错误[10]。

    解决办法:

    1. 调整文本
    2. 在浮动图形对象之间加入 \clearpage
    3. 将浮动图形对象改为非浮动图形对象[11]

    使用WinEdt打开UTF-8格式文件,文件的中文字符显示为乱码
    解决办法:
    在Document->Document Setting->Format->File Format中选择UTF-8格式
    或者在在该文件的开始处添加一行

    % !Mode:: "TeX:UTF-8"
    

    参考文献

    [1] https://en.wikipedia.org/wiki/TeX
    [2] http://hubl82.blog.163.com/blog/static/12676948520134593321565/
    [3] https://www.shareLaTex.com/learn/Creating_a_document_in_LaTex
    [4] http://www.ctex.org/HomePage/
    [5] https://www.LaTex-project.org
    [6] https://tex.stackexchange.com/questions/246/when-should-i-use-input-vs-include
    [7] https://www.sharelatex.com/learn/Bibliography_management_with_bibtex
    [8] https://www.verbosus.com/bibtex-style-examples.html
    [9] http://www.ctex.org/documents/latex/graphics/node61.html
    [10] http://www.ctex.org/documents/latex/graphics/node66.html
    [11] http://www.ctex.org/documents/latex/graphics/node87.html#chap:nonfloat
    [12] User’s Guide to the Beamer Class. http://www.tuteurs.ens.fr/noncvs/docs/beamer/beameruserguide.pdf
    [13] https://www.r-bloggers.com/create-your-own-beamer-template/
    [14] https://hamaluik.com/posts/better-beamer-themes/
    [15] https://en.wikibooks.org/wiki/LaTeX/Tables
    [16] https://www.sharelatex.com/blog/2013/08/27/tikz-series-pt1.html
    [17] https://en.wikibooks.org/wiki/LaTeX/Floats,_Figures_and_Captions
    [18] https://en.wikibooks.org/wiki/LaTeX/Picture
    [19] https://en.wikibooks.org/wiki/LaTeX/Footnotes_and_Margin_Notes
    [20] https://en.wikibooks.org/wiki/LaTeX/Boxes
    [21] TeX Stack Exchange中的精彩问答 https://www.zhihu.com/question/27240200
    [22] The picture Environment http://www.ursoswald.ch/LaTeXGraphics/picture/picture.html
    [23] https://tex.stackexchange.com/questions/196794/how-can-you-create-a-vertical-timeline
    [24] https://tex.stackexchange.com/questions/74353/what-commands-are-there-for-horizontal-spacing

    后记

    人类社会历经石器时代, 青铜时代, 铁器时代, 机器时代,电气时代,直到现在的电子信息时代. 人类将对自然界和人类社会探索和研究 转化为知识, 用文字记录下来. 文字的出现标识人类文明的起点. 知识的增长不仅依赖人类对未知世界的探索,也依赖于承载文明的工具. 从结绳刻木, 到龟甲,兽骨, 陶器, 兽皮,竹简, 丝绢, 纸张, 电子计算机, 从刻刀,到笔墨, 活字印刷, 到电子软件, 人类在发现知识的同时也努力改进传承知识的工具.

    知识是人类文明的承载体,是人类改变个体命运的强大武器。知识是人类社会划分阶层的重要标尺. 知识曾经是贵族的专享, 二千多年前的孔子提出"有教无类", 打破了贵族对知识的垄断.

    感谢那些伟大的程序员. 他(她)们花费时间和精力发明TeX, 开发一系列相关扩展包和辅助工具,将其扩展为LaTex等分支。 他(她)们将私人知识产权的劳动成果奉献为公共财产,供全社会免费使用。 这种大公无私的精神,在物欲横流, 弱肉强食的丛林社会中格外耀眼。他(她)们奉献的不仅是排版软件,更是计算机时代传播知识的工具. 他(她)们无私的奉献使得一些人不再因为金钱而失去获取知识的权力, 也给这些人通过知识改变命运的机会. 这是对人类文明发展的有力推动。

    人类文明一直加速发展. 特别从工业革命开始, 出现了牛顿,伏尔泰,康德,达尔文等一大批伟大的思想家, 科学家。在此期间,中国人对人类文明发展做出的贡献于严重落后于我们占世界人口的比重。在国内, 学习LaTex的需求一般源自研究生撰写论文的压力。 能坚持读到这里,你有很大概率是其中的一员。 希望你即使成不了牛顿那样的伟人,至少也要做一个具有奉献精神的人, 能让这个世界变得更美好, 更公平。

    展开全文
  • 神经网络(入门最详细)

    万次阅读 多人点赞 2018-10-23 09:32:34
    amp;see_lz=1# 先从回归(Regression)问题说起。我在本吧已经看到不少人提到如果想实现强AI,就必须让机器学会观察并总结规律的言论。具体地说,要让机器观察什么是圆的,什么是方的,区分各种颜色和形状,然后根据...
  • Go入门教程

    万次阅读 多人点赞 2020-02-26 10:24:52
    本人录制的Go入门视频 go语言开发实战:https://pan.baidu.com/s/1bqOR9qZ Go语言GUI编程:https://pan.baidu.com/s/13yoUhqEUyrT_9bpi7K0rYQ 基础编程 01、Go语言介绍 02、环境搭建 03、第一个Go程序 04、...
  • java基础入门(一)

    万次阅读 多人点赞 2020-03-15 00:28:28
    2. 这篇教程是一个学习方向的引导,且只针对基础入门(更加进阶的知识笔者也还在学习)。 3. java的基础入门知识网上有很多,很多大神的博客里也有总结,笔者不认为自己能比大神总结的好。所以在这篇教程里,...
  • Atom编辑器入门到精通(一) 安装及使用基础

    万次阅读 多人点赞 2016-12-08 17:30:20
    Atom是GitHub推出的一款编辑器,被称为21世纪的黑客编辑器,主要的特点是现代,易用,可定制.
  • [Express-01] 入门

    2016-05-04 20:28:12
    五一这两天花了点时间把自己有道电子笔记上过去写的东西给整理了一下,因为重装了系统之后大部分以前做的笔记和写的文章都丢了,于是想想还是把没丢的这些给整理一下放在博客了为好!Express是流行的Node.js Web框架...
  • 已经火了很久了,一直想了解它学习它结果没时间,了解了一些资料,结合我自己的情况,整理了一个学习路线。     ...想要在大数据这个领域汲取养分,让自己壮大成长。分享方向,行动以前先分享下一个大数据交流...
  • 入门

    2018-08-25 10:17:18
    入门 Description 不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一 条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而...
  • 软件测试入门视频教程

    万人学习 2019-06-25 10:59:08
    软件测试入门视频培训教程:该课程将带你走进“软件测试”的大门,具体内容包括软件测试环境搭建、软件开发模型、产品模型、CMM模型、测试用例、等价类划分、边界值划分、白盒测试、单元测试、bugfree搭建、系统测试...
  • 小猪的C语言快速入门系列(一)

    万次阅读 多人点赞 2017-10-12 16:39:43
    教程会把 C语言入门 的核心内容做关键知识点的提纯,去除一些笼统的废话,配以思维导图与经典例子, 相信可以让初学者更快的上手C语言。另外笔者只是大学学过下C基础的东西, 不是专业选手,如果本教程有什么纰漏...
  • 小猪的C语言快速入门系列(四)

    万次阅读 多人点赞 2017-10-16 15:09:08
    小猪的C语言快速入门系列(四)标签: C语言本节引言:经过前面三节的学习,我们对于C语言有了一点基本的了解, 假如现在要你根据下面的题目写一个这样的代码应该不难吧:题目: 输入五个学生的成绩,然后求出总和和...
  • 25 篇 Java 入门技术博文,送给正在自学的你

    万次阅读 多人点赞 2019-11-09 11:40:48
    很多大学生或者正在自学的程序员问我:“二哥,能否提供一个 Java 入门的学习路线?”刚好我之前花了 7 周多的时间写了 25 篇 Java 入门的技术博文,于是我想不妨把这些整理成一个系列分享出来,给大家作为一个参考...
  • 小猪的C语言快速入门系列(七)

    万次阅读 多人点赞 2017-10-17 14:42:11
    小猪的C语言快速入门系列(七)标签: C语言本节引言:在第五节的时候我们对C里的指针进行了初步的学习,而作为C语言的灵魂, 当然不会就那么简单,本节我们来进一步学习指针,包括:函数与指针, 指针数组,二级...
  • 小猪的C语言快速入门系列(三)

    万次阅读 多人点赞 2017-10-14 17:15:39
    小猪的C语言快速入门系列(三)标签: C语言本节引言:在上一节中,对C语言的基本语法进行了学习,类比成学英语的话,我们现在 只是会单词而已,组成一个个句子还需要学习一些语法,本节学习的就是两对 输入输出函数...
1 2 3 4 5 ... 20
收藏数 1,117,327
精华内容 446,930
关键字:

入门