我正在用越南语编写一份关于 C++ 的文档,因此当然会有一些代码。我将使用lstlisting
环境,因为它是代码的最佳选择。
但是,\ttfamily
(默认等宽字体)对我来说似乎太宽了。我想改用 Consolas。但是,inconsolata
当序言中有以下行时,包不起作用:
\usepackage[utf8]{vietnam}
或者
\usepackage[vietnamese=nohyphenation]{hyphsubst}
\usepackage[vietnamese]{babel}
如果没有其中任何一个,所有越南语字母(如ể
或ồ
)都会在 PDF 中消失,尽管inconsolata
可以工作。
我正在使用pdfLaTeX
。我知道我可以轻松地在 Consolas 中将 更改为输入,但将前导码从 转换为XeLaTeX
似乎有点太复杂了。我尝试了四五次都没有成功。pdfLaTeX
XeLaTeX
有人能给我一些想法吗?非常感谢!
以下是我的简短序言(如果您可以将其转换为XeLaTeX
或LuaLaTeX
):
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{vietnam}
\usepackage[unicode]{hyperref}
\usepackage{inconsolata}
\usepackage{listings}
\lstset{basicstyle=\footnotesize\fontfamily{zi4}\selectfont,}
...
我的完整代码可以找到这里。
答案1
正如您所说,您愿意尝试 Xe-/LuaLaTeX,我已尝试将您询问的部分转换为 LuaLaTeX(涉及将字体更改为类似 Palatino 的 TeX Gyre Pagella)。
listings
可能仍然无法很好地处理您的unicode序列(“越南字母”),因此您应该使用该literate
选项。
\documentclass[11pt,a4paper]{article}
\usepackage[vietnamese=nohyphenation]{hyphsubst}
\usepackage[vietnamese]{babel}
\usepackage[unicode]{hyperref}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{indentfirst}
\usepackage{marvosym} %For emoji
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setsansfont{TeX Gyre Heros}
\setmonofont{Inconsolata}
\setmathfont{TeX Gyre Pagella Math}
\setlength{\parskip}{1ex}
\setlength{\parindent}{3ex}
\hypersetup{
colorlinks=true,
linkcolor=black,
filecolor=black,
urlcolor=darkscarlet,
citecolor=darkscarlet
}
\urlstyle{tt}
\definecolor{darkscarlet}{rgb}{0.34, 0.01, 0.1}
\definecolor{ultramarineblue}{rgb}{0.25, 0.4, 0.96}
\definecolor{alizarin}{rgb}{0.82, 0.1, 0.26}
\definecolor{cadmiumgreen}{rgb}{0.0, 0.42, 0.24}
\definecolor{desertsand}{rgb}{0.93, 0.79, 0.69}
\lstdefinestyle{mystyle}{
backgroundcolor=\color{white},
commentstyle=\color{alizarin},
keywordstyle=\color{ultramarineblue},
stringstyle=\color{cadmiumgreen},
basicstyle=\footnotesize\ttfamily,%\ttfamily,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
language=C++,
frame=single
}
\lstset{style=mystyle}
\pagestyle{plain}
\begin{document}
Một cái code đơn giản trong C++: (\textit{A simple code written in C++:})
\begin{lstlisting}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
\end{lstlisting}
\end{document}
答案2
如果您打算在列表中使用越南字符(我猜是用于评论),我建议使用minted
。
有一些等宽字体支持 T5(越南语)编码。下面是一些示例,inconsolata
但最后一个字体不支持越南语,因此不适合此目的。
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{vietnam}
\usepackage{minted}
\usepackage{inconsolata}
\usepackage[unicode]{hyperref}
%%% this is only for the inconsolata example
\makeatletter
\define@key{FV}{fontencoding}%
{\ifstrempty{#1}%
{\let\FV@FontEncoding\relax}%
{\ifstrequal{#1}{none}%
{\let\FV@FontEncoding\relax}%
{\def\FV@FontEncoding{\fontencoding{#1}}}}}
\expandafter\def\expandafter\FV@SetupFont\expandafter{%
\expandafter\FV@FontEncoding\FV@SetupFont}
\fvset{fontencoding=none}
\makeatother
%%% end
%%% this is only for the txtt example
\makeatletter
\input{t5txtt.fd}
\DeclareFontShape{T5}{txtt}{m}{it}{<->ssub * txtt/m/sl}{}
\makeatother
%%% end
\begin{document}
\subsubsection*{TXTT}
\setminted{fontfamily=txtt}
\begin{minted}{cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
// Một cái code đơn giản trong C++
\end{minted}
\subsubsection*{LMTT}
\setminted{fontfamily=lmtt}
\begin{minted}{cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
// Một cái code đơn giản trong C++
\end{minted}
\subsubsection*{QCR}
\setminted{fontfamily=qcr}
\begin{minted}{cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
// Một cái code đơn giản trong C++
\end{minted}
\subsubsection*{ZLMTT}
\setminted{fontfamily=zlmtt}
\begin{minted}{cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
// Một cái code đơn giản trong C++
\end{minted}
\subsubsection*{ZI4}
\fvset{fontencoding=T1}
\setminted{fontfamily=zi4}
\begin{minted}{cpp}
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!";
}
\end{minted}
\end{document}