在一般的LaTeX文件中,我们一般都会给图片、表格等添加
\label{}
,并在文章中使用
\ref{}
来引用该图片、表格。然而,在PyLaTeX中,是没有可以直接添加
\label{}
和
\ref{}
的类。在手动添加
\label{}
和
\ref{}
时,也遇到了不少的问题。以下内容为一些问题及解决方法。
问题
- 如何添加
\label{}
和\ref{}
? - 在添加了
\label{}
和\ref{}
后,交叉引用屡次出错,得编译多次才能成功。或者需要使用tex编辑器打开.tex
文件,使用XeLaTeX
编译器编译两次才能成功。 - 在PyLaTeX中如何使用
latexmk
和XeLaTeX
?
解决方法
问题1: 在PyLaTeX中直接使用LaTeX中的语句。在LaTeX中,label 和reference分别为\label{fig:kitten}%
和\ref{fig:kitten}
。在PyLaTeX中应该添加的语句为:kitten_pic.append(Command('label', 'fig:kitten'))
和doc.append(NoEscape(r'\ref{fig:kitten}'))
。
问题2: 导致这个问题原因有两个:
- 在为图片添加
\label{}
时,把\label{}
添加在了\caption{}
的前面,引起交叉引用错误。只需要将\label{}
放在\caption{}
的后面,问题就可以解决了。这个问题在使用LaTeX时,也是会经常发生的。这个问题也可以参考链接: https://texfaq.org/FAQ-crossref。
with doc.create(Figure(position='H')) as kitten_pic:
kitten_pic.add_image('kitten.jpg', width='6cm')
kitten_pic.add_caption('小猫')
kitten_pic.append(Command('label', 'fig:kitten'))
可以在.tex
文件中查看这部分语句:
\begin{figure}[H]%
\centering%
\includegraphics[width=6cm]{kitten.jpg}%
\caption{小猫}%
\label{fig:kitten}%
\end{figure}
- 在PyLaTeX中只使用
XeLaTeX
编译器。为了解决这个问题,只要在PyLaTeX中同时使用latexmk
和XeLaTeX
就可以了。
doc.generate_pdf('full',compiler='latexmk', compiler_args=['-xelatex'], clean_tex=False)
注意: 第一个compiler
只接受str()
,第二个compiler_args
只接受list
。否则,将会出现以下错误:
问题3: 问题2 的回答。
参考链接:
我在Github上的issue答案:https://github.com/JelteF/PyLaTeX/issues/151
Latexmk中的XeLaTeX: http://blog.wxm.be/2015/08/05/use-xelatex-by-default-in-latexmk.html