QQ登录

只需要一步,快速开始

 注册地址  找回密码

tag 标签: 知识

相关帖子

版块 作者 回复/查看 最后发表
神经网络知识 attachment 神经网络与机器学习 hanyuebeijiayi 2011-8-20 2 2697 蓝色琉璃 2011-8-21 15:01
数模入门请教 数模奋斗日记 carrotfly 2011-11-12 2 2158 A向远方飞 2013-11-13 17:34
1985-2007年美国赛的题目 attachment 美国大学生数学建模竞赛(MCM/ICM) 只为上财梦 2012-1-8 3 2296 薄菏沙冰 2013-1-20 15:28
MCM--与全世界大学生同台竞技 attachment 比赛感想 sdccumcm 2012-2-19 16 5284 刘星星 2012-8-19 19:33
那些年,我们一起做的数学建模 - [!price! 2 点体力] 比赛感想 1546397057 2012-4-20 2 2194 う零度の味道 2012-7-9 20:30
学习建模需要哪些专业知识啊 数模问题互助 xzwmrp 2012-6-1 3 2030 杨笑很好笑 2012-7-1 18:49
刘克峰:知识,技巧与想象力 数学基础 远行的人 2012-6-1 6 3989 空木葬花 2014-3-18 10:11
二十二岁,需要用心去成长!转载 泼水街 Seawind2012 2012-6-6 15 4391 挣脱依靠 2014-7-13 11:41
数模感想(一) 建议交流区 Create_our_futu 2012-7-16 176 23666 1069423128 2018-6-6 10:53
参加CUMCM应该掌握什么知识 数模问题互助 325 2012-7-21 4 1294 wish_豪 2012-8-3 14:08
求助统计知识 SPSS论坛 小小求知者 2012-7-23 5 1632 白曼青 2012-7-26 21:02
EXCEL的知识 建模 attachment 初等数学 紫砂蓝飞 2012-8-3 14 4475 弘道 2014-7-28 07:00
lingo软件和知识 attachment 初等数学 紫砂蓝飞 2012-8-3 14 4798 zhou_kai_qi 2014-7-28 14:24
matlab拟合知识 attachment 初等数学 紫砂蓝飞 2012-8-3 12 23157 jerk 2019-3-29 16:00
灰色预测知识 attachment 初等数学 紫砂蓝飞 2012-8-3 41 26388 旺旺碎冰冰 2023-9-4 23:40
lingo模型求助 attach_img LINDO\LINGO论坛 271934581 2012-8-3 3 1118 head_@_WOLF 2012-8-6 15:02
自我感觉 数模经验分享 卧听风雨 2012-8-14 3 1360 秋leaves 2012-8-15 10:11
MATLAB知识求解 attachment Matlab 资料库 视频 教程 讲义 代码 独倚烟花笑つ 2012-8-16 4 2102 永远平安529 2012-8-16 20:54
求各路大神指点~编程时最需要matlab的哪些知识啊?? 数模经验分享 68day68@sina.co 2012-8-23 0 1061 68day68@sina.co 2012-8-23 19:28
求筒仓流体知识 五一数学建模联赛(苏北) 1530013909 2012-8-24 0 1743 1530013909 2012-8-24 19:59

相关日志

分享 MATLAB入门教程
热度 1 卫博生 2013-9-23 13:04
MATLAB 入门教程 1 . MATLAB 的基本知识 1-1 、基本运算与函数 在 MATLAB 下进行基本数学运算,只需将运算式直接打入提示号( )之後,并按入 Enter 键即可。例如: (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB 会将运算结果直接存入一变数 ans ,代表 MATLAB 运算後的答案( Answer )并显示其数值於萤幕上。 小提示: "" 是 MATLAB 的提示符号( Prompt ),但在 PC 中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到 MATLAB 的运算结果。 我们也可将上述运算式的结果设定给另一个变数 x : x = (5*2+1.3-0.8)*10^2/25 x = 42 此时 MATLAB 会直接显示 x 的值。由上例可知, MATLAB 认识所有一般常用到的加( + )、减( - )、乘( * )、除( / )的数学运算符号,以及幂次运算( ^ )。 小提示: MATLAB 将所有变数均存成 double 的形式,所以不需经过变数宣告( Variable declaration )。 MATLAB 同时也会自动进行记忆体的使用和回收,而不必像 C 语言 , 必须由使用者一一指定 . 这些功能使的 MATLAB 易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让 MATLAB 每次都显示运算结果,只需在运算式最後加上分号(;)即可 ,如下例: y = sin(10)*exp(-0.3*4^2); 若要显示变数 y 的值,直接键入 y 即可: y y =-0.0045 在上例中, sin 是正弦函数, exp 是指数函数 ,这些都是 MATLAB 常用到的数学函数。 下表即为 MATLAB 常用的基本数学函数及三角函数: 小整理: MATLAB 常用的基本数学函数 abs(x) :纯量的绝对值或向量的长度 angle(z) :复 数 z 的相角 (Phase angle) sqrt(x) :开平方 real(z) :复数 z 的实部 imag(z) :复数 z 的虚部 conj(z) :复数 z 的共轭复数 round(x) :四舍五入至最近整数 fix(x) :无论正负,舍去小数至最近整数 floor(x) :地板函数,即舍去正小数至最近整数 ceil(x) :天花板函数,即加入正小数至最近整数 rat(x) :将实数 x 化为分数表示 rats(x) :将实数 x 化为多项分数展开 sign(x) :符号函数 (Signum function) 。 当 x0 时, sign(x)=-1 ; 当 x=0 时, sign(x)=0; 当 x0 时, sign(x)=1 。 小整理 : MATLAB 常用的三角函数 sin(x) :正弦函数 cos(x) :馀弦函数 tan(x) :正切函数 asin(x) :反正弦函数 acos(x) :反馀弦函数 atan(x) :反正切函数 atan2(x,y) :四象限的反正切函数 sinh(x) :超越正弦函数 cosh(x) :超越馀弦函数 tanh(x) :超越正切函数 asinh(x) :反超越正弦函数 acosh(x) :反超越馀弦函数 atanh(x) :反超越正切函数 变数也可用来存放向量或矩阵,并进行各种运算,如下例的列向量( Row vector )运算: x = ; y = 2*x+1 y = 3 7 11 5 小提示: 变数命名的规则 1. 第一个字母必须是英文字母 2. 字母间不可留空格 3. 最多只能有 19 个字母, MATLAB 会忽略多馀字母 我们可以随意更改、增加或删除向量的元素: y(3) = 2 % 更改第三个元素 y =3 7 2 5 y(6) = 10 % 加入第六个元素 y = 3 7 2 5 0 10 y(4) = ; % Matlab 区分大小写 A = 1 2 3 4 5 6 7 8 9 10 11 12 同样地,我们可以对矩阵进行各种处理: A(2,3) = 5 % 改变位於第二列,第三行的元素值 A = 1 2 3 4 5 6 5 8 9 10 11 12 B = A(2,1:3) % 取出部份矩阵 B B = 5 6 5 A = % 将 B 转置後以行向量并入 A 注意:矩阵行列。 A = 1 2 3 4 5 5 6 5 8 6 9 10 11 12 5 A(:, 2) = % 加入第四列 A = 1 3 4 5 5 5 8 6 9 11 12 5 4 3 2 1 A( , :) = , a 和 b 为数值式 int(f,'t',a,b) 传回 f 对独立变数 t 的积分值,积分区间为 , a 和 b 为数值式 int(f,'m','n') 传回 f 对预设变数的积分值,积分区间为 , m 和 n 为符号式 我们示范几个例子: S1 = '6*x^3-4*x^2+b*x-5'; S2 = 'sin(a)'; S3 = 'sqrt(x)'; int(S1) ans= 3/2*x^4-4/3*x^3+1/2*b*x^2-5*x int(S2) ans= -cos(a) int(S3) ans= 2/3*x^(3/2) int(S3,'a','b') ans= 2/3*b^(3/2)- 2/3*a^(3/2) int(S3,0.5,0.6) ans= 2/25*15^(1/2)-1/6*2^(1/2) numeric(int(S3,0.5,0.6)) % 使用 numeric 函数可以计算积分的数值 ans= 0.0741 2 . 3 求解常微分方程式 MATLAB 解常微分方程式的语法是 dsolve('equation','condition') ,其中 equation 代表常微分方程式即 y'=g(x,y) ,且须以 Dy 代表一阶微分项 y'   D2y 代表二阶微分项 y''  , condition 则为初始条件。 假设有以下三个一阶常微分方程式和其初始条件 y'=3x2, y(2)=0.5 y'=2.x.cos(y)2, y(0)=0.25 y'=3y+exp(2x), y(0)=3 对应上述常微分方程式的符号运算式为: soln_1 = dsolve('Dy = 3*x^2','y(2)=0.5') ans= x^3-7.500000000000000 ezplot(soln_1, ) % 看看这个函数的长相 soln_2 = dsolve('Dy = 2*x*cos(y)^2','y(0) = pi/4') ans= atan(x^2+1) soln_3 = dsolve('Dy = 3*y + exp(2*x)',' y(0) = 3') ans= -exp(2*x)+4*exp(3*x) 2 . 4 非线性方程式的实根 要求任一方程式的根有三步骤: 先定义方程式。要注意必须将方程式安排成 f(x)=0 的形态,例如一方程式为 sin(x)=3 , 则该方程式应表示为 f(x)=sin(x)-3 。可以 m-file 定义方程式。 代入适当范围的 x, y(x) 值,将该函数的分布图画出,藉以了解该方程式的「长相」。 由图中决定 y(x) 在何处附近 (x0) 与 x 轴相交,以 fzero 的语法 fzero('function',x0) 即可求出在 x0 附近的根,其中 function 是先前已定义的函数名称。如果从函数分布图看出根不只一个,则须再代入另一个在根附近的 x0 ,再求出下一个根。 以下分别介绍几数个方程式,来说明如何求解它们的根。 例一、方程式为 sin(x)=0 我们知道上式的根有 ,求根方式如下: r=fzero('sin',3) % 因为 sin(x) 是内建函数,其名称为 sin ,因此无须定义它 , 选择 x=3 附近求根 r=3.1416 r=fzero('sin',6) % 选择 x=6 附近求根 r = 6.2832 例二、方程式为 MATLAB 内建函数 humps ,我们不须要知道这个方程式的形态为何,不过我们可以将它划出来,再找出根的位置。求根方式如下: x=linspace(-2,3); y=humps(x); plot(x,y), grid % 由图中可看出在 0 和 1 附近有二个根 r=fzero('humps',1.2) r = 1.2995 例三、方程式为 y=x.^3-2*x-5 这个方程式其实是个多项式,我们说明除了用 roots 函数找出它的根外,也可以用这节介绍的方法求根,注意二者的解法及结果有所不同。求根方式如下: % m-function, f_1.m function y=f_1(x) % 定义 f_1.m 函数 y=x.^3-2*x-5; x=linspace(-2,3); y=f_1(x); plot(x,y), grid % 由图中可看出在 2 和 -1 附近有二个根 r=fzero('f_1',2); % 决定在 2 附近的根 r = 2.0946 p= r=roots(p) % 以求解多项式根方式验证 r = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i 2 . 5 线性代数方程(组)求解 我们习惯将上组方程式以矩阵方式表示如下 AX=B 其中 A 为等式左边各方程式的系数项, X 为欲求解的未知项, B 代表等式右边之已知项 要解上述的联立方程式,我们可以利用矩阵左除 \ 做运算,即是 X=A\B 。 如果将原方程式改写成 XA=B 其中 A 为等式左边各方程式的系数项, X 为欲求解的未知项, B 代表等式右边之已知项 注意上式的 X, B 已改写成列向量, A 其实是前一个方程式中 A 的转置矩阵。上式的 X 可以矩阵右除 / 求解,即是 X=B/A 。 若以反矩阵运算求解 AX=B, X=B ,即是 X=inv(A)*B ,或是改写成 XA=B, X=B ,即是 X=B*inv(A) 。 我们直接以下面的例子来说明这三个运算的用法: A= ; % 将等式的左边系数键入 B= '; % 将等式右边之已知项键入, B 要做转置 X=A\B % 先以左除运算求解 X = % 注意 X 为行向量 -2 5 6 C=A*X % 验算解是否正确 C = % C=B 10 5 -1 A=A'; % 将 A 先做转置 B= ; X=B/A % 以右除运算求解的结果亦同 X = % 注意 X 为列向量 10 5 -1 X=B*inv(A); % 也可以反矩阵运算求解 3. 基本 xy 平面绘图命令 MATLAB 不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示( Scientific visualization )。 本节将介绍 MATLAB 基本 xy 平面及 xyz 空间的各项绘图命令,包含一维曲线及二维曲面的绘制、列印及存档。 plot 是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的 x 及 y 座标。 下例可画出一条正弦曲线: close all; x=linspace(0, 2*pi, 100); % 100 个点的 x 座标 y=sin(x); % 对应的 y 座标 plot(x,y); 小整理: MATLAB 基本绘图函数 plot: x 轴和 y 轴均为线性刻度( Linear scale ) loglog: x 轴和 y 轴均为对数刻度( Logarithmic scale ) semilogx: x 轴为对数刻度, y 轴为线性刻度 semilogy: x 轴为线性刻度, y 轴为对数刻度 若要画出多条曲线,只需将座标对依次放入 plot 函数即可: plot(x, sin(x), x, cos(x)); 若要改变颜色,在座标对後面加上相关字串即可: plot(x, sin(x), 'c', x, cos(x), 'g'); ! 若要同时改变颜色及图线型态( Line style ),也是在座标对後面加上相关字串即可: plot(x, sin(x), 'co', x, cos(x), 'g*'); 小整理: plot 绘图函数的叁数 字元 颜色字元 图线型态 y 黄色 . 点 k 黑色 o 圆 w 白色 x xb 蓝色 + +g 绿色 * *r 红色 - 实线 c 亮青色 : 点线 m 锰紫色 -. 点虚线 -- 虚线 图形完成後,我们可用 axis( ) 函数来调整图轴的范围: axis( ); 此外, MATLAB 也可对图形加上各种注解与处理: xlabel('Input Value'); % x 轴注解 ylabel('Function Value'); % y 轴注解 title('Two Trigonometric Functions'); % 图形标题 legend('y = sin(x)','y = cos(x)'); % 图形注解 grid on; % 显示格线 我们可用 subplot 来同时画出数个小图形於同一个视窗之中: subplot(2,2,1); plot(x, sin(x)); subplot(2,2,2); plot(x, cos(x)); subplot(2,2,3); plot(x, sinh(x)); subplot(2,2,4); plot(x, cosh(x)); MATLAB 还有其他各种二维绘图函数,以适合不同的应用,详见下表。 小整理:其他各种二维绘图函数 bar 长条图 errorbar 图形加上误差范围 fplot 较精确的函数图形 polar 极座标图 hist 累计图 rose 极座标累计图 stairs 阶梯图 stem 针状图 fill 实心图 feather 羽毛图 compass 罗盘图 quiver 向量场图 以下我们针对每个函数举例。 当资料点数量不多时,长条图是很适合的表示方式: close all; % 关闭所有的图形视窗 x=1:10; y=rand(size(x)); bar(x,y); 如果已知资料的误差量,就可用 errorbar 来表示。下例以单位标准差来做资的误差量: x = linspace(0,2*pi,30); y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e) 对於变化剧烈的函数,可用 fplot 来进行较精确的绘图,会对剧烈变化处进行较密集的取样,如下例: fplot('sin(1/x)', ); % 是绘图范围 ! 若要产生极座标图形,可用 polar : theta=linspace(0, 2*pi); r=cos(4*theta); polar(theta, r); 对於大量的资料,我们可用 hist 来显示资料的分 情况和统计特性。下面几个命令可用来验证 randn 产生的高斯乱数分 : x=randn(5000, 1); % 产生 5000 个 m=0 , s=1 的高斯乱数 hist(x,20); % 20 代表长条的个数 rose 和 hist 很接近,只不过是将资料大小视为角度,资料个数视为距离,并用极座标绘制 表示: x=randn(1000, 1); rose(x); stairs 可画出阶梯图: x=linspace(0,10,50); y=sin(x).*exp(-x/3); stairs(x,y); ! stems 可产生针状图,常被用来绘制数位讯号: x=linspace(0,10,50); y=sin(x).*exp(-x/3); stem(x,y); stairs 将资料点视为多边行顶点,并将此多边行涂上颜色: x=linspace(0,10,50); y=sin(x).*exp(-x/3); fill(x,y,'b'); % 'b' 为蓝色 feather 将每一个资料点视复数,并以箭号画出: theta=linspace(0, 2*pi, 20); z = cos(theta)+i*sin(theta); feather(z); compass 和 feather 很接近,只是每个箭号的起点都在圆点: theta=linspace(0, 2*pi, 20); z = cos(theta)+i*sin(theta); compass(z); ! 4. 三维网图的高级处理 1. 消隐处理 例 . 比较网图消隐前后的图形 z=peaks(50); subplot(2,1,1); mesh(z); title(' 消隐前的网图 ') hidden off subplot(2,1,2) mesh(z); title(' 消隐后的网图 ') hidden on colormap( ) 2. 裁剪处理 利用不定数 NaN 的特点 , 可以对网图进行裁剪处理 例 . 图形裁剪处理 P=peaks(30); subplot(2,1,1); mesh(P); title(' 裁剪前的网图 ') subplot(2,1,2); P(20:23,9:15)=NaN*ones(4,7); % 剪孔 meshz(P) % 垂帘网线图 title(' 裁剪后的网图 ') colormap( ) % 蓝色网线 注意裁剪时矩阵的对应关系 , 即大小一定要相同 . 3. 三维旋转体的绘制 为了一些专业用户可以更方便地绘制出三维旋转体 ,MATLAB 专门提供了 2 个函数 : 柱面函数 cylinder 和球面函数 sphere (1) 柱面图 柱面图绘制由函数 cylinder 实现 . =cylinder(R,N) 此函数以母线向量 R 生成单位柱面 . 母线向量 R 是在单位高度里等分刻度上定义的半径向量 .N 为旋转圆周上的分格线的条数 . 可以用 surf(X,Y,Z) 来表示此柱面 . =cylinder(R) 或 =cylinder 此形式为默认 N=20 且 R= 例 . 柱面函数演示举例 x=0:pi/20:pi*3; r=5+cos(x); =cylinder(r,30); mesh(a,b,c) 例 . 旋转柱面图 . r=abs(exp(-0.25*t).*sin(t)); t=0:pi/12:3*pi; r=abs(exp(-0.25*t).*sin(t)); =cylinder(r,30); mesh(X,Y,Z) colormap( ) (2). 球面图 球面图绘制由函数 sphere 来实现 =sphere(N) 此函数生成 3 个 (N+1)*(N+1) 的矩阵 , 利用函数 surf(X,Y,Z) 可产生单位球面 . =sphere 此形式使用了默认值 N=20. Sphere(N) 只是绘制了球面图而不返回任何值 . 例 . 绘制地球表面的气温分布示意图 . =sphere(40); t=abs(c); surf(a,b,c,t); axis('equal') % 此两句控制坐标轴的大小相同 . axis('square') colormap('hot')
个人分类: Matlab基础|628 次阅读|0 个评论
分享 苦行者
苦行者 2013-8-17 08:07
初次参加数学建模,有很多知识不会,软件也不熟练,写论文也很困难
个人分类: 心情|153 次阅读|0 个评论
分享 建模学习心得1
热度 1 sun08160035 2013-8-11 09:32
建模这东西是蛮有用的,不过接触过后还是觉得学习来很头疼,数学的知识到不是大问题,matlab软件的东西是缺乏实践找不到方向,感觉不知所措。感觉先把几种算法过下1概率模型、马氏链模型2随机模拟、蒙卡、排队论3聚类分析、判别分析4网格搜索、贪婪算法、模拟退火
个人分类: 学习点滴|207 次阅读|0 个评论
分享 建模经验浅谈
热度 1 zhaosnow1 2012-4-8 10:29
今天上来看到了好多写数学建模经验的,于是心血来潮就决定也写一写。首先选队友最好不要选同一个系的,这样知识才可以互补的。在我看来建模最重要的就是自信心,想当初我们参加省赛的时候本来都做完了,但是在交论文前我发现我们的结论是错的,结果悲剧的后来决定就不交论文了。做了一件非常后悔的事,当国赛开始要报名的时候又错过了报名的时间,于是就从此不再看建模的书籍了。后来放假前美赛要报名了,我们就一冲动报了名,结果在学校待了20天才开学。这里小说一下国赛比较难获奖,而美赛比较容易获奖但是100美元的报名费也是很贵的。报了之后回家也没怎么看书,惭愧啊,matlab还是在来的时候在火车上看完的。心里当时那个紧张啊,不自信啊,毕竟自己又没怎么准备,也没有培训过,也没有太多的经验。但是很庆幸的是我们的时间安排的比较好,分工也比较明确。这里奉劝一句想要参加没赛的同学在组队的时候一定要选择一个英语学得比较好的人,毕竟那可是纯英语论文啊。不扯了,关键是选题的问题,必须的花一定的时间去选题,一般是一个下午。当时我们隔壁的因为没选好题就开始做了,做了一半发现不会做了就又还题做了,结果可想而知了。。。。接下来便是查资料建模了,这里要是有个编程比较好的人就比较有利多了,尤其是搞过算法的人呵呵,可惜我也不是变成强人啊。。。。。。只能算是小强中的小强。接着便是写论文,论文必须得留出一天的时间写,不然是写不好的,很大程度上论文写好了,就能获奖呵呵。至于书籍嘛,这个我也不太清楚就不卖弄了。反正是对我来说自信是最重要的,要是没有很强的自信心,估计我们挺不过啦。希望大家以后多上上数学中国网站,里面还是有很多好东西的。 希望大家都可以取到好的成绩。
297 次阅读|0 个评论
分享 LaTeX入门知识3,包括从最头开始的案例
热度 2 aqua2001 2011-11-1 12:32
LaTeX入门知识3,包括从最头开始的案例
这是英文LaTeX的案例。在里面有最基本的摘要、分节,没有更复杂的内容了,正文也只写了两个很简单的句子而已。我们如果把这个文件看明白,剩下的无非是在这个基础之上继续填补和增加细节而已。这是屏幕截图,编辑器的界面(用不同的程序时,这个编辑界面不太一样,这里只是一个演示而已)。最左侧的行号是编辑器自动显示的,文中蓝字是被识别出的格式代码,好用一点的编辑器一般都能自动识别代码并用彩色突出显示,这种功能虽不必要,但用起来的确舒服。红字是注释,自己写的时候可以不要。空行是我为了明显起见故意空的,不必要。如果写的不是正规论文,无需摘要,那把摘要环境那段删掉也无妨。 编译出来的效果截图如下。 中文的案例可以见下面。当然这里有一个问题:在下面演示XeTeX的时候,我重新设定了字体,英文中文的都进行了手动设定(英文的不设也有默认值,中文的不设定不行)。如果你的机器里没有这个字体,那恐怕需要找一个能用的字体来替换一下。而这里唯一可能有问题的是第7行的“中文无衬线字体”,这应是类似黑体的一种字体,这里写的STHeiti,是华文黑体。如果你用的是Mac OS X那肯定经常见这个字体,如果你用的是windows,恐怕要改成SimHei(windows上自带的)。如果想使用别的字体,就换成别的字体的名字好了。想一次列出所有已安装字体的名字,请在命令行模式下,用命令fc-list来看看。别忘了编译的时候要用XeLaTeX。 来看效果: 当然,我们的阶段性任务基本算是完成了。中文也显示出来了,原则上,我们只需要在这个最简单案例上,继续加更多的\section和文字就够了。不过,这里有个问题:我如果想自己设定一些格式规范,譬如章节标题我想用那个刚刚辛苦定义好的黑体,怎么处理?临时改用“无衬线字体”,可以用命令\textsf{},大括号里就是用黑体的文字。当然上次日志也说了,最好不要每条标题都手动改。处理这种问题,就涉及到一些常用宏包。
2446 次阅读|0 个评论
分享 LaTeX入门知识(4)
热度 3 aqua2001 2011-10-6 22:27
再来说说打中文的问题。标准的LaTeX里是只能用英文的,输入的中文字符它不识别。处理中文有若干办法。包括TY,CCT,CJK等。究其原理都是对含有中文的源文件做了“预处理”,譬如我们使用CJK宏包的时候,它会把其中的中文字符读出来,并转化成一系列TeX命令,大约就是告诉系统在这个位置有个字符,然后把字符转译成它在中文字符集中的编码。在生成输出结果的时候,再到相应的字体文件里找到对应编码的字形,放到相应的位置上就是了。对英文字符,TeX本身就能识别,所以可以说CJK是让TeX学会认识中文字符的办法。这几种方法里,CCT曾经流行,现在在一些刊物的投稿模板里会用到。CJK普遍被认为处理效果较好,用起来也相当方便。但我这里打算更多推荐处理中文的最简单方法──XeTeX。 XeTeX是一种能够直接处理Unicode字符的TeX编译器。它比原先的TeX有两个功能上的扩展:天生认识Unicode字符,所以无需CJK等外部工具去“教”它。而且Unicode里包含的字符极其广泛,除中文外,日文、俄文、阿拉伯文、蒙文、韩文、藏文等原则上都可以一视同仁。当然具体工作的时候还需要适合该文字格式习惯的宏包配合,譬如蒙文需要竖排。还有一个新功能:可以直接调用系统中的字体文件。原来想用漂亮的字体需要很麻烦的处理手续,现在好了,只要系统里有的都能直接使用。 现在的新版TeX套装里都包括了XeTeX,所以到时候直接用它去编译就是了。而源文件在写的时候,除了按照正常的LaTeX规范去写(可以直接在里面加中文),还有两点需要注意的地方。 第一,源文件的编码一定要选择UTF-8,XeTeX才能识别。许多软件默认把编码选成GB18030之类,需要修改一下。 第二,鉴于中文常用字体里的英文字母基本没有能看得下去的,所以中文和英文混合排版时一般分别使用不同字体。而且中英文混合使用的时候,它们之间的间距之类的事情也需要设定。所以几乎是一定要使用相应的宏包来解决这个问题。譬如xeCJK或者zhspacing等都是解决这类问题而生的。以xeCJK为例,只要我们在开头加上\usepackage{xeCJK},然后再写几条定义默认字体的命令(详情请google“xeCJK宏包”,有其说明文件,用法非常简明),就可以畅通无阻地使用中文了。 用TeX排版,为发挥其优势,应当尽可能地遵循“内容与形式分离”的原则。具体说来,就是在文件最前面的版式定义里最好把文件的基本格式都定义清楚。然后真正在写作正文的时候,我们可以再也不去考虑排版格式。在写正文的时候,你需要把自己当成一个纯粹的作者。你所关注的就是哪里分段?哪里分节?哪里加脚注?哪里写引用?诸如此类问题。这些问题针对的都是“内容的结构”,而不是具体的版面效果。不要去关心这里是不是要换行,这里是不是要多打两个空格,这里行间距调大不好看,这里怎么对不齐之类的问题。虽然这些问题在极个别时候也要操些心,但也应在全文打完以后再做微调。有关版式的命令,譬如\par是缩进换行,但它在我们写正文的时候根本不该见到。如果要分自然段,应该打双回车。分自然段和缩进换行不是一个层面的东西,譬如某些特殊的版式下,分自然段也许不是缩进换行呢?缩进换行,甚至更深入的该缩进多少,行间距该空多少,这都是印刷厂的工作。作者是不该操太多心的。 当然这个原则有时也需要变通,譬如作为作者,认为此处一些文字需要强调,必须使用特殊的字体或者颜色──那当然也只能自己使用命令去手动修改。不过,如果一篇文章里满篇都是调整格式的命令,甚至连内容结构都不明显了,那显然是非常错误的使用习惯。
1786 次阅读|0 个评论
qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2024-5-17 03:46 , Processed in 0.249455 second(s), 29 queries .

回顶部