LATEX 中如何使用中文、並且搭配 listings 製作 style 卻沒辦法套用在中文身上

概要

LATEX 中有時候會需要用到中文,並且如果我們要使用 listings 來配合中文時,常會遇到一些無法顯示中文或無法編譯的問題,這邊紀錄遇到這些問題的解決方法。

解決 LATEX 不能編譯出中文

解決方法如下,加入 CJKutf8 套件,並且在文章開始時加入 \begin{CJK*}{UTF8}{bsmi},最後在配上 \end{CJK*}

其中值得注意的是,bsmi(看起來類似於新細明體)、bkai(看起來類似於標楷體) 表示繁體中文、gmsm and gkai 表示簡體中文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
\documentclass[book, oneside, 12pt]{article}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{bsmi}

\section{大綱}
這裡是大綱,也可輸入英文 \\
You can also type english here.

\section{先備知識}
這裡是先備知識

\end{CJK*}
\end{document}

LATEX 搭配 listings 製作 style 卻沒辦法套用在中文身上,導致編譯錯誤

主要是因為 listings 不支援中文 style。

其中 listings 在製作 style 時有提供 escape(逃脫) 這個用法,他可以使一些字元被忽略掉,讓一些字元不加入 style,而避免 listings 編譯崩潰。

但如果是在程式碼中註解有使用到中文則可以解決。

但 listings 有提供 texcl,texcl 意思為只要碰到註解標記,那就讓後面的字元全部都是註解 style,此時的 CJKutf8 支援 texcl,因此我們就可以透過此優勢來編譯!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
\documentclass{article}

\usepackage{CJKutf8}
\usepackage{listings}
\usepackage{tikz}

\lstset{
extendedchars=false,
commentstyle=\color{blue},
texcl,
%escapebegin=\obeyspaces, %我不懂 obeyspaces 意思
escapeinside=``, % 當遇到 `` 時,裡面的文字保持原本 style 不受 listing 限制
}

\begin{document}
\begin{CJK}{UTF8}{gbsn}

Text % may contain UTF-8 characters

\begin{lstlisting}[language=Python]
# Comment
# 注释 comment with spaces and tabs
# コメント comment
\end{lstlisting}

Text % may contain UTF-8 characters

\newpage
\end{CJK}
\end{document}

成果如下

參考連結

[LaTeX] 如何在文章中輸入中文 Blue’s blog
LaTex 代码模块中文注释 by TransientYear
UTF-8 comment highlighting in lstlisting by StackExchange

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2022 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: