每年一更,风雨无阻,Star点起来 (~ ̄▽ ̄)~
日志
- 2025-01-30:修复字体设置问题。在LaTeX技巧——字体小节中添加说明
- 2025-01-24:更新2025版模板。如果有什么bug大家尽早提出哈!
- 2024-02-26:新增国自然地区科学基金项目LaTeX模板。
- 2024-02-18:1. 优化正文中文字体选择,这可能影响中文加粗。2. 增强对旧版本TexLive的兼容性:将main.tex中类似
{\input{extraTex/1.1.立项依据.tex}}
的代码改为\input{extraTex/1.1.立项依据.tex}
,即去除最外层的大括号。 - 2024-02-14:优化“LaTeX技巧”教程,包括有序列表、表格等内容。另外,fylimas/nsfc项目正在活跃维护中,很快可以在overleaf中使用(地区/青年/面上),感兴趣的小伙伴可多加关注(~ ̄▽ ̄)~
年度更新说明
2025 vs. 2024
- 输入内容格式重大更新:具体表现为每个子项目的输入部分以一种特定格式进行限制。该格式意义不明,有可能未来会有大更新;但目前来说,并不影响PDF的最终输出。另外,国自然系统同往年一样,最后仅支持上传PDF。我的观点是,只要上传的还是PDF,LaTeX大法就还会奏效;如果某天像博后基金那个上传word,大家就洗洗睡即可。今年我90%认为LaTeX仍可用。一个建议:如果您单位的科研处看不出格式问题,我觉得就没问题。
- 在
其他需要说明的情况
这一小节中,增加了同年以不同专业技术职务(职称)申请或参与申请科学基金项目的情况(应详细说明原因)。
这一栏,往年没有。 - 排版基本同2024版,没有大变化。
- 与2024年版相比,2025年版新增了一下
@config.tex
文件用于托管复杂的样式定制,这样可以保证更加简洁的main.tex
。这个设定应该会一直保留。大家从2024版迁移至2025版时,只需:1. 下载最新release的文件;2. 将tex文件直接迁移到extraTex
文件夹中即可; 3. 保存main.tex进行渲染即可获得最新版。 - 因为今年买了Mac mini M4,为了方便在MacOS上使用,我增加了对MacOS的支持。主要的策略就是通过外挂字体以减少对系统字体的依赖;然后写了一个if语句根据系统的不同自动应用不同的字体策略。虽然很粗糙,但是一个好的开始 (~ ̄▽ ̄)~
- Overleaf虽然支持,但本质上,我个人并不推荐在线平台写基金。因为存在一定的风险,Overleaf可能因为某种原因突然不能访问或者损失数据。
- 碎碎念:PDF是一种不容易出现排版问题的文档格式,这一优点Word/WPS等格式应该暂时还是没有办法超越的。基于此,我个人觉得基金委不太可能会取消PDF,因此LaTeX大法或能一直有效。大家有什么观点可以在评论区讨论!
前言
研究基金标书和毕业论文之类的文书其实很适合用LaTeX完成。今年首战国青,我已经准备使用LaTeX来完成标书写作。之前在网上找到的模板如下:
- Ruzim/NSFC-application-template-latex: 国家自然科学基金申请书正文(面上项目)LaTeX 模板(非官方)
- Readon/NSFC-application-template-latex: 国家自然科学基金申请书正文(面上项目)模板(非官方)
这两位大佬的模板挺不错的,但自己用起来总是差点意思。因此,在他们的基础上,我结合2024年最新的国家自然科学基金项目的部分Word模板重新地修了一下,具体链接如下:
- ChineseResearchLaTeX/NSFC_Young(青年)
- ChineseResearchLaTeX/NSFC_General(面上)
- ChineseResearchLaTeX/NSFC_Local(地区)
如果上述链接不可用,也可访问Gitee镜像:
- ChineseResearchLaTeX/NSFC_Young(青年)
- ChineseResearchLaTeX/NSFC_General(面上)
- ChineseResearchLaTeX/NSFC_Local(地区)
我只是略懂LaTeX,大家有什么建议可以在评论区留言,非常感谢 (~ ̄▽ ̄)~ 这里我也附上我模板的使用技巧,这样可以更容易上手。
测试平台
VScode内置tab已经完善支持LaTeX-PDF相互跳转,不需要特别安装SumatraPDF(如果你不喜欢它)。
安装
我基本上是按照文章《知乎:使用VSCode编写LaTeX》来配置texlive和VScode的环境的。编译环境是: Windows 10 + TexLive 2022
,编绎顺序是:xelatex -> bibtex -> xelatex -> xelatex
。我使用VSCode的主要原因是我平时写Python等代码时就是用的VSCode;而且外观比较漂亮:
操作 – 跳转
VSCode对LaTeX-PDF相互跳转的支持也挺不错的,写作时很方便:
从LaTeX搜索PDF:光标置于代码中,然后按下 Alt+Ctrl+J
。从PDF搜索LaTeX:按住Ctrl并单击pdf中需要搜索的地方。
快速打开指定tex文件
只要点击文件所在代码,按F12
就可以调出;鼠标左键双击
就可以锁定在工作窗口上:
VSCode配置
我的VSCode的setting.json
文件中LaTeX配置部分如下 ,仅供参考:
// LaTeX
"latex-workshop.intellisense.package.enabled": true, //根据加载的包,自动完成命令或包
// "latex-workshop.latex.autoBuild.run": "never", //禁止保存文件时自动build
"latex-workshop.latex.tools": [
{
// 编译工具和命令
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
},
{
// 未能成功运行
"name": "XeLaTeX+MakeIndex+BibTeX",
"command": "texify",
"args": [
"--synctex=1",
"--pdf",
"--clean",
"--quiet",
"--tex-option=\"-interaction=nonstopmode\"",
"--tex-option=\"-c-style-errors\"",
"--engine=xetex",
"%DOC%.tex"
]
},
],
"latex-workshop.latex.recipes": [
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "xelatex",
"tools": [
"xelatex"
],
},
{
"name": "XeLaTeX+MakeIndex+BibTeX",
"tools": [
"XeLaTeX+MakeIndex+BibTeX"
]
},
{
"name": "pdflatex",
"tools": [
"pdflatex"
]
},
{
"name": "pdf->bib->pdf->pdf",
"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",
"*.nav",
"*.snm",
"*.synctex.gz"
],
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.view.pdf.internal.synctex.keybinding": "ctrl-click",
"latex-workshop.message.error.show": false,
"latex-workshop.message.warning.show": false,
大致的意思就是定义xe
和bib
的行为,然后构建默认的xe->bib->xe->xe
流程。大多数带参考文献的中文LaTeX都需要这4步编译才能正常显示。
模板优势
vs. Ruzim/NSFC-application-template-latex
- 对数学公式支持更好。
- 通过类似
{\input{extraTex/1.1.立项依据.tex}}
的代码引用内容块,从而避免主tex文件过于庞杂;而且很符合一般人的写作思维。尽管这不一定是正确使用方法。 - 优化图片、超链接、图表(特别是超长图表)的显示。
- 更灵活地定义
section
的属性。 - 根据2024年模板微调:解决了大小标题中数字是宋体而不是楷体的bug、页边距、
(建议8000字以内):
不加粗等。
LaTeX技巧
子tex
我将不同的内容拆分成子tex,从而实现一定程度的模块化:
如果你正在频繁地更新某一个tex而其它tex相对不变,则可以在测试阶段只编绎那部分tex,这样可以节省编绎时间;只要在主tex文件注释一下类似{\input{extraTex/1.1.立项依据.tex}}
的代码就行。另外,对于多人协作文档不同部分可能也有好处。
另外,我认为国自然标书的模板应该高度模块化。类似官方模板样式等自由度较低的特性可以纳入base包;而次级标题的样式、公式、代码等自由度较高的个性化功能的定制,可以参考面向对象编程的思路(比如只需要改一下参数就可以选不同的样式),这样应该可以做出符合更广泛人群需求的模板。这个有机会再折腾吧 (~ ̄▽ ̄)~
字体
在extraTex/@config.tex
文件中,有一段代码是用于设置字体的:
\ifwindows
% 可参考[LaTeX 中文字体配置基础指南 - 知乎](https://zhuanlan.zhihu.com/p/538459335) 选择自己喜欢的字体。 个人感觉中宋(SimSun)还可以 (~ ̄▽ ̄)~
\setCJKfamilyfont{sectionzhfont}{KaiTi}[AutoFakeBold=3] % 定义模板中文字体为楷体
\newcommand{\sectionzhfont}{\CJKfamily{sectionzhfont}} % 定义模板中文字体为新命令\sectionzhfont
\newfontfamily\sectionenfont{KaiTi}[AutoFakeBold] % 定义模板英文字体为楷体,并定义新命令\sectionenfont
\NewDocumentCommand \templatefont { } {\sectionzhfont \sectionenfont} % 定义模板字体
\setmainfont{Times New Roman} % 定义主体内容的英文字体为Times New Roman
\setCJKmainfont{KaiTi}[AutoFakeBold=3] % 定义主体内容的字体为Kaiti
% \setCJKmainfont{SimSun}[AutoFakeBold=3] % 定义主体内容的字体为SimSun
\xeCJKsetup{PunctStyle=quanjiao} % 强制中文标点符号使用中文字体
\else
\setCJKfamilyfont{sectionzhfont}[Path=./fonts/, Extension=.ttf, AutoFakeBold=3]{Kaiti} % 定义模板中文字体为楷体
\newcommand{\sectionzhfont}{\CJKfamily{sectionzhfont}} % 定义模板中文字体为新命令\sectionzhfont
\newfontfamily\sectionenfont[Path=./fonts/, Extension=.ttf, AutoFakeBold=3]{Kaiti} % 定义模板英文字体为楷体,并定义新命令\sectionenfont
\NewDocumentCommand \templatefont {} {\sectionzhfont \sectionenfont} % 定义模板字体
\setmainfont[Path=./fonts/, Extension=.ttf]{TimesNewRoman} % 定义主体内容的英文字体为Times New Roman
% \setCJKmainfont[Path=./fonts/, Extension=.ttf, AutoFakeBold=3]{SimSun} % 定义主体内容的字体为SimSun
\setCJKmainfont[Path=./fonts/, Extension=.ttf, AutoFakeBold=3]{Kaiti} % 定义主体内容的字体为Kaiti
\xeCJKsetup{PunctStyle=quanjiao} % 强制中文标点符号使用中文字体
\fi
这里有必要作一些说明。假设模板字体只定义了中文没有定义英文,当模板存在非中文字符时,则可能导致模板内容无法正常渲染,LaTeX将会放弃原本指定的字体,并直接调用系统默认字体;这将导致模板字体的不正常显示(比如变成了宋体之类的)。因此,在LaTeX中设置字体的主要原则是:无论是模板字体还是正文字体,中英文字体必须分别定义 。
对于Windows,由于系统自带了楷体“KaiTi”,因此可以直接定义模板的中文字体,这主要是依赖CJK系列包的函数\setCJKfamilyfont
和\CJKfamily
完成:
\setCJKfamilyfont{sectionzhfont}{KaiTi}[AutoFakeBold=3] % 定义模板中文字体为楷体
\newcommand{\sectionzhfont}{\CJKfamily{sectionzhfont}} % 定义模板中文字体为新命令\sectionzhfont
然后,定义英文字体,这个可以由系统默认函数\newfontfamily
完成:
\newfontfamily\sectionenfont{KaiTi}[AutoFakeBold] % 定义模板英文字体为楷体,并定义新命令\sectionenfont
这样,我们就可以获得两个字体命令:中文字体命令\sectionzhfont
和英文字体命令\sectionenfont
。然后,通过\NewDocumentCommand
定义模板字体\templatefont
:
\NewDocumentCommand \templatefont { } {\sectionzhfont \sectionenfont} % 定义模板字体
这样,当我们定义一个Section对象时,直接引用模板字体\templatefont
即可:
\titleformat{\section}
{\color{MsBlue} \sectionzihao \templatefont} % 这里添加新设置的字体命令\templatefont
{\hspace{1.45em} }
{0pt}
{}
最后,再分别定义正文的中英文字体。我个人的习惯是英文字体是Times New Roman
,中文字体是KaiTi
:
\setmainfont{Times New Roman} % 定义主体内容的英文字体为Times New Roman
\setCJKmainfont{KaiTi}[AutoFakeBold=3] % 定义主体内容的字体为Kaiti
当然,您可以随时更换正文的中文字体:
% \setCJKmainfont{KaiTi}[AutoFakeBold=3] % 定义主体内容的字体为Kaiti
\setCJKmainfont{SimSun}[AutoFakeBold=3] % 定义主体内容的字体为SimSun
对于非Windows的系统,比如MacOS、Linux或者Overleaf的服务器中,则需要依赖额外的字体文件。这里,{KaiTi}[AutoFakeBold=3]
替换成类似[Path=./fonts/, Extension=.ttf, AutoFakeBold=3]{Kaiti}
的内容即可,其它基本相同。理论上,这部分代码也适用于Windows;但考虑到Windows用户可以有更加简洁、丰富的选择,所以还是保留了Windows专用的代码。
section
我基于titlesec
定义了不同层次section。完全可以直接copy一个旧的section设置,然后用类似的方法定义它的属性:
\titleclass{\subsubsubsection}{straight}[\subsubsection]
\newcounter{subsubsubsection}[subsubsection]
\renewcommand\thesubsubsubsection{(\arabic{subsubsection})}
\titleformat{\subsubsubsection}
{\templatefont \bfseries} % format \color{MsBlue}
{\hspace{1em} (\arabic{subsubsubsection})} % 类似(1)
% {\hspace{1em} \arabic{subsection}.\arabic{subsubsection}.\arabic{subsubsubsection}} % 类似1.1.1
{0.5pt} % separation
{} % before-code
\makeatletter
\def\toclevel@subsubsubsection{4}
\def\l@subsubsubsection{\@dottedtocline{4}{7.0em}{4em}}
\makeatother
如果你的标书拥有很多层级,可以尝试这个方法。不过一般都是用2-3个层级就够了。我自己在国自然标书里调了一个层级样式:(一)→1 → 1.1 → (1)
:
之所以不选择(一)→1 → 1.1 → 1.1.1
,是因为我个人感觉1.1.1
更偏理科,对于医学人来说还是(一)→1 → 1.1 → (1)
看着比较顺眼 (~ ̄▽ ̄)~ 不过,官方模板并没有严格限制,只是说层次分明,标题突出
,所以这里有充分的自由度。大家自己在模板的基础DIY应该难度不大!
图片
我的图片都放在根目录/figures
里面,这样会比较容易管理。一般使用photoshop将PDF矢量图组合为300-600ppi格式的psd文件,然后再保存为png格式。我比较少直接引用PDF格式。
我的图片代码基本类似:
\begin{figure}[!th]
\begin{center}
\includegraphics[width=6in]{figures/xxx.png}
\caption{这里写标题。\\
\raggedright \justifying \noindent
(如果有的话)这里另起一行来描述图。
}
\label{xxx}
\end{center}
\end{figure}
这样图是居中显示,而且差不多可以覆盖整宽。width我觉得5.5-6in
都可以。
表格
基金标书中我没有表格。如果你真的要插入表格,建议使用“ivankokan/Excel2LaTeX”之类的插件或工具生成表格的LaTeX代码。这是示例文件中的表格,样式接近出版级别,写标书应该没问题:
有序列表
这个也是挺常用的:
我专门定制了item标题字体:
\newcommand{\itemtitlefont}[1]{\textbf{\color{MsBlue} #1}} % 定义item小标题字体;
联合enumerate就这样用:
\begin{enumerate}
\item \itemtitlefont{项目1}:描述1 。
\item \itemtitlefont{项目2}:描述2。
\end{enumerate}
这样\itemtitlefont{}
也可以在非enumerate
场景中使用,相当于强调。
使用国自然主题色强调的创意是我在单位举办的优秀国自然标书观摩中看到的,个人感觉颜色很舒服,遂在模板定制中予以采纳。
其它
- 善用
\clearpage
,经常可以很好地协调图片的相对位置。 - 灵活使用
\vskip -5mm
之类的命令调整上方垂直空间的大小。 - 想到之后慢慢补充。
小结
我2024年写的青基,目前自己这套模板用下来感觉挺好,排版精美、层次分明:
我会持续维护我的模板,大家有什么问题可以在下面留言。特别欢迎LaTeX大佬们多多指点!最后,祝大家马到功成!
扩展阅读
- TeX 家族(TeX, XeTeX, LuaTeX,XeLaTeX …看完这篇就懂了) – 知乎:了解不同TeX引擎的区别与联系。
- P3 LaTeX文档基础排版_哔哩哔哩_bilibili:LaTeX论文写作的一些常见语法。
- Overleaf, Online LaTeX Editor:LaTeX在线协作平台。许多LaTeX经典模板可供使用、学习。
- 常用 LaTeX 代码:一个不错的LaTeX学习平台
- Ruzim/NSFC-application-template-latex
- Readon/NSFC-application-template-latex
- MCG-NKU/NSFC-LaTex
- fylimas/nsfc: nsfc – 国家自然科学基金项目LaTeX模版(青年+面上):这个项目还在比较活跃地更新。
- iNSFC系列
- YimianDai/iNSFC: An awesome LaTeX template for NSFC proposal.:在 MacTeX 和 Overleaf 上均可编译通过。更新也挺频繁。
- KimHe/iNSFC: NSFC LaTeX
- LaTeX 入门与进阶 | LaTeX 入门与进阶
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
您好您好!我还有一个问题想请教一下!请问图片和下方文字之间的距离应该怎么调?感觉现在的这个距离看着有点大
在 LaTeX 中,可以通过调整
\includegraphics
命令与下方文字之间的垂直距离来控制图片和文字之间的间距。以下是几种常见的调整方法:1. 使用
\vspace
命令在图片和文字之间手动插入
\vspace
命令,可以精确控制间距。例如:2. 使用
\setlength
调整\intextsep
\intextsep
是控制浮动体(如figure
环境)与周围文本之间距离的参数。可以通过调整\intextsep
来间接影响图片与下方文字的距离:3. 使用
\addtolength
调整\belowcaptionskip
\belowcaptionskip
是控制图片与下方 caption 之间距离的参数。可以通过调整\belowcaptionskip
来改变图片与 caption 之间的距离:4. 使用
\vspace
在\caption
前后如果只需要调整 caption 与图片之间的距离,可以在
\caption
命令前后插入\vspace
:5. 使用
graphicx
包的\setkeys
命令如果你使用的是
graphicx
包,可以通过\setkeys
命令来调整图片与周围内容的间距:总结
\vspace
是最直接的方法,适合精确控制。\setlength{\intextsep}
和\addtolength{\belowcaptionskip}
适合全局调整。通过这些方法,你可以灵活地调整 LaTeX 中图片与下方文字之间的距离。
非常感谢您!
您好,请问参考文献中如果作者数量太多,我想设置超过多少人显示et.al和等该如何做呢,似乎应该是修改bst文件,但是我不懂该如何操作。。
您好您好!请问使用\textbf{}只能使中文加粗无法使英文加粗应该怎么解决?
其实有加粗,只是不明显 (~ ̄▽ ̄)~ 可以设置一个参数
AutoFakeBold
。您可以在@config.tex中设置。windows动这里:MacOS修改:
好嘟好嘟,感谢人帅(美)心善的大佬!!!
总之,把这个 AutoFakeBold 调大,这个加粗就会比较明显。
多谢博主的模板!在使用的时候遇到一个问题,就是在ref section的时候,所有的编号都会多一层。比如subsubsection{研究意义}文中的标号是1.1,但是ref{subsubsection:研究意义}对于的标号是1.1.1。请问这个应该怎么解决呢
我印象中引用section的位置,应该是hyperref比较合适。我觉得这样写更好:
![Code_NUWmm08KrW]()
查看图片
还有超链接,可以直接跳转至原来的位置。这是你想要的效果吗?
是的。非常感谢~
我仔细地想了这个问题。首先,1.1.1本质上是对的;因为这就是第1个section的第1个subsection的第1个subsubsection。如果你要显示为第1个subsection的第1个subsubsection(比如1.1),当然没问题。您只需在@config.tex中找到这个代码:
在它的下面添加一句:
即可。不过,在正文中的正确用法应该是:
这样指代更加明确。
不过,我个人还是更加喜欢第1种写法。它比较自然一些,不需要指定label;而且可以正确文内跳转。
好吧,最好的方式应该是这样:
首先,在正文中引用:
然后使用的时候,这样用效果最好:
效果如图:
![Code_U3OGjfDbVl]()
查看图片
非常感谢~
多谢模版!遇到一个参考文献方面的问题,在默认的bibliographystyle{bibtex-style/gbt7714-nsfc.bst}命令下参考文献不知道为什么无法显示,改成另一个ieeetrNSFC.bst才能显示。
我的模板以及平时用的都是 bibliographystyle{bibtex-style/gbt7714-nsfc.bst} ,没有问题。 您能不能截个图看看怎么个不行法?
问题又来了。为啥我旧的模板(20250124以前),前面的说明是楷体,后面的正文是宋体没问题。但是新的模板,昨天才更新的,直接编译出来所有的字体都是楷体。如果我把 @config.tex 里面这句取消注释 % setCJKmainfont{SimSun}[AutoFakeBold=3] % 可参考LaTeX 中文字体配置基础指南 – 知乎 选择自己喜欢的字体。 个人感觉中宋(SimSun)还可以 (~ ̄▽ ̄)~
就从 “项目的立项依据(研究意义、国内外研究现状及发展动态分析,
需结合科学研究发展趋势来论述科学意义;或。。。。” 开始,都是宋体了
感谢提醒,该bug已经在最新的v2.4.3中修复: https://github.com/huangwb8/ChineseResearchLaTeX/releases
myexample.bib 里面如果有中文字,编译出来时方块。怎么办
问题解决。更新了2025年模板。重新打开 myexample.bib , 会提示文件不是 UTF-8 编码。改成UTF-8 编码以后就解决了。
nice!
请问标题里面数字1/2/3的字体怎么才能改成楷体? 我自己的模板搞了半天好像都不行
在我的模板里有一段,您可以按实际情况修改:
然后,标题里使用
\templatefont
这个字体即可。以section
为例:主要就是那个fontspec宏包用不了 试了试其他的tex 已经写好的本子编译不出来。所以还是用回以前的,想请教用ctex写,PDFtex编译可以解决这个问题么
我的模板开头指定了编绎的类型顺序:
编译顺序: xelatex -> bibtex -> xelatex -> xelatex
。 我并没有在其它环境下测试过。 不过,由于tex版本比较多,它们之间不兼容也很正常。 如果您还是用ctex
,用不了fontspec宏包,那么本教程并不适合您。您要想想别的法子(~ ̄▽ ̄)~ 这个超出我能力范围之外了