您尚未登录。

#1 2022-08-07 14:45:41

Edsater
会员
注册时间: 2022-07-21
帖子: 20

【已解决】latex中文编译

基本介绍

终端是kitty,打算用nvim+vimtex写latex,但是在编译中文过程中出了一些问题

问题过程

1.安装texlive和中文支持

$ sudo pacman -S texlive-most texlive-lang texlive-langchinese texlive-langextra texlive-bibtexextra texlive-fontsextra biber

2.之后就是安装vimtex插件,配置的话我是基本就抄了github上默认的示例

filetype plugin indent on
syntax enable
let g:vimtex_view_method = 'zathura'
let g:vimtex_compiler_method = 'latexmk'

3.测试tex样例
示例:

\documentclass[UTF8]{ctexart}
 \begin{document}
 你好
 \end{document}

编译结果(报错):

/usr/share/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def|103 error| Critical Package ctex Error: CTeX fontset `fandol' is unavailable in current mode.

4.尝试wiki上的方案
hfKdLMsTYoGIJbn.png
个人实操:

$ mkdir ~/.fonts/TTF
$ ln -s /usr/share/texmf-dist/fonts/opentype/public/fandol ~/.fonts/TTF
$ fc-cache -vf ~/.fonts
Fontconfig error: Cannot load default config file
/home/edward/.fonts: caching, new cache contents: 0 fonts, 2 dirs
/home/edward/.fonts/TTF: caching, new cache contents: 0 fonts, 1 dirs
/home/edward/.fonts/TTF/fandol: caching, new cache contents: 8 fonts, 0 dirs
/home/edward/.fonts/r: caching, new cache contents: 12 fonts, 0 dirs
/build/anaconda/pkg/anaconda/opt/anaconda/var/cache/fontconfig: not cleaning non-existent cache directory
/home/edward/.cache/fontconfig: cleaning cache directory
fc-cache: succeeded
$ mkfontscale ~/.fonts/TTF
$ mkfontdir ~/.fonts/TTF

然后又去编译了一下,还是老问题,没有解决,请各位大佬教教我,第一次在linux上装latex,搞了一天了还是不知道怎么办

最近编辑记录 Edsater (2022-08-09 11:50:35)

离线

#2 2022-08-09 09:14:31

Oliver Wei
会员
注册时间: 2021-07-13
帖子: 118

Re: 【已解决】latex中文编译

一直用texstudio,没遇到过问题,集成性的编辑器还是方便的多.

离线

#3 2022-08-09 09:35:21

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

Oliver Wei 说:

一直用texstudio,没遇到过问题,集成性的编辑器还是方便的多.

可能过阵子用不顺手了也会换到texstudio,但目前这个问题报错让我很难受,我不知道问题处在哪,就单纯想去处理掉这个报错

离线

#4 2022-08-09 11:20:25

sukanka
会员
所在地: Amoy, China
注册时间: 2020-04-05
帖子: 170
个人网站

Re: 【已解决】latex中文编译

试试指定字体,

\documentclass[UTF8,fontset=ubuntu]{ctexart}

fontset 有这些可以选

fontset = ⟨adobe|fandol|founder|mac|macnew|macold|ubuntu|windows|none|...⟩

离线

#5 2022-08-09 11:49:22

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

sukanka 说:

试试指定字体,

\documentclass[UTF8,fontset=ubuntu]{ctexart}

fontset 有这些可以选

fontset = ⟨adobe|fandol|founder|mac|macnew|macold|ubuntu|windows|none|...⟩

谢谢大哥,可以了!
目前我的示例代码、编译过程和编译结果如下:
1.示例代码

$ cat a.tex
\PassOptionsToPackage{quiet}{fontspec}\documentclass[UTF8,fontset=fandol]{ctexart}
\title{My First Document}
\author{Edward}
\date{\today}

%正文区
\begin{document}
\maketitle
latex实例
\end{document}

2.编译过程

$ xelatex a.tex
This is XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022/Arch Linux) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
(./a.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-04-10>
(/usr/share/texmf-dist/tex/latex/ctex/ctexart.cls
(/usr/share/texmf-dist/tex/latex/ctex/config/ctexbackend.cfg)
(/usr/share/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-xetex.def))
Document Class: ctexart 2021/12/12 v2.5.8 Chinese adapter for class article (CT
EX)
(/usr/share/texmf-dist/tex/latex/l3packages/xparse/xparse.sty)
(/usr/share/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty)
(/usr/share/texmf-dist/tex/latex/ctex/ctexhook.sty)
(/usr/share/texmf-dist/tex/latex/ctex/ctexpatch.sty)
(/usr/share/texmf-dist/tex/latex/base/fix-cm.sty
(/usr/share/texmf-dist/tex/latex/base/ts1enc.def))
(/usr/share/texmf-dist/tex/latex/ctex/config/ctexopts.cfg)
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def
(/usr/share/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
(/usr/share/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty)
(/usr/share/texmf-dist/tex/latex/fontspec/fontspec.sty
(/usr/share/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
(/usr/share/texmf-dist/tex/latex/base/fontenc.sty)
(/usr/share/texmf-dist/tex/latex/fontspec/fontspec.cfg)))
(/usr/share/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg)))
(/usr/share/texmf-dist/tex/latex/zhnumber/zhnumber.sty
(/usr/share/texmf-dist/tex/latex/zhnumber/zhnumber-utf8.cfg))
(/usr/share/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-chinese-article.def
(/usr/share/texmf-dist/tex/latex/ctex/config/ctex-name-utf8.cfg))
(/usr/share/texmf-dist/tex/latex/ctex/ctex-c5size.clo)
(/usr/share/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def))
(/usr/share/texmf-dist/tex/latex/ctex/config/ctex.cfg) (./a.aux) [1] (./a.aux) 
)
Output written on a.pdf (1 page).
Transcript written on a.log.

3.最后结果

$ zathura a.pdf

6etxknHiNml9QoB.png
4.一些说明

  • fontset=ubuntu我运行的时候报错了,试了几个换成fandol最后可以编译了

  • 文件开头加\PassOptionsToPackage{quiet}{fontspec}是因为一开始还是会报错Package fontspec Warning: Font "FandolSong-Regular" does not contain requested Script "CJK".,我看了这篇知乎上的评论加了这段然后也成功消除了这个报错项。

离线

#6 2022-08-14 15:48:03

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

看样子来晚了,问题解决了。
btw,我偷了 windows 的几个字体,然后 fontset=windows 的,因为 fandol 因为缺字有 warning...

以及本 vimmer 吐槽:这明明是编译错误,换 texstudio 应该是解决不了问题的。

贴一个自己的 ~/.latexmkrc (也可以用 vim 的模板功能,每个项目都留一个)

# latexmk config
# 详情请 texdoc latexmk

# $bibtex = 'bibtex %O %S';

# $pdf_mode = 1;  # tex -> pdf
# $pdf_mode = 2;  #  tex -> ps -> pdf 
# 如果设为 4 使用 lualatex。
# 如果设为 5 使用 xelatex。 
# 每个项目都应有一个 .latexmk,用 vim-template 创建再修改,debug 用 magic comment 比如 %!TEX program=xelatex ;也可用命令行参数切换不同的引擎,比如 latexmk -xelatex
$pdf_mode = 5; 

# 部分 option 已经放入 .vimrc

# -halt-on-error  使编译遇到错误时立即停止;
$pdflatex = "pdflatex -halt-on-error -shell-escape %O %S";
# xelatex 的 -no-pdf 参数使编译时只生成 xdv 文件,最后才用 xdvipdfmx 生成 pdf, 这样可以节省嵌入图片耗费的时间(需要 TeX Live 2017 以上)
#The result is that $latex = ’latex %O %S’, and similarly for $pdflatex, $lualatex, and $xelatex.
# (The option -no-pdf needed for $xelatex is provided automatically, given that %O appears in the definition.) 所以不用添加 -no-pdf 了
$xelatex = "xelatex -halt-on-error -shell-escape %O %S";
$lualatex = "lualatex -halt-on-error -shell-escape %O %S";
$xdvipdfmx = "xdvipdfmx -E -o %D %O %S";

# $bibtex_use = 2; 等同于 -bibtex 选项。
# $bibtex_use = 0; 等同于 -bibtex- 选项。表示: Never run bibtex or biber. 
# 通常 bbl 文件是由 BibTeX 编译 bib 文件生成的,在清理辅助文件时可以删掉; 但是有时并没由提供 bib 文件,只有 bbl(比如 arxiv 上的 TeX 源码),$bibtex_use = 1.5 可以自动检测根据条件清理 bbl 文件(需要 TeX Live 2018 以上)。
# 注意:$bibtex_use = 1.5 导致 biblatex 失败!!! 
$bibtex_use = 1.5;

# 编译时将所有生成文件(包括辅助文件)写到 latex.out 目录下。注意这个配置虽然可以使目录更加整洁,但是可能导致一些软件的功能受影响,建议谨慎选择。
# 如使用 minted 宏包,需要添加 \usepackage[outputdir=latex.out]{minted}
# 参见 https://github.com/gpoore/minted/issues/159
# .latexmkrc 的优先级比 .vimrc 的配置 更高
$out_dir = "latex.out";


# 如果你希望编译完成后清理无关的中间文件,则注意把清理模式 $cleanup_mode 打开
# $cleanup_mode = 1;

$clean_ext = "hd nav snm synctex.gz xdv";

# $preview_mode = 0; # 编译完成后自动打开 pdf;
# $preview_mode = 1; # 这个似乎和 “$preview_continuous_mode = 1” 冲突
# $preview_continuous_mode = 0; # 已经在 vimrc 里面设置了
@default_files = ('main.tex');
# $pdf_previewer = 'okular'; # linux 会根据 xdg-open 自动选择(大概


# vim: set ft=perl:

离线

#7 2022-08-14 16:04:32

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

 ln -s /usr/share/texmf-dist/fonts/opentype/public/fandol ~/.fonts/TTF 

这个对于解决问题没有帮助。并且如果没有用到 texlive 中字体的场景,没必要创建链接,这还会导致 wps 选择字体的时候卡。

离线

#8 2022-08-14 16:17:34

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

junix 说:
 ln -s /usr/share/texmf-dist/fonts/opentype/public/fandol ~/.fonts/TTF 

这个对于解决问题没有帮助。并且如果没有用到 texlive 中字体的场景,没必要创建链接,这还会导致 wps 选择字体的时候卡。

但是我最开始的时候这样报错,不这样操作fandol能用吗,我不是很懂唉

/usr/share/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-fandol.def|103 error| Critical Package ctex Error: CTeX fontset `fandol' is unavailable in current mode.

离线

#9 2022-08-14 17:44:33

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

Edsater 说:

不这样操作fandol能用吗,我不是很懂唉

这个操作能让其他程序也能用 texlive 所带的字体。

离线

#10 2022-08-14 17:47:21

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

见wiki

默认情况下不自动提供给Fontconfig随各种Tex Live包提供的字体。

离线

#11 2022-08-14 17:48:55

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

junix 说:

见wiki

默认情况下不自动提供给Fontconfig随各种Tex Live包提供的字体。

哦哦,那我到时候去改回来

离线

#12 2022-08-14 17:55:05

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

junix 说:

看样子来晚了,问题解决了。
btw,我偷了 windows 的几个字体,然后 fontset=windows 的,因为 fandol 因为缺字有 warning...

大哥,你这个fontset=windows字体是咋整的

离线

#13 2022-08-14 17:55:22

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

Edsater 说:
 `fandol' is unavailable in current mode.

我觉得问题出在,
in current mode

离线

#14 2022-08-14 17:56:44

Edsater
会员
注册时间: 2022-07-21
帖子: 20

Re: 【已解决】latex中文编译

junix 说:
Edsater 说:
 `fandol' is unavailable in current mode.

我觉得问题出在,
in current mode

不是很理解这个current mode是啥

离线

#15 2022-08-14 17:58:29

junix
会员
所在地: Anhui, China
注册时间: 2018-12-06
帖子: 35

Re: 【已解决】latex中文编译

Edsater 说:

大哥,你这个fontset=windows字体是咋整的

把 windows 机器上的字体拷贝过来装上呗,虽然实际上只要 ctex 代码里用到的字体就行了,全拷贝过来只要配置好 fontconfig 也不会出问题。

离线

页脚