办公工具-latex

一、排版总论

1.1 缺省权力

​ 首先,最重要最需要强调的是,排版是一个信息量极大的工程。字体,格式,对齐方式,页眉页脚,都只是排版的冰山一角,可以说,一个人是没有办法完全控制一个印刷文件里面的所有排版细节的,就好像人们可以挑选衣服的颜色,款式,但是人们却对“编织手法,扣子是材质”之类的问题疏于关注,这是因为这些细节没办法全部被考量,人类的大脑接受不了这么多的信息。

​ 由此就衍生出了排版里面我最看重的一个概念,就是“缺省”。正是由于人们没有办法关注到每一个细节,所以对于用户没有办法关注到的细节,软件开发者就必须提供“默认设置”,也就是“缺省”。当然理想的缺省是没有任何问题的,人们可以随意修改自己关心的缺省设置为自己的设置,而对于自己不关心的设置就采用“默认设置”。

​ 但是事实似乎并不是这样的,修改缺省设置并不是简简单单的,我曾经为了在word中将目录调成人能看的样子,查阅各种资料查了一个小时,最后手敲的目录。由此就引出了一个基本的问题:似乎缺省设置侵犯了用户排版的权利。而我评价一款排版编辑工具的好坏,最重要的就是看它在我看重的的设置中修改的难度

​ 如果由此来看,现实生活中LaTeX和Word都不是很好的软件,我本人的学习中只有敲代码和写笔记两个文字编辑的排版需求。而这两个需求对于排版设计没有那么多的要求,所以各种IDE和Typora可以完全满足我的需求,并不需要专业的排版软件,但是我的生活中还有一个东西叫做论文,这个东西是一个需要更多排版设计的东西(其实还有一个东西是PPT,那个东西太恐怖了)。这使就需要对LaTex和Word做出选择了。

​ 我刚刚学完LaTex,感觉确实因为是代码化的,所以确实在修改方面有很多的优势,但是也并没有说达到完全的自由,起码我觉得还是有很多东西是受到限制的,所以我现在的观点是LaTeX只是一个软件,而不是一个救星。比如说扩展包之类的东西,还是感觉用数值改的化,确实丧失了一些“所见即所得”的设计直观优势。

1.2 实践思路

​ 练习排版最重要的是实践(我坚信设计能力是在实践中增长的)。但是显然我没有那么多的实践任务,所以无论是之前看《Word排版之道》还是各种学习视频,因为始终没有跟实践结合起来,所以基本上就是看过就忘。这是没有办法的事情,我总不可能变出实践任务来,所以只能用一种低效的方式进行排版的学习。

​ 不过我还是想清楚了一个很重要的事情,就是将文章和排版解耦联(格式与内容分离),我可以先用Typora储存文本信息和文章的层次结构,然后再在Word或者LaTeX上考虑排版任务,这样分工,就可以让我在写文章的时候专注于文章的内容和结构,而在排版的时候专注于排版思想的实现。

​ 这篇文章第三章可以看做是LaTeX对设计思想的一种实现。同样也可以看做是一组接口,凡是可以实现这些接口的排版工具都是可以考虑的。

​ 此外,对于更多的排版要求,应该及时整理,哪怕是细碎的知识点,也要及时整理收纳。这不是啥系统的东西,设计不成系统,系统是评论家干的事情。


二、LaTeX语法

2.1 语句分类

​ LaTex的源代码语句可以分为三种:

  • 注释:以 % 开头,示例如下

    % 注释语句以 % 开头
    
  • 命令:又分为普通命令环境两种,两者主要是格式的区别

    • 普通命令,以 \ 开头,直接跟命令,示例如下:

      % format: \command[option]{content}
      \documentclass{article}
      \usepackage[dvipdfm]{graphicx}
      
    • 环境,会以 \begin{command}[option] content \end{command}出现,示例如下:

      \begin{figure}[htbp]
          \centering
          \includegraphics[width=120pt]{avatar.jpg}
          \caption{This is Rick}
      \end{figure}
      
  • 数据,就是最普通的文本,出现于环境中或者命令中, 不能单独出现。

​ 这三种语句是可以互相嵌套的。

2.2 源码结构

​ 源码分为两个部分,即:

  • 序言(preamble):用来确定一些文档的设置,如文档的类型,引用的包等:

    \documentclass{article} 
    \usepackage[dvipdfm]{graphicx}
    
  • 正文,在documet这个环境中的所有内容

    \begin{document}
        \title{Title}   
        \author{author name}
        \date{\today}
        \maketitle
    	……
       	content
       	……
    \end{document}
    
    

三、功能

3.1 层次结构

​ 层次结构主要包括列表的自动标号目录两个东西,关于列表自动标号,有下面的命令

\part{Part Name}
% \chapter{Chapter Name},只要编译就会报错,是因为article里是没有章的
\section{Section Name}
\subsection{Subsection Name}
\subsubsection{Subsubsection Name}
\paragraph{Paragraph Name}
\subparagraph{Subparagraph Name}

​ 生成的效果如图:在这里插入图片描述

​ 可以看出,能用的似乎只有section类,而且part显示的还是英文,跟中文论文的格式很不一样。

​ 生成目录只需要两个命令

\setcounter{tocdepth}{2} % 设定目录深度
\tableofcontents % 列出目录

​ 如果不想显示某一章的章节,可以如下设置:

\chapter*{...}
\section*{...}
\subsection*{...}
\subsubsection*{...}

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

3.2 插入图片

​ 需要引入一个宏包

\usepackage{graphicx}

​ 插入图片的命令如下:

\includegraphics[option]{path}

​ 其中option有以下选项:在这里插入图片描述
​ 然后在实际插入图片的时候,我们一般采用浮动环境,这个环境似乎就是有利于排版调整的一个环境,具体有啥作用我不知道,每个都加上就好了,示例如下:

\begin{figure}[ht]
	\centering
	\includegraphics[scale=0.2]{avatar.jpg}
	\caption{This is Rick}
	\label{fig:avatar}
\end{figure}

​ 这是一个比较完整的图片格式,第一行的 [ht] 表示图片的理想位置是Here和Top,还有b(bottom)和p(page单独一页)。其实我也不知道是什么意思。caption会生成标注,然后label是为了方便交叉引用的,但是这个交叉引用,是没有办法跳转的,好像有跳转的交叉引用需要调包,但是还有有难看的红框。这就是我不打算视LaTex为救世主的原因。

3.3 数学公式

​ 这个部分最为简单,就是markdown里的语法就可以了,行内公式如下

This is an inline equation $F = ma$.

​ 整段的公式,不再使用 $$...$$ 而是如下示例:

\[
	E = mc^2
\]

3.4 标题页

​ 在文档开始的时候,会有一系列的命令来设置标题页的各种东西,最后用 \maketitle 命令生成标题页,如下:

\title{Title}   
\author{author name}
\date{\today}
\maketitle

​ 此外,对于 article 来说,是没有标题页的,标题跟正文是连续的,所以为了获得独立的标题页,需要如此设置:

\documentclass[titlepage]{article}

3.5 交叉引用

​ 基础的交叉引用就是两组命令,但是我感觉不是太有用,因为是没有超链接作用的。

\label{labelName}
\ref{labelName}

​ 交叉引用还有一种特殊的是参考文献,比较基础的是这样的

This is a bib\cite{Rowling_1997}.
\begin{thebibliography}{99}
	\bibitem{Rowling_1997}
		Joanne K. Rowling,
		\emph{Harry Potter and the Philosopher's Stone}.
		Bloomsbury, London,
		1997.
\end{thebibliography}

在这里插入图片描述

在这里插入图片描述

​ 但是可以看出不是上标形式,我觉得我解决不了。然后更高阶的方法这里放一篇教程:https://zhuanlan.zhihu.com/p/114733612 。无论怎样,链接应该是没有办法实现的。所以这个问题让我觉得应该专注Word。

3.6 换页分段

换页和分段都是一个简单的命令,比word要好

\newpage % 换页
\par 	 % 分段

3.7 页眉页脚

​ 需要调包,然后进行设置,感觉很难实现每页私人定制,这个问题跟Word上一样,真是排版的难度。

\usepackage{fancyhdr} % 导入fancyhdr包
\pagestyle{fancy}
% 页眉设置
\fancyhead[L]{left head}
\fancyhead[R]{right head}
\fancyhead[C]{center head}
% 页脚设置
\fancyfoot[L]{left foot}
\fancyfoot[C]{\thepage} % 页码
\fancyfoot[R]{right foot}
\renewcommand{\headrulewidth}{4pt} % 分隔线宽度4磅
\renewcommand{\footrulewidth}{4pt}

3.8 重定义命令

​ 这是 LaTex 中的一种特殊用法,大概意思就是可以修改一些集成化的设置吧。格式如下:

\renewcommand{\新定义的命令}[参数个数]{命令内容}

​ 比较常见的一个应用是转中文的时候,有

\renewcommand\contentsname{目录} 
\renewcommand\listfigurename{插图目录} 
\renewcommand\listtablename{表格目录} 
\renewcommand\refname{参考文献} 
\renewcommand\indexname{索引} 
\renewcommand\figurename{图} 
\renewcommand\tablename{表} 
\renewcommand\abstractname{摘要} 
\renewcommand\partname{部分} 
\renewcommand\appendixname{附录} 
\renewcommand\today{\number\year年\number\month月\number\day日}
\renewcommand\algorithm{算法}

​ 当然也可以直接定义命令,格式如下:

\newcommand{\新定义的命令}[参数个数]{命令内容}

3.9 代码块

​ 需要引入包,然后进行一系列设置,设置如下

\usepackage{listings} %导入包

\definecolor{codebrown}{rgb}{0.8,0.44,0.2}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codebrown},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                 
    % numbersep=5pt,
    % numbers=none,
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2,
    xleftmargin=0.1\textwidth,
    xrightmargin=0.1\textwidth
}
\lstset{style=mystyle}

​ 代码块示例:

\begin{lstlisting}[language=Python, caption=Python example]
import numpy as np
    
def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable
    
    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;
                
                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)
                
                VT = np.zeros((n*m,1), int)
    
    return M
\end{lstlisting}

四、模板

​ 本来进行问前面三章的学习,内心十分绝望,觉得如此繁琐的东西,该如何是好。LaTex 比 Word 的优势在于用户对于各种设置的功能的操作权限更大,但是 LaTex 的缺点在于各种黑箱设计,弄得我想更近一步的时候,总是望而生畏。不过当学习了美赛模板之后,突然又对 LaTex 重燃了一分希望,大不了就模板改改,哪怕一开始,自己对排版的控制力不够强,也可以借鉴大佬的力量。

4.1 美赛模板

mcmthesis是专门为美赛建模论文设计的模板,各种配置都很齐全,我按照文档又将示例代码重新注释了一遍,注释一遍的过程相当的有益处,感觉对文章的理解加深了。

.cls 文件里是可以打开的,这个文件储存着模板信息,如果在 .tex 文件中改不了的东西,可以在这个文件里面查找修改,十分方便。不要怕。

​ 放一下我的注释版:https://bhpan.buaa.edu.cn:443/link/A693742C871B6E350B3B8F36FEF91AA8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7375.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM 运行时数据区概述及线程

当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区。 运行时数据区结构 内存概念: 内存…

leetcode:只出现一次的数字 Ⅲ(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任…

Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)

一、Qt按钮小程序 1. 按钮的创建和父子关系 在Qt程序中&#xff0c;最常用的控件之一就是按钮了&#xff0c;首先我们来看下如何创建一个按钮&#xff1a; #include <QPushButton>QPushButton * btn new QPushButton; //设置父亲btn->setParent(this);//设置文字b…

接口测试-postman使用总结

一、为何使用postman postman是一款简单高效的接口测试工具&#xff0c;能够很方便发送接口请求&#xff0c;易于保存接口请求脚本&#xff0c;postman提供接口响应数据比对功能&#xff0c;可以设置预期结果作断言&#xff0c;还能把测试用例放在一个集合中批量执行&#xff…

【JavaWeb】9—监听器

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

torchvision.transforms 常用方法解析(含图例代码以及参数解释)

本文代码和图片完全源于 官方文档: TRANSFORMING AND AUGMENTING IMAGES 中的 Illustration of transforms&#xff0c;参数介绍源自函数对应的官方文档。 代码中的变换仅仅使用了最简单的参数&#xff1a;pad&#xff0c;size 等&#xff0c;这里展现的只是简单的变换&#xf…

C/C++每日一练(20230408)

目录 1. 删除无效的括号 &#x1f31f;&#x1f31f;&#x1f31f; 2. 合并K个升序链表 &#x1f31f;&#x1f31f;&#x1f31f; 3. 四数之和 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 …

SQL Server用户定义的函数(UDF)使用详解

SQL Server用户定义的函数一、背景知识1.1、用户定义函数的优点1.2、函数类型1.3、指引1.4、函数中的有效语句1.5、架构绑定函数1.6、指定参数二、创建用户定义函数2.1、限制和权限2.2、标量函数示例&#xff08;标量 UDF&#xff09;2.3、表值函数示例2.3.1、内联表值函数 &am…

项目管理软件调度的优势有哪些?

如果没有项目时间表&#xff0c;要跟踪在何时以及必须使用哪些资源之前需要完成什么是非常困难和耗时的。时间表是一个时间表&#xff0c;它概述了所有项目任务和需要完成的里程碑的开始和结束日期。 项目进度中的任务将具有依赖性&#xff0c;这意味着如果完成数据在一项活动上…

Redis7高级之Redlock算法和Redisson的使用(十)

10.1 Redlock 红锁算法 1.解决手写分布式锁的单点故障问题 Redis 提供了 Redlock 算法&#xff0c;用来实现基于多个实例的分布式锁锁变量由多个实例维护&#xff0c;即使有实例发生了故障&#xff0c;锁变量仍然是存在的&#xff0c;客户端还是可以完成锁操作Redlock算法是实…

计算机网络考试复习——第一章 1.5 1.6

1.5 计算机网络的类别 1.5.1计算机网络的定义&#xff1a; 系统集合&#xff0c;连接起来&#xff0c;协议工作&#xff0c;资源共享 计算机网络主要是由一些通用的、可编程的硬件互连而成的&#xff0c;而这些硬件并非专门用来实现某一特定目的&#xff08;例如&#xff0…

Java源码(一)ThreadLocal、SpringBoot Jar 启动原理

思维导图 一、ThreadLocal 1.场景 项目采用SSMShiro登录认证&#xff0c;改造需求如下&#xff1a; 后台管理员登录需要限制&#xff0c;同一个用户的不同IP需要通过过自定义验证后才能登录。 2.问题 在完成需求后发现有管理员用户&#xff08;这里就用A&#xff09;通过验…

Android build.gradle配置详解

Android Studio是采用gradle来构建项目的&#xff0c;gradle是基于groovy语言的&#xff0c;如果只是用它构建普通Android项目的话&#xff0c;是可以不去学groovy的。当我们创建一个Android项目时会包含两个Android build.gradle配置详解文件&#xff0c;如下图&#xff1a; 一…

区块链3链(TRC ERC BSC)授权持币生息源码

分享一款3链&#xff08;TRC ERC BSC&#xff09;授权持币生息源码、来自群友投稿的资源、据说是运营级的。简单的看了下没有问题什么大问题、有能力的可以拿来二开其他的模板。 搭建非常简单&#xff0c;教程就不写了、环境NGINX1.2PHP7.2MYSQL5.6TP默认伪静态 此类源码需要…

【Python】数学 - 用 Python 自动化求解函数 f(x) 的值

目录 1、缘起 2、求以下函数的值 3、代码清单 3.1、求解 f(0)、f(1)、 f(​编辑)、f(​编辑) 3.2、求解 g(0)、g(1)、g(​编辑)、g(​编辑) 3.3、求解 h(0)、h(1)、h(​编辑)、h(​编辑) 4、总结 1、缘起 Python 是一种强大的编程语言&#xff0c;它具有广泛的应用领域。…

Python模拟星空

文章目录前言Turtle基础1.1 Turtle画板1.2 Turtle画笔1.3 Turtle画图1.4 Turtle填色1.5 Turtle写字模拟星空模拟星球浪漫星空尾声前言 Python模拟星空&#xff0c;你值得拥有&#xff01;uu们一周不见啦&#xff0c;本周博主参考网上大佬们的星空&#xff0c;给大家带来了属于…

C语言操作符优先级

在平时写代码时&#xff0c;经常会用到操作符&#xff0c;但是如果不了解这些操作符的优先级&#xff0c;可能会让程序的执行效果和我们预期的不一样。 例如&#xff1a; int a 2;int b 3;int c 4;//int ret a b * c;//我们想要执行的顺序是ab的值再乘c//如果了解操作符优…

chat GPT人工智能写论文-怎么用chatGpt写论文

用chatGPT写文章会重复吗 使用 ChatGPT 写文章可能会出现重复的情况。因为 ChatGPT 是基于机器学习的自然语言处理技术&#xff0c;它并不具备人类的创造性思维&#xff0c;其生成的文本内容是基于已有语言数据的统计模型而产生的。 当输入信息重复、语言结构复杂或指定主题较…

【测试】《软件测试》阅读总结

第一章 软件测试的流程是什么&#xff1f; 需求分析--------测试计划----------测试开发--------测试执行-------测试报告 如何描述一个BUG 版本&#xff0c;测试环境、测试步骤和测试数据、实际结果、预期结果、附件&#xff08;截图、错误日志&#xff09; 软件测试过程包括…

HashMap,HashTable和ConcurrentHashMap之间有什么区别?

前言 在之前HashMap的学习中,我们可以知道HashMap是线程不安全的数据结构,它存储的一般是数据的键值对(Key-Value模型),其中Key允许为null,它底层是数组链表的实现,当单个链表的数据元素过多时,会转变为红黑树,在多线程环境下,对某个HashMap对象进行操作,是无法保证线程安全的,…