以下是案例,以我的一篇早年LaTeX报告做分析。
这里是具体代码:
\documentclass{article}
\usepackage[a4paper, top=2.54cm, bottom=2.54cm, left=2.54cm, right=2.54cm]{geometry}
\usepackage[14pt]{ctex}
\usepackage{fancyhdr}
\usepackage{amsmath}
\usepackage{listings}
\usepackage{color}
\usepackage{graphicx}
\newCJKfontfamily{\songtib}[AutoFakeBold={3.17}]{SimSun}
\pagestyle{fancy}
\fancyhf{} % 清除默认的页眉页脚
\fancyhead[L]{姓名:JerryMain} % 页眉左侧显示小说集标题
\fancyhead[R]{学号:123456789} % 页眉右侧显示页码
\fancyfoot[C]{\thepage}
\lstset{
basicstyle=\ttfamily, % 使用等宽字体
keywordstyle=\color{blue}, % 关键词颜色
commentstyle=\color{green}, % 注释颜色
stringstyle=\color{red}, % 字符串颜色
breaklines=true, % 自动换行
numbers=left, % 行号在左侧显示
numberstyle=\tiny, % 行号字体大小
frame=single, % 代码框线样式
}
\begin{document}
\begin{center}
\songtib
\fontsize{24pt}{18pt}
\textbf{工科数学分析实验报告}
\end{center}
\begin{center}
\songti
\fontsize{18pt}{24pt}
\textbf{实验一}
\end{center}
\section{\fontsize{14pt}{10pt}\selectfont{实验题目}}
为测定刀具的磨损速度,每隔一小时测量一次刀具的厚度,由此得到以下数据。
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
\hline
时间$t$/h & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\
\hline
厚度$y$/mm & 27.0 & 26.8 & 26.5 & 26.3 & 26.1 & 25.7 & 25.3 & 24.8\\
\hline
\end{tabular}
是根据这组数据建立$y$与$t$之间的拟合函数。
\section{\fontsize{14pt}{10pt}\selectfont{实验目的和意义}}
利用数学软件MATLAB(R2024b)来通过最小二乘法解决线性拟合问题。
\section{\fontsize{14pt}{10pt}\selectfont{程序设计}}
\begin{lstlisting}[language=MATLAB]
%数据导入
t=[0,1,2,3,4,5,6,7]';
y=[27.0,26.8,26.5,26.3,26.1,25.7,25.3,24.8]';
p=polyfit(t,y,1);
t_fit=linspace(min(t),max(t),100);
y_fit=polyval(p,t_fit);
%画图
figure;
plot(t,y,'o','MarkerSize',8,'LineWidth',2);
hold on;
plot(t_fit,y_fit,'-','LineWidth',2);
xlabel('时间t(h)');
ylabel('厚度y(mm)');
title('刀具厚度随时间的变化');
legend('原始数据','线性拟合');
grid on;
%输出
fprintf('拟合的线性方程为 >> y=%.4f t + %.4f\n',p(1),p(2));
\end{lstlisting}
\newpage
\section{\fontsize{14pt}{10pt}\selectfont{程序运行结果}}
\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{test1.jpg} % 插入图片
\caption{线性拟合结果}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{test2.png} % 插入图片
\caption{程序运行结果}
\end{figure}
\newpage
\begin{center}
\songti
\fontsize{18pt}{24pt}
\textbf{实验二}
\end{center}
\setcounter{section}{0}
\section{\fontsize{14pt}{10pt}\selectfont{实验题目}}
绘制函数\(f(x,y)=e^{-\frac{x^2+2y^2}{10^4}}\)的等高线图和梯度线图。
\section{\fontsize{14pt}{10pt}\selectfont{实验目的和意义}}
利用数学软件MATLAB(R2024b)来通过最小二乘法解决线性拟合问题。
\section{\fontsize{14pt}{10pt}\selectfont{程序设计}}
\begin{lstlisting}[language=MATLAB]
% 定义x和y的范围
x = -100:10:100;
y = -100:10:100;
% 创建网格
[X, Y] = meshgrid(x, y);
% 计算f(x,y)
F = exp(-(X.^2 + 2*Y.^2)/10^4);
% 绘制等高线图,添加颜色条
figure;
contour(X, Y, F, 20);
colorbar;
title('f(x,y)的等高线图');
xlabel('x');
ylabel('y');
% 计算梯度
[GradX, GradY] = gradient(F, 10, 10);
% 绘制梯度线图,放大100倍
figure;
quiver(X, Y, GradX*100, GradY*100);
title('f(x,y)的梯度线图(放大)');
xlabel('x');
ylabel('y');
\end{lstlisting}
\newpage
\section{\fontsize{14pt}{10pt}\selectfont{程序运行结果}}
\begin{figure}[h]
\centering
\includegraphics[width=0.65\textwidth]{test3.jpg} % 插入图片
\caption{梯度方向图}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.65\textwidth]{test4.jpg} % 插入图片
\caption{等高线图}
\end{figure}
\end{document}
由于篇幅限制,这里不做成品的搬运(其实是懒)。
逐行代码解析
-
[1] 宏包调用
这是声明文章为articlearticlearticle类型。
\documentclass{article}
这里调用geometrygeometrygeometry库,并设置为
a4paper
,说明文章使用为A4纸。\usepackage[a4paper, top=2.54cm, bottom=2.54cm, left=2.54cm, right=2.54cm]{geometry}
这里调用ctexctexctex包,并设置为
14pt
,说明正文中中文字体为14pt14pt14pt大小 (约为四号) 。\usepackage[14pt]{ctex}
这里调用了fancyhdrfancyhdrfancyhdr包,可以自定义页眉页脚。
\usepackage{fancyhdr}
这里调用了amsmathamsmathamsmath包,支持更强大的数学公式输入。
\usepackage{amsmath}
这里调用了listingslistingslistings库,支持源代码展示。
\usepackage{listings}
这里调用了colorcolorcolor库,支持更强大的颜色编辑。
\usepackage{color}
这里调用了graphicxgraphicxgraphicx库,支持本地图片插入。
\usepackage{graphicx}
-
[2] 预处理
这是ctexctexctex包提供的一种命令,用于定义新的字体。
例如这里定义了songtib
字体,在原有SimSunSimSunSimSun字体的基础上,手动控制粗体参数为3.173.173.17。\newCJKfontfamily{\songtib}[AutoFakeBold={3.17}]{SimSun}
这是fancyhdrfancyhdrfancyhdr提供的一种命令,在这里对页眉页脚进行自定义。
\pagestyle{fancy} % 显示页眉页脚 \fancyhf{} % 清除默认的页眉页脚 \fancyhead[L]{姓名:JerryMain} % 页眉左侧显示 \fancyhead[R]{学号:123456789} % 页眉右侧显示 \fancyfoot[C]{\thepage} % 页脚中间显示
这是listingslistingslistings提供的一种命令,对代码展示的自定义。
\lstset { basicstyle=\ttfamily, % 使用等宽字体 keywordstyle=\color{blue}, % 关键词蓝色 commentstyle=\color{green}, % 注释绿色 stringstyle=\color{red}, % 字符串红色 breaklines=true, % 自动换行 numbers=left, % 行号在左侧显示 numberstyle=\tiny, % 行号字体大小 frame=single, % 代码框线样式 }
-
[3] 正文部分
无需多言,正文以此开头。
\begin{document}
下面一部分是标题(不分大小),并且附带居中。
\begin{center}
与\end{center}
搭配,写在其内部的文字会被居中。
\songtib
调用粗宋体字体。
\fontsize{24pt}{18pt}
,前后参数分别表示文字和行距的大小。
\textbf{工科数学分析实验报告}
,使括号内的字变粗再输出。\begin{center} \songtib \fontsize{24pt}{18pt} \textbf{工科数学分析实验报告} \end{center} \begin{center} \songti \fontsize{18pt}{24pt} \textbf{实验一} \end{center}
这里是sectionsectionsection设计。
\section{}
章节设置
内置的\fontsize{}{}
与\selectfont{示例文字}
会将局部文字按照fontsizefontsizefontsize作用到sectionsectionsection中。\section{\fontsize{14pt}{10pt}\selectfont{实验题目}}
正文码字部分,略过。为测定刀具的磨损速度,每隔一小时测量一次刀具的厚度,由此得到以下数据。
以下为制表
begin{tabular}
和end{tabular}
又是非常经典的表格作用域。其中\begin{}
后接{|c|c|c|c|c|c|}
为每一行单元格的数目。
下面就是一行\hline
,一行数据。
\hline
是画线用的,紧接着每行之间的数据需要用&
来隔开。
至于$t$
,两个$
号是声明数学公式用的。\begin{tabular}{|c|c|c|c|c|c|c|c|c|} \hline 时间$t$/h & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 \\ \hline 厚度$y$/mm & 27.0 & 26.8 & 26.5 & 26.3 & 26.1 & 25.7 & 25.3 & 24.8\\ \hline \end{tabular}
前文提及,略过。是根据这组数据建立$y$与$t$之间的拟合函数。 \section{\fontsize{14pt}{10pt}\selectfont{实验目的和意义}} 利用数学软件MATLAB(R2024b)来通过最小二乘法解决线性拟合问题。 \section{\fontsize{14pt}{10pt}\selectfont{程序设计}}
这里用到了listingslistingslistings库来展示代码。
\begin{lstlisting}[language=MATLAB]
与\end{lstlisting}
依然是非常经典的一对作用域。
\begin{lstlisting}[lauguage=MATLAB]
,{lstlisting}
明确listinglistinglisting库,[lauguage=MATLAB]
明确以下为MATLABMATLABMATLAB代码。
剩下的就是原封不动给代码搬过来。\begin{lstlisting}[language=MATLAB] %数据导入 t=[0,1,2,3,4,5,6,7]'; y=[27.0,26.8,26.5,26.3,26.1,25.7,25.3,24.8]'; p=polyfit(t,y,1); t_fit=linspace(min(t),max(t),100); y_fit=polyval(p,t_fit); %画图 figure; plot(t,y,'o','MarkerSize',8,'LineWidth',2); hold on; plot(t_fit,y_fit,'-','LineWidth',2); xlabel('时间t(h)'); ylabel('厚度y(mm)'); title('刀具厚度随时间的变化'); legend('原始数据','线性拟合'); grid on; %输出 fprintf('拟合的线性方程为 >> y=%.4f t + %.4f\n',p(1),p(2)); \end{lstlisting}
新鲜的一页。(newpagenewpagenewpage么,字面意思)
\newpage
前文提及,略过。\section{\fontsize{14pt}{10pt}\selectfont{程序运行结果}}
这里插入图片。
又是非常经典的
begin{figure}
与\end{figure}
作用域。
\begin{figure}[h]
,创建浮动体 (暂时理解为图片吧,因为我也不知道能放什么) ,[h]
表示here
。我也不知道有什么用,但删掉会出问题
\centering
字面意思,使图片居中。
\includegraphics[width=0.8\textwidth]{test1.jpg}
,插入test1.jpg
,并设置图片宽度为0.8\textwidth
。???
\caption{}
,会在图片下方加上图名,即图1:线性拟合结果。\begin{figure}[h] \centering \includegraphics[width=0.8\textwidth]{test1.jpg} % 插入图片 \caption{线性拟合结果} \end{figure} \begin{figure}[h] \centering \includegraphics[width=0.7\textwidth]{test2.png} % 插入图片 \caption{程序运行结果} \end{figure}
前文提及,略过。\newpage \begin{center} \songti \fontsize{18pt}{24pt} \textbf{实验二} \end{center}
将sectionsectionsection的计数设置为000,这一步在目前文本非常重要。
在这个报告中,我写了两个实验,每个实验的小标题用
\section
实现。
假如没有这个清零操作,那么我实验二的\section
就会从实验一顺延下来。
比如我的实验一写了三个部分,不进行清零操作,我的实验二就会从四开始。
代码也很好理解,\setcounter{section}{0}
,给sectionsectionsection的countercountercounter设置为000。\setcounter{section}{0}
前文提及,略过。\section{\fontsize{14pt}{10pt}\selectfont{实验题目}} 绘制函数\(f(x,y)=e^{-\frac{x^2+2y^2}{10^4}}\)的等高线图和梯度线图。 \section{\fontsize{14pt}{10pt}\selectfont{实验目的和意义}} 利用数学软件MATLAB(R2024b)来通过最小二乘法解决线性拟合问题。 \section{\fontsize{14pt}{10pt}\selectfont{程序设计}} \begin{lstlisting}[language=MATLAB] % 定义x和y的范围 x = -100:10:100; y = -100:10:100; % 创建网格 [X, Y] = meshgrid(x, y); % 计算f(x,y) F = exp(-(X.^2 + 2*Y.^2)/10^4); % 绘制等高线图,添加颜色条 figure; contour(X, Y, F, 20); colorbar; title('f(x,y)的等高线图'); xlabel('x'); ylabel('y'); % 计算梯度 [GradX, GradY] = gradient(F, 10, 10); % 绘制梯度线图,放大100倍 figure; quiver(X, Y, GradX*100, GradY*100); title('f(x,y)的梯度线图(放大)'); xlabel('x'); ylabel('y'); \end{lstlisting} \newpage \section{\fontsize{14pt}{10pt}\selectfont{程序运行结果}} \begin{figure}[h] \centering \includegraphics[width=0.65\textwidth]{test3.jpg} % 插入图片 \caption{梯度方向图} \end{figure} \begin{figure}[h] \centering \includegraphics[width=0.65\textwidth]{test4.jpg} % 插入图片 \caption{等高线图} \end{figure}
别忘了,正文以此结尾。
\end{document}
后记
本人也是小白,之前跟着DeepSeekDeepSeekDeepSeek和ChatGPTChatGPTChatGPT学习LaTeXLaTeXLaTeX水掉了不少东西,现在想在拿起来异常艰难,于是开始动手写这几篇文章。在拾起记忆的同时也希望能帮到大家。作为蒟蒻的我也会不断学习,争取带来更可靠的内容。