latex入门

tex live2024+VsCode

传统的 Word编辑格式太头疼啦,所以尝试下新东西latex

环境

  • 首先,那当然就是环境了,本人是 windows,选择 Tex Live发行版,或者MiKTeX

  • Tex Live可以通过两种途径下载安装

    img

  • 下载好后,双击 iso文件打开,找到如图bat文件,右键选择管理员运行

    img

  • 选择advance高级选项,Adjust searchpath记得选上,不然后续要要手动添加环境变量,默认是勾选状态,由于本人选择使用 vscode 编写,所以取消了 安装Texworks前端的选项,

    img

  • 有点耐心。。。,安装要很长时间,请勿中途退出

    img

  • 显示这样就安装完成了

    img

  • 接着打开命令行win+R,输入 cmd,在窗口内输入 xelatex -v,出现版本信息等说明正常

    img

  • 若报错,显示无此命令,可能是环境变量之前没勾选,按下 win+Q 输入高级系统设置,打开环境变量添加 path

    F:\texlive2024\texlive\2024\bin\windows

    img

配置

  • 打开vscode的 setting.json

    img

  • 贴入以下配置

    //---------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}
  • 在左侧栏可以看到编译顺序

    img

  • PDFLaTeX 和 XeLaTeX 是两种常用的 LaTeX 编译方式,它们在使用中有一些显著的区别:

    字体支持

    • PDFLaTeX :默认只支持 TeX 自带的字体,例如 Computer Modern。如果要使用其他字体,需要安装特定的 TeX 字体包,并通过字体宏包如 fontenc 进行设置。
    • XeLaTeX :可以直接使用操作系统中的字体,包括 TrueType 和 OpenType 字体。这使得用户可以非常容易地使用各种商业字体和自定义字体。

    输入编码

    • PDFLaTeX :默认的输入编码是 ASCII,对于非英文字符需要使用 inputenc 宏包来设置合适的编码(如 UTF-8)。
    • XeLaTeX :默认支持 Unicode,特别适合处理多语言文本,无需额外设置即可直接输入多种语言的文字。

    图形和颜色支持

    • 两者在图形和颜色的支持上基本相似,都支持 graphicxcolor 等宏包。不过在处理特定的 PDF 特性或者更现代的字体技术时,XeLaTeX 可能表现得更好。

    编译输出

    • PDFLaTeX :直接输出 PDF 文件,这一点与 XeLaTeX 相同,但它是通过 DVI 模式间接生成 PDF,可能在某些情况下影响输出的效率和兼容性。
    • XeLaTeX :直接生成 PDF 文件,支持更现代的 PDF 特性,如较好的 Unicode 支持和更复杂的文档结构处理。

    微排版

    • PDFLaTeX :可以通过 microtype 宏包来进行高级的微排版设置,如字符间距调整和字距控制。
    • XeLaTeX :也支持 microtype,但在某些字体和语言处理上的兼容性可能略有差异。

    总的来说,如果你的文档主要是英文,且对字体要求不高,PDFLaTeX 可能是一个简单有效的选择。而如果你需要处理多语言文档,尤其是需要使用各种商业字体或自定义字体的场合,XeLaTeX 会是更好的选择。

  • 接着就可以编译了,找到文件夹下的 tex文件,打开左侧扩展 TEX栏选择进行编译

  • 或者可以设置个快捷键,

    img

  • 接着,发现编译错误

    img

  • 排查原因,,应该某些包的问题,先换个模板跑一下

    % 导言区
    \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}
    
  • 编译成功会显示√,

    img

  • 接着在左侧TEX栏打开view,或者按 ctrl+alt+v

    img

  • 就可以了,但我代码怎么没高亮。。

    img

  • 正向跳转,选中一部分代码后 ctrl+alt+j或者右键菜单,或者通过左侧栏,会有一个红圈提示

    img

排查之前的模板错误

  1. 是由于 \LaTeX 之后要加空格

    img

    img

    • 但后来XeLaTeX编译还是不行,换成PDFLaTeX*2编译就正常了,以下是copilot的解释:然而,你可能需要编译你的文档两次才能看到目录。在第一次编译时,LaTeX 会收集所有需要在目录中显示的信息。然后,在第二次编译时,LaTeX 会使用这些信息来生成目录。
  2. 文献引用的角标不在右上角,修改为如下代码

     \textit{The \LaTeX{} companion} \textsuperscript{\cite{companion}}
    

    正常显示,

    img

  • 若想点击跳转到参考文献,可以在 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包的 figurenamelabelsep选项,以及 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} e0.5 e − 0.0 e^{-0.0} e0.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 [./]. !!!
  • 最后会显示如下:

    img

图片

可以使用 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” 错误。

解决这个问题的最简单方法是将所有的文件名改为英文。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

...Yolo...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值