% TODO: convert comments to english and refine the settings
%
% latex 文档块注释
\newcommand{\CMT}[1]{}

\documentclass[a4paper,11pt]{article}

% 字体处理包, 放在最前面
\usepackage{fontspec}
% 英文字体
\setmainfont{Lora}
\setsansfont{Lora}
\setmonofont{Source Code Pro}
% 中文字体 {
    % 中文自动换行
    \XeTeXlinebreaklocale "zh"
    \XeTeXlinebreakskip = 0pt plus 1pt
    % 中文编码支持
    \usepackage{xltxtra, xunicode}
    % 中文支持包
    \usepackage[AutoFakeBold=true, AutoFakeSlant=true]{xeCJK}
    % 书签
    \usepackage{CJKutf8}
    % 中文字体设置
    \setCJKmainfont{Source Han Serif SC}
    \setCJKsansfont{Source Han Serif SC}
    \setCJKmonofont{Source Han Serif SC}

    % TODO: fixme
    \setCJKfamilyfont{SimSun}{Source Han Serif SC}
    \setCJKfamilyfont{SimHei}{Source Han Serif SC}
    \setCJKfamilyfont{FangSong}{Source Han Serif SC}
    \setCJKfamilyfont{KaiTi}{Source Han Serif SC}
    \setCJKfamilyfont{YouYuan}{Source Han Serif SC}

    \newcommand{\song}{\CJKfamily{SimSun}} % 宋体
    \newcommand{\hei}{\CJKfamily{SimHei}}  % 黑体
    \newcommand{\fs}{\CJKfamily{FangSong}} % 仿宋
    \newcommand{\kai}{\CJKfamily{KaiTi}}   % 楷体
    \newcommand{\yy}{\CJKfamily{YouYuan}}  % 楷体
% }

% 排版设计 {
    \usepackage{geometry}

    % 设置缩进
    \usepackage{indentfirst}
    \setlength{\parindent}{2em}

    % 设置行距
    \linespread{1.6}

    \usepackage{titlesec}
    \usepackage{titletoc}
    % 设置脚注
    \renewcommand*{\thefootnote}{\arabic{footnote}} % 脚注为罗马数字编号
    \usepackage[perpage,stable]{footmisc} % 每页重新编号,如果不希望这样可以去掉 [perpage]
    % 设置页眉
    \usepackage{fancyhdr}
    \usepackage{pageslts}
    % 默认选用的页码为数字格式
    \pagenumbering{arabic}
    % 多行表格
    \usepackage{multirow}
% }

% 图形与符号 {
    % 避免浮动
    \usepackage{float}
    % 插入图片的宏包
    \usepackage{graphicx}
    % 图标包 typicous
    % \usepackage{typicons}
    % 作图
    \usepackage{tikz}
    \usetikzlibrary{graphs}
    \usepackage{pgfplots}
    \usepackage{mathtools}
    \usepgfplotslibrary{groupplots}
    \usetikzlibrary{arrows.meta}
    \usetikzlibrary{shapes.geometric, arrows}
    % 流程图起始结束
    \tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm,text centered, draw=black, fill=red!30]
    \tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=blue!30]
    \tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=orange!30]
    \tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=green!30]
    \tikzstyle{arrow} = [thick,->,>=stealth]
% }

% 其他辅助包 {
    % 各种下划线
    \usepackage{ulem}

    % 超链接与书签包
    %
    % 1. 需要将包 url 放在 hyperref 包之前保证长 url 能够换行
    % 2. 加入超链接的用法为
    %
    %        \url{https://www.google.com}或\href{https://www.google.com}{Google}
    %
    % 3. hyperref 必须加入 unicode 方式, 保证书签能够显示 utf8 字符
    \usepackage[hyphens]{url}
    \usepackage[unicode,colorlinks,linkcolor=black,anchorcolor=blue,citecolor=green]{hyperref}

    % 导入 pdf 文件, 用法:  \includepdf{mypdffile.pdf}
    \usepackage{pdfpages}

    % 数学长等号
    \usepackage{extarrows}
    % 特殊符号
    \usepackage{bbding}
    % 矩阵中使用虚线的宏包 TODO(2021-12-10): 需要额外安装
    % \usepackage{pmat}

    \usepackage{enumitem}
% }

% 数学公式 {
    \usepackage{latexsym}
    \usepackage{amsmath}                 % AMS LaTeX宏包
    \usepackage{amssymb}                 % 用来排版漂亮的数学公式
    \usepackage{amsbsy}
    \usepackage{amsthm}
    \usepackage{amsfonts}
    \usepackage{mathrsfs}                % 英文花体字体
    \usepackage{bm}                      % 数学公式中的黑斜体
    \usepackage{relsize}                 % 调整公式字体大小：\mathsmaller, \mathlarger
    \usepackage{caption}                 % 浮动图形和表格标题样式
    \usepackage{esint}                   % 面积分符号\oiint
    \usepackage{mathdots}
    \allowdisplaybreaks
% }

% 代码格式 {
    \usepackage{algorithm}
    \usepackage{algorithmic}

    \usepackage{fancyvrb}
    \usepackage{color}
    % \usepackage[colorlinks,linkcolor=black,anchorcolor=blue,citecolor=green]{hyperref}

    \usepackage{listings}
    % 一般 lstlisitng 样式
    \lstdefinestyle{general}{
        basicstyle=\linespread{0.8}\small\ttfamily, % 代码行距设置为 0.8
        frameround=fttt,
        frame=trBL,
        numbers=left,
        firstnumber=1,
        morecomment=[l],
        keepspaces=true,
        morecomment=[s][\color{blue}]{/*+}{*/},
        morecomment=[s][\color{green}]{/*-}{*/},
        morecomment=[s][\color{red}]{/**}{*/},
    }
    % 模拟 verb 环境实现自动换行
    \lstdefinestyle{verb} {
        upquote=true,
        aboveskip=10pt, % lst 和上面的间距
        belowskip=0pt, % lst 和下面的间距
        basicstyle=\linespread{1.0}\small\ttfamily,  % 代码行距设置为 0.8
        columns=flexible,
        breaklines=true, % 启用自动换行
        frame=single, % 单边框
        postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space}, % 换行符号
    }
% }
