tex live2024+VsCode
传统的
Word
编辑格式太头疼啦,所以尝试下新东西latex
环境
-
首先,那当然就是环境了,本人是
windows
,选择Tex Live
发行版,或者MiKTeX。 -
Tex Live可以通过两种途径下载安装
-
下载好后,双击
iso
文件打开,找到如图bat文件,右键选择管理员运行 -
选择advance高级选项,
Adjust searchpath
记得选上,不然后续要要手动添加环境变量,默认是勾选状态,由于本人选择使用vscode
编写,所以取消了安装Texworks前端
的选项, -
有点耐心。。。,安装要很长时间,请勿中途退出
-
显示这样就安装完成了
-
接着打开命令行win+R,输入
cmd
,在窗口内输入xelatex -v
,出现版本信息等说明正常 -
若报错,显示无此命令,可能是环境变量之前没勾选,按下
win+Q
输入高级系统设置,打开环境变量添加path
F:\texlive2024\texlive\2024\bin\windows
配置
-
打开vscode的
setting.json
-
贴入以下配置
//---------LaTeX Workshop 配置开始----------- // 设置是否自动编译,可选:"never", "onSave", "onFileChange" "latex-workshop.latex.autoBuild.run":"never", //文件输出路径,会自动创建temp文件 //"latex-workshop.latex.outDir": "./temp", //右键菜单 "latex-workshop.showContextMenu":true, //从使用的包中自动补全命令和环境 "latex-workshop.intellisense.package.enabled": true, //编译出错时设置是否弹出气泡设置 "latex-workshop.message.error.show": false, "latex-workshop.message.warning.show": false, // 编译工具和命令 "latex-workshop.latex.tools": [ { "name": "xelatex", "command": "xelatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", //"-output-directory=temp", //自定义辅助文件输出路径 //"-outdir=%OUTDIR%", //辅助文件输出路径 "%DOCFILE%" ] }, { "name": "pdflatex", "command": "pdflatex", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", //"-output-directory=temp", //自定义辅助文件输出路径 //"-outdir=%OUTDIR%", //辅助文件输出路径 "%DOCFILE%" ] }, { "name": "latexmk", "command": "latexmk", "args": [ "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-pdf", "-outdir=%OUTDIR%", "%DOCFILE%" ] }, { "name": "bibtex", "command": "bibtex", "args": [ "%DOCFILE%" ] } ], // 用于配置编译链 "latex-workshop.latex.recipes": [ { "name": "XeLaTeX", "tools": [ "xelatex" ] }, { "name": "XeLaTeX*2", "tools": [ "xelatex", "xelatex" ] }, { "name": "PDFLaTeX", "tools": [ "pdflatex" ] }, { "name": "PDFLaTeX*2", "tools": [ "pdflatex", "pdflatex" ] }, { "name": "BibTeX", "tools": [ "bibtex" ] }, { "name": "LaTeXmk", "tools": [ "latexmk" ] }, { "name": "xelatex -> bibtex -> xelatex*2", "tools": [ "xelatex", "bibtex", "xelatex", "xelatex" ] }, { "name": "pdflatex -> bibtex -> pdflatex*2", "tools": [ "pdflatex", "bibtex", "pdflatex", "pdflatex" ] } ], //文件清理。此属性必须是字符串数组 "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo", "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk" ], //设置为onFaild 在构建失败后清除辅助文件 "latex-workshop.latex.autoClean.run": "onFailed", // 使用上次的recipe编译组合 "latex-workshop.latex.recipe.default": "lastUsed", // 用于反向同步的内部查看器的键绑定。ctrl/cmd +点击(默认)或双击 "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click", //设置查看PDF的工具,可选"browser","tab","external" "latex-workshop.view.pdf.viewer": "tab", //---------LaTeX Workshop 配置结束-----------
-
inted 是一个强大的 LaTeX 宏包,用于实现源代码的语法高亮显示。它使用 Python 的 Pygments 库来美化代码,并支持多种编程语言和配色方案。若有需求的话以下是使用 minted 宏包的基本步骤:
安装 minted 宏包 :
- minted 已包含在 TeX Live 发行版中,无需单独安装。
- 确保系统上安装了 Python 2.6 或更高版本,以便支持 Pygments。
安装 Pygments
在 LaTeX 文档中引入 minted :
\usepackage{minted}
-
在左侧栏可以看到编译顺序
-
PDFLaTeX 和 XeLaTeX 是两种常用的 LaTeX 编译方式,它们在使用中有一些显著的区别:
字体支持 :
- PDFLaTeX :默认只支持 TeX 自带的字体,例如 Computer Modern。如果要使用其他字体,需要安装特定的 TeX 字体包,并通过字体宏包如
fontenc
进行设置。 - XeLaTeX :可以直接使用操作系统中的字体,包括 TrueType 和 OpenType 字体。这使得用户可以非常容易地使用各种商业字体和自定义字体。
输入编码 :
- PDFLaTeX :默认的输入编码是 ASCII,对于非英文字符需要使用
inputenc
宏包来设置合适的编码(如 UTF-8)。 - XeLaTeX :默认支持 Unicode,特别适合处理多语言文本,无需额外设置即可直接输入多种语言的文字。
图形和颜色支持 :
- 两者在图形和颜色的支持上基本相似,都支持
graphicx
和color
等宏包。不过在处理特定的 PDF 特性或者更现代的字体技术时,XeLaTeX 可能表现得更好。
编译输出 :
- PDFLaTeX :直接输出 PDF 文件,这一点与 XeLaTeX 相同,但它是通过 DVI 模式间接生成 PDF,可能在某些情况下影响输出的效率和兼容性。
- XeLaTeX :直接生成 PDF 文件,支持更现代的 PDF 特性,如较好的 Unicode 支持和更复杂的文档结构处理。
微排版 :
- PDFLaTeX :可以通过
microtype
宏包来进行高级的微排版设置,如字符间距调整和字距控制。 - XeLaTeX :也支持
microtype
,但在某些字体和语言处理上的兼容性可能略有差异。
总的来说,如果你的文档主要是英文,且对字体要求不高,PDFLaTeX 可能是一个简单有效的选择。而如果你需要处理多语言文档,尤其是需要使用各种商业字体或自定义字体的场合,XeLaTeX 会是更好的选择。
- PDFLaTeX :默认只支持 TeX 自带的字体,例如 Computer Modern。如果要使用其他字体,需要安装特定的 TeX 字体包,并通过字体宏包如
-
接着就可以编译了,找到文件夹下的
tex
文件,打开左侧扩展TEX
栏选择进行编译 -
或者可以设置个快捷键,
-
接着,发现编译错误!
-
排查原因,,应该某些包的问题,先换个模板跑一下
% 导言区 \documentclass{article} %article可以换为book, report, letter, 从而改变文档的整个结构 \usepackage{ctex} %使用ctex宏包,可以正常显示中文 \usepackage{minted} \title{题撒大声地} \author{牛逼hyf} \date{\today} %正文区(文稿区) \begin {document} \maketitle 啊啊啊啊的速度啊啊啊啊速度啊啊啊啊啊啊啊啊 \begin{minted}[frame=single, linenos=true]{python} >>> pip install Pygments >>> pip show pygments >>> py \end{minted} \end{document}
-
编译成功会显示√,
-
接着在左侧TEX栏打开view,或者按
ctrl+alt+v
-
就可以了,但我代码怎么没高亮。。
-
正向跳转,选中一部分代码后
ctrl+alt+j
或者右键菜单,或者通过左侧栏,会有一个红圈提示
排查之前的模板错误
-
是由于
\LaTeX
之后要加空格- 但后来XeLaTeX编译还是不行,换成PDFLaTeX*2编译就正常了,以下是copilot的解释:然而,你可能需要编译你的文档两次才能看到目录。在第一次编译时,LaTeX 会收集所有需要在目录中显示的信息。然后,在第二次编译时,LaTeX 会使用这些信息来生成目录。
-
文献引用的角标不在右上角,修改为如下代码
\textit{The \LaTeX{} companion} \textsuperscript{\cite{companion}}
正常显示,
-
若想点击跳转到参考文献,可以在
main.tex
中使用hyperref
包来创建可以点击的链接,包括参考文献的引用。只需要在你的文档的前导代码中添加\usepackage{hyperref}
,然后 LaTeX 就会自动将你的\cite
命令转换为可以点击的链接。\documentclass{xmutthesis} \usepackage{graphicx} \usepackage{hyperref}
基础语法
main
\begin{document}
\maketitle %生成封面、诚信申明书和学位著作权使用声明
\makeabstract %生成中文摘要
\makeenabstract %生成英文摘要
\maketableofcontents %生成目录
\begincontent
\include{chapters/01}
\include{chapters/02}
\include{chapters/03}
\addcontentsline{toc}{section}{参考文献}
\include{biblio.tex}
\include{ack.tex}
\end{document}
标题
- 使用如下代码
%--章节名 \section{需求分析} %--一级标题1.1 \subsection{系统的总体需求分析} %--二级标题1.1.1 \subsubsection{xxx}
序号
-
在 LaTeX 中,你可以使用
enumerate
环境来创建一个带有序号的列表。效果是1. 2. 这样\begin{enumerate} \item 系统架构设计:详细阐述“EnglishHub”应用的整体架构设计,包括前后端分离策略、服务化架构等。 \item 技术实现:探讨每项技术在应用中的具体实施方式,例如使用Spring Boot进行后端服务的快速开发、利用Mybatis-Plus优化数据库操作等。 \item 功能设计与实现:分析应用的核心功能,如课程学习、单词记忆、语音识别等,以及这些功能的实现技术。 \item 用户体验优化:研究如何通过技术手段提高应用的交互性和用户体验,例如使用Flutter构建跨平台的前端界面。 \item 数据安全与隐私保护:考虑到用户数据的敏感性,研究如何在应用中实现数据加密和安全认证。 \end{enumerate}
-
若想要(1)这种带括号的,需要再main.tex里引入
enumitem
宏包\usepackage{enumitem}
-
然后,使用
label
选项来自定义列表\begin{enumerate}[label=(\arabic*)] \item 系统架构设计:详细阐述“EnglishHub”应用的整体架构设计,包括前后端分离策略、服务化架构等。 \item 技术实现:探讨每项技术在应用中的具体实施方式,例如使用Spring Boot进行后端服务的快速开发、利用Mybatis-Plus优化数据库操作等。 \item 功能设计与实现:分析应用的核心功能,如课程学习、单词记忆、语音识别等,以及这些功能的实现技术。 \item 用户体验优化:研究如何通过技术手段提高应用的交互性和用户体验,例如使用Flutter构建跨平台的前端界面。 \item 数据安全与隐私保护:考虑到用户数据的敏感性,研究如何在应用中实现数据加密和安全认证。 \end{enumerate}
表格
使用 \hline
来画一整条线,使用 \cline{a-b}
来画第a列到第b列的线
使用 \multicolumn{2}{l|}
即表示占据2列,l|
表示left左对齐,若想居中用 c|
,同理右对齐使用right,r|
- 使用
tabular
,&
符号用于分隔列,\\
符号用于结束行,\hline
用于插入水平线,可以使用p{width}
来定义一个固定宽度的列,并且内容会自动换行,\multicolumn{2}{p{10cm}}
来合并两列,并且定义了合并后的列的宽度。 - 我使用了
\multirow{4}{*}{\centering 基本事件流}
来使得 “基本事件流” 这个文本在4行中垂直居中,并且使用\centering
命令在单元格中水平居中。你需要在你的 LaTeX 文档的开头添加\usepackage{multirow}
来使用\multirow
命令。
用户登录用例规约如表\ref{tab:loginCase}所示:
\begin{table}[htbp]
\centering
\caption{用户登录用例规约}
\label{tab:loginCase}
\begin{tabular}{p{3cm}p{5cm}p{5cm}}
\toprule
用例编号 & UC02 \\
用例名称 & 用户登录 \\
参与者 & 已注册用户 \\
前置条件 & 用户已注册 \\
后置条件 & 用户成功登录系统 \\
优先级 & 高 \\
使用频度 & 高 \\
\midrule
\multirow{2}{*}{\centering 基本事件流} & 参与者行为 & 系统响应 \\
& 1. 用户输入用户名和密码。 & 检查用户名和密码。 \\
& 2. 用户点击登录。 & 验证通过,允许用户进入其账户界面。 \\
\midrule
拓展事件流 & \multicolumn{2}{p{10cm}}{2a. 用户忘记密码可选择“忘记密码”进行密码重置。} \\
\midrule
例外处理 & \multicolumn{2}{p{10cm}}{用户名或密码错误时,系统显示错误信息并提供再次尝试的机会。} \\
\bottomrule
\end{tabular}
\end{table}
表格序号按章节编号
report 或 book 类型的
在 LaTeX 中,可以使用 \thechapter
命令来获取当前章节的编号,然后使用 \renewcommand
命令来重新定义表格的编号格式。以下是代码:
\renewcommand{\thetable}{\thechapter-\arabic{table}}
应该在你的 LaTeX 文档的开头添加这行代码。这行代码会使得所有的表格的编号都变为 “当前章节编号-表格编号” 的格式。如果只想改变某一章的表格编号格式,可以在那一章的开始添加这行代码,然后在那一章的结束处使用 \renewcommand{\thetable}{\arabic{table}}
来恢复默认的编号格式。
注意,这行代码只改变表格的编号格式,不会改变其他元素(如图形或公式)的编号格式。如果你也想改变这些元素的编号格式,需要使用类似的代码来重新定义 \thefigure
或 \theequation
等命令。
在LaTeX中,\caption
命令用于为 figure
(图形)或 table
(表格)等环境提供标题。这个标题通常会显示在图形或表格的上方或下方,并且可以被 \ref
命令引用。
发现图片编号后 7-3: 这种后面有个冒号
记得先引包
\usepackage{amsmath} \usepackage{caption}
此时可以通过使用 caption
包的 figurename
和 labelsep
选项,以及 amsmath
包的 \numberwithin
命令。
main.tex
里
\numberwithin{figure}{section} % 设置图的编号与节同步
\renewcommand{\thefigure}{\thesection-\arabic{figure}} % 设置图的编号格式为“节-图”
\captionsetup[figure]{name=图, labelsep=none} % 设置图的标题格式
- 使用
\begin{figure}
\centering
\includegraphics{your_image}
\caption{遗忘曲线页面}
\label{fig:curve}
\end{figure}
- 但这样编号和标题之间挨的太近了,可以使用
\
(一个斜杆加一个空格)
\begin{figure}
\centering
\includegraphics{your_image}
\caption{\ 遗忘曲线页面} % 在标题前添加一个空格
\label{fig:curve}
\end{figure}
表格的也是一样的
\numberwithin{table}{section} % 设置表的编号与节同步
\renewcommand{\thetable}{\thesection-\arabic{table}} % 设置表的编号格式为“节-表”
\captionsetup[table]{name=表, labelsep=none} % 设置表的标题格式
- 最后效果就是
article类型
\renewcommand{\thetable}{\thesection-\arabic{table}}
结束处使用 \renewcommand{\thetable}{\arabic{table}}
表格和图片的显示位置
在 LaTeX 中,table
环境是一个浮动环境,这意味着 LaTeX 会自动决定表格的位置以获得最佳的页面布局。因此,表格可能不会出现在你在源代码中插入它的位置。
如果你想让表格出现在特定的位置,你可以使用 [h]
、[t]
、[b]
或 [p]
选项来指定表格的位置。这些选项分别表示 “此处”(here)、“页顶”(top)、“页底”(bottom)和 “独立一页”(page)。你可以组合使用这些选项,例如 [ht]
表示 “此处或页顶”。
我的代码布局就奇怪:
我使用了 [htbp]
选项来指定表格的位置。这个选项表示 “此处、页顶、页底或独立一页”,也就是说 LaTeX 会尝试按照这个顺序来放置表格。
解决办法
使用一个float包,使其固定显示在此处
\usepackage{float}
- 在表格那里使用[H],其中\vspace*{45pt}用于添加图片前后的空白
- 例如,如果你想要消除图片前的空白,你可以将
\vspace*{30pt}
改为\vspace*{0pt}
。如果你想要增加图片后的空白,你可以将\vspace*{-20pt}
改为\vspace*{20pt}
\begin{figure}[H]
\vspace*{45pt}
\centering
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=0.9\textwidth]{images/pages/intro.png}
\caption{\ 介绍页面}
\label{fig:intro}
\end{minipage}
\hfill
\begin{minipage}{0.45\textwidth}
\centering
\includegraphics[width=0.9\textwidth]{images/pages/home.png}
\caption{ 首页页面}
\label{fig:home}
\end{minipage}
\vspace*{25pt}
\end{figure}
- 效果就是
公式
- 使用\begin{equation}用于包裹数学公式,且可让公式居中显示,且右侧有一个编号,如不想编号则使用\begin{equation*}
\begin{equation}
R = e^{-\frac{t}{s}}
\end{equation}
- 也可使用,效果为 e − 0.5 e^{-0.5} e−0.5到 e − 0.0 e^{-0.0} e−0.0
$e^{-0.5}$到$e^{-0.0}$
统计字数
-
可以使用
texcount
工具来统计一个 LaTeX 项目中所有.tex
文件的总字数。你需要使用-inc
参数来包含所有的.tex
文件。以下是命令:texcount -inc main.tex
-
就是记得在
main.tex
引入所有tex文件 -
当你使用
\include
或\input
命令时,你不需要添加.tex
扩展名。例如,如果你有一个名为01.tex
的文件,你应该这样包含它:\include{chapters/01}
-
而不是:
\include{chapters/01.tex}
否则在执行刚刚统计总字数的时候就会报错,
!!! File chapters/01.tex.tex not found in path [./]. !!!
-
最后会显示如下:
图片
可以使用 graphicx
包来插入图片,你已经在你的 main.tex
文件中包含了这个包,所以你可以直接使用 \includegraphics
命令来插入图片。以下是一个简单的例子:
filename
是你的图片文件名(不需要扩展名,如果它在同一目录下,否则需要完整路径)。width=0.5\textwidth
是图片的宽度,你可以根据需要调整这个值。caption
是图片的标题,label
是你可以用来引用图片的标签。
- 不支持svg格式
\begin{figure}[h]
\centering
\includegraphics[width=0.5\textwidth]{filename}
\caption{标题}
\label{fig:my_label}
\end{figure}
在main.tex文件中:
%--图片
\usepackage{graphicx}
%--重新定义图编号,使其按章节编号
\renewcommand{\thefigure}{\thesection-\arabic{figure}}
参考文献
xxx
致谢部分会有章节编号
在main.tex里引入ack.tex前
使用 \addcontentsline{toc}{section}{致谢}
报错
chktex could not be found.
在编译的时候一直显示chktex could not be found.,后搜索将setting.json里的设置里把其关闭
// 关闭linter
"latex.linter.enabled": false,
再次编译就正常了
Missing endcsname
在插入图片的时候报错
Missing endcsname inserted. LaTeX Use of ??? doesn't match its definition. ???LaTeX
我的代码
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{images/系统.png}
\caption{“EnglishHub”系统总体需求分析图}
\label{fig:system-requirement}
\end{figure}
- 原因是
在 LaTeX 中,文件名(包括图片文件名)不能包含中文字符。这是因为 LaTeX 的内部处理机制并不支持中文字符作为文件名。当 LaTeX 遇到中文字符时,它会尝试将其解析为一个命令,而不是一个文件名,从而导致 “Missing endcsname inserted” 错误。
解决这个问题的最简单方法是将所有的文件名改为英文。
g-GVrucZkP-1716050383903)]
// 关闭linter
"latex.linter.enabled": false,
[外链图片转存中…(img-trHtErwj-1716050383904)]
再次编译就正常了
Missing endcsname
在插入图片的时候报错
Missing endcsname inserted. LaTeX Use of ??? doesn't match its definition. ???LaTeX
我的代码
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{images/系统.png}
\caption{“EnglishHub”系统总体需求分析图}
\label{fig:system-requirement}
\end{figure}
- 原因是
在 LaTeX 中,文件名(包括图片文件名)不能包含中文字符。这是因为 LaTeX 的内部处理机制并不支持中文字符作为文件名。当 LaTeX 遇到中文字符时,它会尝试将其解析为一个命令,而不是一个文件名,从而导致 “Missing endcsname inserted” 错误。
解决这个问题的最简单方法是将所有的文件名改为英文。