diff --git a/License b/License
new file mode 100644
index 0000000..2244313
--- /dev/null
+++ b/License
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/README-CN.md b/README-CN.md
new file mode 100644
index 0000000..1b31dab
--- /dev/null
+++ b/README-CN.md
@@ -0,0 +1,32 @@
+
+
+
+[Homepage](https://elegantlatex.org/) | [Github](https://github.com/ElegantLaTeX/ElegantBook) | [CTAN](https://ctan.org/pkg/elegantbook) | [Download](https://github.com/ElegantLaTeX/ElegantBook/releases) | [Wiki](https://github.com/ElegantLaTeX/ElegantBook/wiki) | [Weibo](https://weibo.com/elegantlatex)
+
+![License](https://img.shields.io/ctan/l/elegantbook.svg) ![CTAN Version](https://img.shields.io/ctan/v/elegantbook.svg) ![Github Version](https://img.shields.io/github/release/ElegantLaTeX/ElegantBook.svg) ![Repo Size](https://img.shields.io/github/repo-size/ElegantLaTeX/ElegantBook.svg)
+
+---
+
+# ElegantBook 优美的 LaTeX 书籍模板
+
+ElegantBook 是为 LaTeX 书籍写作而设计的模板,由 [Dongsheng Deng](https://ddswhu.me/) 和 [Liam Huang](https://liam.page/) 创立,模板创立的初衷是方便我们自己做笔记 :smile:。如果你有其他问题、建议或者报告 bug,可以提交 issues 或者给我们发邮件:elegantlatex2e@gmail.com。QQ 用户交流群:692108391,欢迎加入。
+
+## 重要提示
+
+**重要提示**:ElegantLaTeX 项目 **不接受** 任何非预授权的提交(pull requests)!
+
+## 致谢
+
+特别感谢 ChinaTeX 以及 [LaTeX 工作室](http://www.latexstudio.net/)对于本系列模板的大力宣传与推广。
+
+如果你喜欢我们的模板,你可以在 Github 上收藏我们的模板。
+
+## 协议
+
+本模板发布遵循 LaTeX 项目公共许可证 1.3 c 或更高版本。如果是衍生作品,请务必加入协议声明和模板信息(github、CTAN 地址)。
+
+## 衍生作
+
++ [ElegantBookdown](https://github.com/XiangyunHuang/ElegantBookdown):[XiangyunHuang](https://github.com/XiangyunHuang) 开发并维护的基于 ElegantBook 的 Bookdown 模板。
++ [bookdownplus](https://github.com/pzhaonet/bookdownplus):应网友要求,[pzhaonet](https://github.com/pzhaonet) 在 bookdownplus 收录了 ElegantPaper 模板,并为 Mac 做了字体适配。
++ [PanBook](https://github.com/annProg/PanBook):[annProg](https://github.com/annProg) 开发并维护的基于 Markdown 写作的工作流,收录了 ElegantBook 和 ElegantPaper 模板。
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..77b66fd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,316 @@
+# 简介
+
+语音合成(Speech Synthesis)是一种将文本转换为语音的技术,是人工智能的子领域之一。本文档简要介绍当前语音合成技术的发展。
+
+
+# 附目录
+
+1 语音合成概述 1
+
+1.1 背景和概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
+
+1.1.1 背景介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
+
+1.1.2 语音合成概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
+
+1.1.3 语音合成的历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
+
+1.1.4 当代语音合成框架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
+
+1.2 Awesome List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
+
+1.3 参考书籍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
+
+1.4 语音相关的会议、期刊、比赛和公司 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
+
+1.4.1 会议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
+
+1.4.2 期刊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+
+1.4.3 最新论文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+
+1.4.4 比赛 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+
+1.4.5 公司 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+
+1.4.6 微信公众号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
+
+1.5 开源资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
+
+1.5.1 中文数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
+
+1.5.2 英文数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
+
+1.5.3 情感数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
+
+1.5.4 其它数据集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
+
+1.5.5 开源工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
+
+1.5.6 开源项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
+
+1.6 语音合成评价指标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
+
+1.7 平均意见得分的测评要求与方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+
+1.7.1 实验要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+
+1.7.2 实验方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+
+1.7.3 实验步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+
+1.7.4 实验设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
+
+1.7.5 实验数据处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
+
+2 语音信号基础 11
+
+2.1 参考资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2 语音基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2.1 能量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2.2 短时能量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2.3 声强和声强级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2.4 响度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
+
+2.2.5 过零率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
+
+2.2.6 共振峰 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
+
+2.2.7 基频和基音周期 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
+
+2.2.8 音高 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
+
+2.2.9 MFCC 和语谱图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 目录
+
+2.3 语言学 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
+
+2.3.1 国际音标简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
+
+2.3.2 IPA 的字母和发音 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
+
+2.3.3 音系学 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
+
+2.3.4 参考资料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
+
+2.4 音频格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+2.5 数字信号处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+2.5.1 模数转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+2.5.2 频谱泄露 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+2.5.3 频率分辨率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+2.6 其它概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
+
+3 语音特征提取 20
+
+3.1 预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+
+3.1.1 预加重 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+
+3.1.2 分帧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+
+3.1.3 加窗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
+
+3.2 短时傅里叶变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
+
+3.3 听觉特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
+
+3.3.1 梅尔滤波 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
+
+3.3.2 Bark 滤波 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
+
+3.4 倒谱分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
+
+3.5 常见的声学特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
+
+3.5.1 FBank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
+
+3.5.2 MFCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
+
+3.6 具体操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
+
+3.6.1 利用 librosa 读取音频 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
+
+3.6.2 提取梅尔频谱 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
+
+3.6.3 提取 MFCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
+
+4 音库制作和文本前端 29
+
+4.1 音库制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
+
+4.1.1 音库制作概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
+
+4.1.2 发音人选型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
+
+4.1.3 录音文本收集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
+
+4.1.4 音频录制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
+
+4.1.5 语料整理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
+
+4.1.6 标注 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
+
+4.2 文本前端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
+
+4.2.1 文本前端在语音合成中扮演的角色 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
+
+4.2.2 文本前端的主要组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
+
+4.2.3 Unicode 调研和文本预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
+
+4.2.4 文本规范化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
+
+4.2.5 分词 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
+
+4.2.6 文本转音素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
+
+iii 目录
+
+4.2.7 韵律分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
+
+4.2.8 文本前端的工程实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
+
+4.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
+
+5 声学模型 35
+
+5.1 Tacotron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
+
+5.1.1 Tacotron-2 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
+
+5.1.2 声学特征建模网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
+
+5.1.3 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
+
+5.2 FastSpeech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
+
+5.2.1 模型结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
+
+5.2.2 损失函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
+
+5.2.3 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
+
+5.3 VITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
+
+5.3.1 模型整体结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
+
+5.3.2 变分推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
+
+5.3.3 对齐估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
+
+5.3.4 对抗训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
+
+5.3.5 总体损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
+
+5.3.6 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
+
+6 声码器 46
+
+6.1 Griffin-Lim 声码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
+
+6.1.1 算法原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
+
+6.1.2 代码实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
+
+6.2 STRAIGHT 声码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
+
+6.2.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
+
+6.2.2 特征提取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
+
+6.2.3 语音合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
+
+6.3 WORLD 声码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
+
+6.3.1 声学特征 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
+
+6.3.2 WORLD 的分析功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
+
+6.3.3 DIO 算法提取基频 F0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
+
+6.3.4 CheapTrick 算法提取频谱包络 SP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
+
+6.3.5 PLANTINUM 提取非周期信号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
+
+6.3.6 WORLD 的合成算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
+
+6.3.7 使用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
+
+6.4 Neural Homomorphic Vocoder (NHV) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
+
+6.4.1 源滤波器合成原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
+
+6.4.2 共振峰合成方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
+
+6.4.3 NHV 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
+
+6.4.4 整体结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
+
+6.4.5 脉冲串生成器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
+
+6.4.6 神经网络滤波估计器(Neural Network Filter Estimator) . . . . . . . . . . . . . . . . . . . . 54
+
+6.4.7 线性时变(LTV)滤波器和可训练的有限冲激响应(FIRs) . . . . . . . . . . . . . . . . . . 55
+
+iv 目录
+
+6.4.8 神经网络的训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+
+6.4.9 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+
+6.5 HiFiGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+
+6.5.1 HiFiGAN 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+
+6.5.2 HiFiGAN 生成器简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+
+6.5.3 上采样结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
+
+6.5.4 多感受野融合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
+
+6.5.5 HiFiGAN 判别器简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
+
+6.5.6 多尺度判别器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
+
+6.5.7 多周期判别器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
+
+6.5.8 损失函数简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
+
+6.5.9 生成对抗损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
+
+6.5.10 梅尔频谱损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
+
+6.5.11 特征匹配损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
+
+6.5.12 整体损失 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
+
+7 语音合成知识结构 67
+
+7.1 基本组成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
+
+7.2 声音转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
+
+7.3 多语种语音合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
+
+7.4 进阶 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
+
+7.4.1 高表现力语音合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
+
+7.4.2 个性化语音合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
+
+7.4.3 方言迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
+
+7.4.4 歌唱合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
+
+7.4.5 语音合成的稳定性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
+
+7.4.6 语音合成的效率优化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
\ No newline at end of file
diff --git a/elegantbook-cn.aux b/elegantbook-cn.aux
new file mode 100644
index 0000000..25b9bab
--- /dev/null
+++ b/elegantbook-cn.aux
@@ -0,0 +1,126 @@
+\relax
+\providecommand\hyper@newdestlabel[2]{}
+\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
+\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
+\global\let\oldcontentsline\contentsline
+\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global\let\oldnewlabel\newlabel
+\gdef\newlabel#1#2{\newlabelxx{#1}#2}
+\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\ifx\hyper@anchor\@undefined
+\let\contentsline\oldcontentsline
+\let\newlabel\oldnewlabel
+\fi}
+\fi}
+\global\let\hyper@last\relax
+\gdef\HyperFirstAtBeginDocument#1{#1}
+\providecommand*\HyPL@Entry[1]{}
+\@writefile{toc}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lof}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lot}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\abx@aux@refcontext{none/global//global/global}
+\HyPL@Entry{0<>}
+\pgfsyspdfmark {pgfid1}{28202053}{12117707}
+\HyPL@Entry{1<>}
+\HyPL@Entry{4<>}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {1}Elegant\LaTeX {} 系列模板介绍}{1}{chapter.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.1}ElegantBook 更新说明}{1}{section.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.2}模板安装与更新}{1}{section.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.1}在线使用模板}{1}{subsection.1.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.2}本地免安装使用}{2}{subsection.1.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.3}发行版安装使用}{2}{subsection.1.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.4}更新问题}{2}{subsection.1.2.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2.5}其他发行版本}{2}{subsection.1.2.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.3}关于提交}{2}{section.1.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {2}ElegantBook 设置说明}{3}{chapter.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.1}语言模式}{3}{section.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.2}设备选项}{3}{section.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.3}颜色主题}{3}{section.2.3}\protected@file@percent }
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {2.1}{\ignorespaces ElegantBook 模板中的颜色主题\relax }}{4}{table.caption.3}\protected@file@percent }
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{tab:color thm}{{2.1}{4}{ElegantBook 模板中的颜色主题\relax }{table.caption.3}{}}
+\@writefile{lol}{\defcounter {refsection}{0}\relax }\@writefile{lol}{\contentsline {lstlisting}{]}{4}{lstlisting.2.-5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.4}封面}{4}{section.2.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.1}封面个性化}{4}{subsection.2.4.1}\protected@file@percent }
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {2.2}{\ignorespaces 封面元素信息\relax }}{4}{table.caption.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.2}封面图}{4}{subsection.2.4.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.3}徽标}{5}{subsection.2.4.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.4.4}自定义封面}{5}{subsection.2.4.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.5}章标标题}{5}{section.2.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.6}数学环境简介}{5}{section.2.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.6.1}定理类环境的使用}{6}{subsection.2.6.1}\protected@file@percent }
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {2.3}{\ignorespaces 定理类环境\relax }}{6}{table.caption.5}\protected@file@percent }
+\newlabel{tab:theorem-class}{{2.3}{6}{定理类环境\relax }{table.caption.5}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.6.2}其他环境的使用}{6}{subsection.2.6.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.7}列表环境}{6}{section.2.7}\protected@file@percent }
+\abx@aux@cite{cn1}
+\abx@aux@segm{0}{0}{cn1}
+\abx@aux@cite{en2}
+\abx@aux@segm{0}{0}{en2}
+\abx@aux@cite{en3}
+\abx@aux@segm{0}{0}{en3}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.8}参考文献}{7}{section.2.8}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.9}添加序章}{7}{section.2.9}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.10}目录选项与深度}{7}{section.2.10}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.11}章节摘要}{8}{section.2.11}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.12}章后习题}{8}{section.2.12}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{第 2{} 章\tmspace +\thickmuskip {.2777em}练习}{8}{section*.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.13}旁注}{9}{section.2.13}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {3}字体选项}{10}{chapter.3}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.1}数学字体选项}{10}{section.3.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.2}使用 newtx 系列字体}{10}{section.3.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}连字符}{10}{subsection.3.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}宏包冲突}{10}{subsection.3.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.3}中文字体选项}{11}{section.3.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}方正字体选项}{11}{subsection.3.3.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}其他中文字体}{11}{subsection.3.3.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {4}ElegantBook 写作示例}{13}{chapter.4}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4.1}Lebesgue 积分}{13}{section.4.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}积分的定义}{13}{subsection.4.1.1}\protected@file@percent }
+\newlabel{def:int}{{4.1}{13}{积分的定义}{tcb@cnt@definition.4.1}{}}
+\newlabel{inter}{{4.1}{13}{积分的定义}{equation.4.1.1}{}}
+\newlabel{inter2}{{4.2}{13}{积分的定义}{equation.4.1.2}{}}
+\newlabel{exer:43}{{4.1}{13}{积分的定义}{exer.4.1}{}}
+\newlabel{ex:1}{{4.3}{13}{积分的定义}{equation.4.1.3}{}}
+\newlabel{thm:fubi}{{4.1}{14}{积分的定义}{tcb@cnt@theorem.4.1}{}}
+\newlabel{eq:461}{{4.4}{14}{积分的定义}{equation.4.1.4}{}}
+\newlabel{pro:max}{{4.1}{14}{积分的定义}{tcb@cnt@proposition.4.1}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces 散点图示例 $\hat {y}=a+bx$ \relax }}{14}{figure.caption.8}\protected@file@percent }
+\newlabel{fig:scatter}{{4.1}{14}{散点图示例 $\hat {y}=a+bx$ \relax }{figure.caption.8}{}}
+\newlabel{property:cauchy}{{4.1.1}{15}{积分的定义}{figure.caption.8}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{第 4{} 章\tmspace +\thickmuskip {.2777em}练习}{15}{section*.9}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {5}常见问题集}{16}{chapter.5}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {6}版本更新历史}{17}{chapter.6}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2021/05/02 -- 版本 4.1 正式发布。}{17}{chapter.6}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2020/04/12 -- 版本 3.11 正式发布,\leavevmode {\color {red}此版本为 3.x 最后版本。}}{17}{Item.44}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2020/02/10 -- 版本 3.10 正式发布}{17}{Item.48}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/08/18 -- 版本 3.09 正式发布}{17}{Item.57}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/05/28 -- 版本 3.08 正式发布}{17}{Item.62}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/04/15 -- 版本 3.07 正式发布}{18}{Item.71}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/02/25 -- 版本 3.06 正式发布}{18}{Item.76}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/01/22 -- 版本 3.05 正式发布}{18}{Item.85}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/01/15 -- 版本 3.04 正式发布}{18}{Item.88}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2019/01/08 -- 版本 3.03 正式发布}{18}{Item.91}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2018/12/31 -- 版本 3.02 正式发布}{18}{Item.93}\protected@file@percent }
+\abx@aux@nociteall
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2018/12/16 -- 版本 3.01 正式发布}{19}{Item.96}\protected@file@percent }
+\@writefile{dates}{\defcounter {refsection}{0}\relax }\@writefile{dates}{\contentsline {section}{2018/12/06 -- 版本 3.00 正式发布}{19}{Item.98}\protected@file@percent }
+\abx@aux@read@bbl@mdfivesum{nobblfile}
+\abx@aux@read@bblrerun
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {A}基本数学工具}{20}{appendix.A}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {A.1}求和算子与描述统计量}{20}{section.A.1}\protected@file@percent }
+\gdef \@abspage@last{24}
diff --git a/elegantbook-cn.bcf b/elegantbook-cn.bcf
new file mode 100644
index 0000000..4d70d65
--- /dev/null
+++ b/elegantbook-cn.bcf
@@ -0,0 +1,2854 @@
+
+
+
+
+
+ output_encoding
+ utf8
+
+
+ input_encoding
+ utf8
+
+
+ debug
+ 0
+
+
+ mincrossrefs
+ 2
+
+
+ minxrefs
+ 2
+
+
+ sortcase
+ 1
+
+
+ sortupper
+ 1
+
+
+
+
+
+
+ alphaothers
+ +
+
+
+ labelalpha
+ 0
+
+
+ labelnamespec
+ shortauthor
+ author
+ shorteditor
+ editor
+ translator
+
+
+ labeltitle
+ 0
+
+
+ labeltitlespec
+ shorttitle
+ title
+ maintitle
+
+
+ labeltitleyear
+ 0
+
+
+ labeldateparts
+ 0
+
+
+ labeldatespec
+ date
+ year
+ eventdate
+ origdate
+ urldate
+ nodate
+
+
+ julian
+ 0
+
+
+ gregorianstart
+ 1582-10-15
+
+
+ maxalphanames
+ 3
+
+
+ maxbibnames
+ 3
+
+
+ maxcitenames
+ 1
+
+
+ maxsortnames
+ 3
+
+
+ maxitems
+ 1
+
+
+ minalphanames
+ 1
+
+
+ minbibnames
+ 3
+
+
+ mincitenames
+ 1
+
+
+ minsortnames
+ 3
+
+
+ minitems
+ 1
+
+
+ nohashothers
+ 0
+
+
+ noroman
+ 0
+
+
+ nosortothers
+ 0
+
+
+ singletitle
+ 0
+
+
+ skipbib
+ 0
+
+
+ skipbiblist
+ 0
+
+
+ skiplab
+ 0
+
+
+ sortalphaothers
+ +
+
+
+ sortlocale
+ english
+
+
+ sortingtemplatename
+ none
+
+
+ sortsets
+ 0
+
+
+ uniquelist
+ false
+
+
+ uniquename
+ false
+
+
+ uniqueprimaryauthor
+ 0
+
+
+ uniquetitle
+ 0
+
+
+ uniquebaretitle
+ 0
+
+
+ uniquework
+ 0
+
+
+ useprefix
+ 1
+
+
+ useafterword
+ 1
+
+
+ useannotator
+ 1
+
+
+ useauthor
+ 1
+
+
+ usebookauthor
+ 1
+
+
+ usecommentator
+ 1
+
+
+ useeditor
+ 1
+
+
+ useeditora
+ 1
+
+
+ useeditorb
+ 1
+
+
+ useeditorc
+ 1
+
+
+ useforeword
+ 1
+
+
+ useholder
+ 1
+
+
+ useintroduction
+ 1
+
+
+ usenamea
+ 1
+
+
+ usenameb
+ 1
+
+
+ usenamec
+ 1
+
+
+ usetranslator
+ 0
+
+
+ useshortauthor
+ 1
+
+
+ useshorteditor
+ 1
+
+
+
+
+
+ labelalpha
+ 0
+
+
+ labelnamespec
+ shortauthor
+ author
+ shorteditor
+ editor
+ translator
+
+
+ labeltitle
+ 0
+
+
+ labeltitlespec
+ shorttitle
+ title
+ maintitle
+
+
+ labeltitleyear
+ 0
+
+
+ labeldateparts
+ 0
+
+
+ labeldatespec
+ date
+ year
+ eventdate
+ origdate
+ urldate
+ nodate
+
+
+ maxalphanames
+ 3
+
+
+ maxbibnames
+ 3
+
+
+ maxcitenames
+ 1
+
+
+ maxsortnames
+ 3
+
+
+ maxitems
+ 1
+
+
+ minalphanames
+ 1
+
+
+ minbibnames
+ 3
+
+
+ mincitenames
+ 1
+
+
+ minsortnames
+ 3
+
+
+ minitems
+ 1
+
+
+ nohashothers
+ 0
+
+
+ noroman
+ 0
+
+
+ nosortothers
+ 0
+
+
+ singletitle
+ 0
+
+
+ skipbib
+ 0
+
+
+ skiplab
+ 0
+
+
+ skipbiblist
+ 0
+
+
+ uniquelist
+ false
+
+
+ uniquename
+ false
+
+
+ uniqueprimaryauthor
+ 0
+
+
+ uniquetitle
+ 0
+
+
+ uniquebaretitle
+ 0
+
+
+ uniquework
+ 0
+
+
+ useprefix
+ 1
+
+
+ useafterword
+ 1
+
+
+ useannotator
+ 1
+
+
+ useauthor
+ 1
+
+
+ usebookauthor
+ 1
+
+
+ usecommentator
+ 1
+
+
+ useeditor
+ 1
+
+
+ useeditora
+ 1
+
+
+ useeditorb
+ 1
+
+
+ useeditorc
+ 1
+
+
+ useforeword
+ 1
+
+
+ useholder
+ 1
+
+
+ useintroduction
+ 1
+
+
+ usenamea
+ 1
+
+
+ usenameb
+ 1
+
+
+ usenamec
+ 1
+
+
+ usetranslator
+ 0
+
+
+ useshortauthor
+ 1
+
+
+ useshorteditor
+ 1
+
+
+
+
+ datamodel
+ labelalphanametemplate
+ labelalphatemplate
+ inheritance
+ translit
+ uniquenametemplate
+ sortingnamekeytemplate
+ sortingtemplate
+ extradatespec
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ controlversion
+ alphaothers
+ sortalphaothers
+ presort
+ texencoding
+ bibencoding
+ sortingtemplatename
+ sortlocale
+ language
+ autolang
+ langhook
+ indexing
+ hyperref
+ backrefsetstyle
+ block
+ pagetracker
+ citecounter
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ labeldate
+ labeltime
+ dateera
+ date
+ time
+ eventdate
+ eventtime
+ origdate
+ origtime
+ urldate
+ urltime
+ alldatesusetime
+ alldates
+ alltimes
+ gregorianstart
+ autocite
+ notetype
+ uniquelist
+ uniquename
+ refsection
+ refsegment
+ citereset
+ sortlos
+ babel
+ datelabel
+ backrefstyle
+ arxiv
+ gblanorder
+ gbcitelocal
+ gbbiblocal
+ gblocal
+ gbbiblabel
+ gbnamefmt
+ gbalign
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ debug
+ loadfiles
+ safeinputenc
+ sortcase
+ sortupper
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ sortcites
+ sortsets
+ backref
+ backreffloats
+ trackfloats
+ parentracker
+ labeldateusetime
+ datecirca
+ dateuncertain
+ dateusetime
+ eventdateusetime
+ origdateusetime
+ urldateusetime
+ julian
+ datezeros
+ timezeros
+ timezones
+ seconds
+ autopunct
+ punctfont
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ defernumbers
+ locallabelwidth
+ bibwarn
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ defernums
+ firstinits
+ sortfirstinits
+ sortgiveninits
+ labelyear
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ gbmedium
+ gbannote
+ gbfieldtype
+ gbfnperpage
+ gbfootbib
+ gbstyle
+ gbtype
+ gbcodegbk
+ gbstrict
+ gbtitlelink
+ gbctexset
+ gbnoauthor
+ gbfieldstd
+ gbpub
+ gbpunctin
+ subentrycomp
+ bibtexcaseprotection
+ mincrossrefs
+ minxrefs
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+ maxparens
+ dateeraauto
+
+
+ alphaothers
+ sortalphaothers
+ presort
+ indexing
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ skiplos
+ labelyear
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ subentrycomp
+ bibtexcaseprotection
+ labelalphatemplate
+ translit
+ sortexclusion
+ sortinclusion
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+
+
+ noinherit
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ presort
+ indexing
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ skiplos
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ subentrycomp
+ bibtexcaseprotection
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+
+
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ terseinits
+ nohashothers
+ nosortothers
+ useprefix
+
+
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ terseinits
+ useprefix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ inbook
+ inproceedings
+ incollection
+ periodical
+
+
+
+ inbook
+ inproceedings
+ incollection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ article
+
+
+
+ periodical
+
+
+
+
+
+
+
+ newspaper
+
+
+
+
+ database
+
+
+
+
+
+ dataset
+
+
+
+
+
+ software
+
+
+
+
+
+ map
+
+
+
+
+
+ archive
+
+
+
+
+
+ misc
+
+
+
+
+ misc
+
+
+
+ book
+ inbook
+
+
+
+
+
+ standard
+
+
+
+
+ patent
+
+
+
+ inproceedings
+ conference
+
+
+
+
+
+ proceedings
+
+
+
+
+
+ incollection
+
+
+
+
+
+ collection
+
+
+
+
+
+ report
+ techreport
+
+
+
+
+
+ thesis
+ mastersthesis
+ phdthesis
+
+
+
+
+
+ online
+ electronic
+ www
+
+
+
+
+
+
+
+ manual
+
+
+
+
+
+
+
+
+
+ unpublished
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ report
+
+
+
+
+
+
+
+ thesis
+
+
+
+
+
+
+ manual
+
+
+
+
+
+
+ unpublished
+
+
+
+
+
+
+ database
+
+
+
+
+
+
+ dataset
+
+
+
+
+
+
+ software
+
+
+
+
+
+
+ map
+
+
+
+
+
+
+ archive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prefix
+ family
+
+
+
+
+ shorthand
+ label
+ labelname
+ labelname
+
+
+ year
+
+
+
+
+
+ labelyear
+ year
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prefix
+ family
+ given
+
+
+
+
+ prefix
+ family
+
+
+ given
+
+
+ suffix
+
+
+ prefix
+
+
+ mm
+
+
+
+ sf,sm,sn,pf,pm,pn,pp
+ family,given,prefix,suffix
+ boolean,integer,string,xml
+ default,transliteration,transcription,translation
+
+
+ article
+ artwork
+ audio
+ bibnote
+ book
+ bookinbook
+ booklet
+ collection
+ commentary
+ customa
+ customb
+ customc
+ customd
+ custome
+ customf
+ dataset
+ inbook
+ incollection
+ inproceedings
+ inreference
+ image
+ jurisdiction
+ legal
+ legislation
+ letter
+ manual
+ misc
+ movie
+ music
+ mvcollection
+ mvreference
+ mvproceedings
+ mvbook
+ online
+ patent
+ performance
+ periodical
+ proceedings
+ reference
+ report
+ review
+ set
+ software
+ standard
+ suppbook
+ suppcollection
+ suppperiodical
+ thesis
+ unpublished
+ video
+ xdata
+ newspaper
+
+
+ sortyear
+ volume
+ volumes
+ abstract
+ addendum
+ annotation
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ edition
+ eid
+ entrysubtype
+ eprintclass
+ eprinttype
+ eventtitle
+ eventtitleaddon
+ gender
+ howpublished
+ indexsorttitle
+ indextitle
+ isan
+ isbn
+ ismn
+ isrn
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ iswc
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ label
+ langid
+ langidopts
+ library
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ nameaddon
+ note
+ number
+ origtitle
+ pagetotal
+ part
+ relatedstring
+ relatedtype
+ reprinttitle
+ series
+ shorthandintro
+ subtitle
+ title
+ titleaddon
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ venue
+ version
+ shorthand
+ shortjournal
+ shortseries
+ shorttitle
+ sorttitle
+ sortshorthand
+ sortkey
+ presort
+ institution
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ location
+ organization
+ origlocation
+ origpublisher
+ publisher
+ afterword
+ annotator
+ author
+ bookauthor
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ foreword
+ holder
+ introduction
+ namea
+ nameb
+ namec
+ translator
+ shortauthor
+ shorteditor
+ sortname
+ authortype
+ editoratype
+ editorbtype
+ editorctype
+ editortype
+ bookpagination
+ nameatype
+ namebtype
+ namectype
+ pagination
+ pubstate
+ type
+ language
+ origlanguage
+ crossref
+ xref
+ date
+ endyear
+ year
+ month
+ day
+ hour
+ minute
+ second
+ timezone
+ season
+ endmonth
+ endday
+ endhour
+ endminute
+ endsecond
+ endtimezone
+ endseason
+ eventdate
+ eventendyear
+ eventyear
+ eventmonth
+ eventday
+ eventhour
+ eventminute
+ eventsecond
+ eventtimezone
+ eventseason
+ eventendmonth
+ eventendday
+ eventendhour
+ eventendminute
+ eventendsecond
+ eventendtimezone
+ eventendseason
+ origdate
+ origendyear
+ origyear
+ origmonth
+ origday
+ orighour
+ origminute
+ origsecond
+ origtimezone
+ origseason
+ origendmonth
+ origendday
+ origendhour
+ origendminute
+ origendsecond
+ origendtimezone
+ origendseason
+ urldate
+ urlendyear
+ urlyear
+ urlmonth
+ urlday
+ urlhour
+ urlminute
+ urlsecond
+ urltimezone
+ urlseason
+ urlendmonth
+ urlendday
+ urlendhour
+ urlendminute
+ urlendsecond
+ urlendtimezone
+ urlendseason
+ doi
+ eprint
+ file
+ verba
+ verbb
+ verbc
+ url
+ xdata
+ ids
+ entryset
+ related
+ keywords
+ options
+ relatedoptions
+ pages
+ execute
+ mark
+ medium
+ nameformat
+ namefmtid
+ shortbooktitle
+ lansortorder
+
+
+ abstract
+ annotation
+ authortype
+ bookpagination
+ crossref
+ day
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ endday
+ endhour
+ endminute
+ endmonth
+ endseason
+ endsecond
+ endtimezone
+ endyear
+ entryset
+ entrysubtype
+ execute
+ file
+ gender
+ hour
+ ids
+ indextitle
+ indexsorttitle
+ isan
+ ismn
+ iswc
+ keywords
+ label
+ langid
+ langidopts
+ library
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ minute
+ month
+ namea
+ nameb
+ namec
+ nameatype
+ namebtype
+ namectype
+ nameaddon
+ options
+ origday
+ origendday
+ origendhour
+ origendminute
+ origendmonth
+ origendseason
+ origendsecond
+ origendtimezone
+ origendyear
+ orighour
+ origminute
+ origmonth
+ origseason
+ origsecond
+ origtimezone
+ origyear
+ origlocation
+ origpublisher
+ origtitle
+ pagination
+ presort
+ related
+ relatedoptions
+ relatedstring
+ relatedtype
+ season
+ second
+ shortauthor
+ shorteditor
+ shorthand
+ shorthandintro
+ shortjournal
+ shortseries
+ shorttitle
+ sortkey
+ sortname
+ sortshorthand
+ sorttitle
+ sortyear
+ timezone
+ url
+ urlday
+ urlendday
+ urlendhour
+ urlendminute
+ urlendmonth
+ urlendsecond
+ urlendtimezone
+ urlendyear
+ urlhour
+ urlminute
+ urlmonth
+ urlsecond
+ urltimezone
+ urlyear
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ verba
+ verbb
+ verbc
+ xdata
+ xref
+ year
+
+
+ set
+ entryset
+
+
+ article
+ addendum
+ annotator
+ author
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ issn
+ issue
+ issuetitle
+ issuesubtitle
+ issuetitleaddon
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ language
+ note
+ number
+ origlanguage
+ pages
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ version
+ volume
+
+
+ bibnote
+ note
+
+
+ book
+ author
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ maintitle
+ maintitleaddon
+ mainsubtitle
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ mvbook
+ addendum
+ afterword
+ annotator
+ author
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ inbook
+ bookinbook
+ suppbook
+ addendum
+ afterword
+ annotator
+ author
+ booktitle
+ bookauthor
+ booksubtitle
+ booktitleaddon
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ part
+ publisher
+ pages
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ booklet
+ addendum
+ author
+ chapter
+ editor
+ editortype
+ eid
+ howpublished
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+
+
+ collection
+ reference
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ mvcollection
+ mvreference
+ addendum
+ afterword
+ annotator
+ author
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ publisher
+ pubstate
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ incollection
+ suppcollection
+ inreference
+ addendum
+ afterword
+ annotator
+ author
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ dataset
+ addendum
+ author
+ edition
+ editor
+ editortype
+ language
+ location
+ note
+ number
+ organization
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ manual
+ addendum
+ author
+ chapter
+ edition
+ editor
+ editortype
+ eid
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pages
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ misc
+ software
+ addendum
+ author
+ editor
+ editortype
+ howpublished
+ language
+ location
+ note
+ organization
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ online
+ addendum
+ author
+ editor
+ editortype
+ language
+ note
+ organization
+ pubstate
+ subtitle
+ title
+ titleaddon
+ version
+
+
+ patent
+ addendum
+ author
+ holder
+ location
+ note
+ number
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ periodical
+ addendum
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ language
+ note
+ number
+ pubstate
+ season
+ series
+ subtitle
+ title
+ titleaddon
+ volume
+
+
+ mvproceedings
+ addendum
+ editor
+ editortype
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volumes
+
+
+ proceedings
+ addendum
+ chapter
+ editor
+ editortype
+ eid
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volume
+ volumes
+
+
+ inproceedings
+ addendum
+ author
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ editor
+ editortype
+ eid
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volume
+ volumes
+
+
+ report
+ addendum
+ author
+ chapter
+ eid
+ institution
+ isrn
+ language
+ location
+ note
+ number
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ thesis
+ addendum
+ author
+ chapter
+ eid
+ institution
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+
+
+ unpublished
+ addendum
+ author
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ howpublished
+ language
+ location
+ note
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ venue
+
+
+ abstract
+ addendum
+ afterword
+ annotator
+ author
+ bookauthor
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ foreword
+ holder
+ institution
+ introduction
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ nameaddon
+ note
+ organization
+ origlanguage
+ origlocation
+ origpublisher
+ origtitle
+ part
+ publisher
+ relatedstring
+ series
+ shortauthor
+ shorteditor
+ shorthand
+ shortjournal
+ shortseries
+ shorttitle
+ sortname
+ sortshorthand
+ sorttitle
+ subtitle
+ title
+ titleaddon
+ translator
+ venue
+
+
+ article
+ book
+ inbook
+ bookinbook
+ suppbook
+ booklet
+ collection
+ incollection
+ suppcollection
+ manual
+ misc
+ mvbook
+ mvcollection
+ online
+ patent
+ periodical
+ suppperiodical
+ proceedings
+ inproceedings
+ reference
+ inreference
+ report
+ set
+ thesis
+ unpublished
+
+
+ date
+ year
+
+
+
+
+ set
+
+ entryset
+
+
+
+ article
+
+ author
+ journaltitle
+ title
+
+
+
+ book
+ mvbook
+
+ author
+ title
+
+
+
+ inbook
+ bookinbook
+ suppbook
+
+ author
+ title
+ booktitle
+
+
+
+ booklet
+
+
+ author
+ editor
+
+ title
+
+
+
+ collection
+ reference
+ mvcollection
+ mvreference
+
+ editor
+ title
+
+
+
+ incollection
+ suppcollection
+ inreference
+
+ author
+ editor
+ title
+ booktitle
+
+
+
+ dataset
+
+ title
+
+
+
+ manual
+
+ title
+
+
+
+ misc
+ software
+
+ title
+
+
+
+ online
+
+ title
+
+ url
+ doi
+ eprint
+
+
+
+
+ patent
+
+ author
+ title
+ number
+
+
+
+ periodical
+
+ editor
+ title
+
+
+
+ proceedings
+ mvproceedings
+
+ title
+
+
+
+ inproceedings
+
+ author
+ title
+ booktitle
+
+
+
+ report
+
+ author
+ title
+ type
+ institution
+
+
+
+ thesis
+
+ author
+ title
+ type
+ institution
+
+
+
+ unpublished
+
+ author
+ title
+
+
+
+
+ isbn
+
+
+ issn
+
+
+ ismn
+
+
+ gender
+
+
+
+
+
+
+ reference.bib
+
+
+ cn1
+ en2
+ en3
+ *
+
+
+
+
+ citeorder
+
+
+
+
+
+
diff --git a/elegantbook-cn.log b/elegantbook-cn.log
new file mode 100644
index 0000000..fd1c289
--- /dev/null
+++ b/elegantbook-cn.log
@@ -0,0 +1,2224 @@
+This is XeTeX, Version 3.141592653-2.6-0.999993 (TeX Live 2021) (preloaded format=xelatex 2022.3.2) 3 MAR 2022 07:58
+entering extended mode
+ restricted \write18 enabled.
+ file:line:error style messages enabled.
+ %&-line parsing enabled.
+**/Users/chenmengnan/Workspace/book-text-to-speech/elegantbook-cn
+(/Users/chenmengnan/Workspace/book-text-to-speech/elegantbook-cn.tex
+LaTeX2e <2020-10-01> patch level 4
+L3 programming layer <2021-02-18> (./elegantbook.cls
+Document Class: elegantbook 2021/05/02 v4.1 ElegantBook document class
+(/usr/local/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty
+Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
+Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
+Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
+\etb@tempcnta=\count175
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/book.cls
+Document Class: book 2020/04/10 v1.4m Standard LaTeX document class
+(/usr/local/texlive/2021/texmf-dist/tex/latex/base/bk10.clo
+File: bk10.clo 2020/04/10 v1.4m Standard LaTeX file (size option)
+)
+\c@part=\count176
+\c@chapter=\count177
+\c@section=\count178
+\c@subsection=\count179
+\c@subsubsection=\count180
+\c@paragraph=\count181
+\c@subparagraph=\count182
+\c@figure=\count183
+\c@table=\count184
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen138
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/setspace/setspace.sty
+Package: setspace 2011/12/19 v6.7a set line spacing
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.sty
+Package: csquotes 2021-02-22 v5.2l context-sensitive quotations (JAW)
+\csq@reset=\count185
+\csq@gtype=\count186
+\csq@glevel=\count187
+\csq@qlevel=\count188
+\csq@maxlvl=\count189
+\csq@tshold=\count190
+\csq@ltx@everypar=\toks16
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.def
+File: csquotes.def 2021-02-22 v5.2l csquotes generic definitions (JAW)
+)
+Package csquotes Info: Trying to load configuration file 'csquotes.cfg'...
+Package csquotes Info: ... configuration file loaded successfully.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.cfg
+File: csquotes.cfg
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2021-02-27 v7.00k Hypertext links for LaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
+Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty
+Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
+)
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode not found.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
+Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty
+Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty
+Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
+Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty
+Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
+)
+\@linkdim=\dimen139
+\Hy@linkcounter=\count191
+\Hy@pagecounter=\count192
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2021-02-27 v7.00k Hyperref: PDFDocEncoding definition (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
+File: hyperref-langpatches.def 2021-02-27 v7.00k Hyperref: patches for babel languages
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty
+Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty
+Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
+)
+\Hy@SavedSpaceFactor=\count193
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def
+File: puenc.def 2021-02-27 v7.00k Hyperref: PDF Unicode definition (HO)
+)
+Package hyperref Info: Hyper figures OFF on input line 4192.
+Package hyperref Info: Link nesting OFF on input line 4197.
+Package hyperref Info: Hyper index ON on input line 4200.
+Package hyperref Info: Plain pages OFF on input line 4207.
+Package hyperref Info: Backreferencing OFF on input line 4212.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4445.
+\c@Hy@tempcnt=\count194
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip16
+Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 4804.
+\XeTeXLinkMargin=\dimen140
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty
+Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
+Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
+))
+\Fld@menulength=\count195
+\Field@Width=\dimen141
+\Fld@charsize=\dimen142
+Package hyperref Info: Hyper figures OFF on input line 6075.
+Package hyperref Info: Link nesting OFF on input line 6080.
+Package hyperref Info: Hyper index ON on input line 6083.
+Package hyperref Info: backreferencing OFF on input line 6090.
+Package hyperref Info: Link coloring OFF on input line 6095.
+Package hyperref Info: Link coloring with OCG OFF on input line 6100.
+Package hyperref Info: PDF/A mode OFF on input line 6105.
+LaTeX Info: Redefining \ref on input line 6145.
+LaTeX Info: Redefining \pageref on input line 6149.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty
+Package: atbegshi-ltx 2020/08/17 v1.0a Emulation of the original atbegshi package
+with kernel methods
+)
+\Hy@abspage=\count196
+\c@Item=\count197
+\c@Hfootnote=\count198
+)
+Package hyperref Info: Driver (autodetected): hxetex.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hxetex.def
+File: hxetex.def 2021-02-27 v7.00k Hyperref driver for XeTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/stringenc/stringenc.sty
+Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO)
+)
+\pdfm@box=\box47
+\c@Hy@AnnotLevel=\count199
+\HyField@AnnotCount=\count266
+\Fld@listcount=\count267
+\c@bookmark@seq@number=\count268
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
+Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty
+Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atvery package
+with kernel methods
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
+Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 286.
+)
+\Hy@SectionHShift=\skip49
+)
+Package hyperref Info: Option `breaklinks' set `true' on input line 108.
+Package hyperref Info: Option `unicode' set `true' on input line 108.
+Package hyperref Info: Option `bookmarksnumbered' set `true' on input line 108.
+Package hyperref Info: Option `bookmarksopen' set `true' on input line 108.
+Package hyperref Info: Option `colorlinks' set `true' on input line 108.
+Package hyperref Info: Option `plainpages' set `false' on input line 108.
+Package hyperref Info: Option `linktocpage' set `true' on input line 108.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty
+Package: geometry 2020/01/02 v5.9 Page Geometry
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty
+Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
+)
+\Gm@cnth=\count269
+\Gm@cntv=\count270
+\c@Gm@tempcnt=\count271
+\Gm@bindingoffset=\dimen143
+\Gm@wd@mp=\dimen144
+\Gm@odd@mp=\dimen145
+\Gm@even@mp=\dimen146
+\Gm@layoutwidth=\dimen147
+\Gm@layoutheight=\dimen148
+\Gm@layouthoffset=\dimen149
+\Gm@layoutvoffset=\dimen150
+\Gm@dimlist=\toks17
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/indentfirst.sty
+Package: indentfirst 1995/11/23 v1.03 Indent first paragraph (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/comment/comment.sty
+\CommentStream=\write3
+ Excluding comment 'comment') (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctex.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3kernel/expl3.sty
+Package: expl3 2021-02-18 L3 programming layer (loader)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
+File: l3backend-xetex.def 2021-03-18 L3 backend support: XeTeX
+ (|extractbb --version)
+\c__kernel_sys_dvipdfmx_version_int=\count272
+\l__color_backend_stack_int=\count273
+\g__color_backend_stack_int=\count274
+\g__graphics_track_int=\count275
+\l__pdf_internal_box=\box48
+\g__pdf_backend_object_int=\count276
+\g__pdf_backend_annotation_int=\count277
+\g__pdf_backend_link_int=\count278
+))
+Package: ctex 2021/03/14 v2.5.6 Chinese adapter in LaTeX (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex))) (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
+Package: l3keys2e 2021-03-12 LaTeX2e option processing using LaTeX3 keys
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctexhook.sty
+Package: ctexhook 2021/03/14 v2.5.6 Document and package hooks (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctexpatch.sty
+Package: ctexpatch 2021/03/14 v2.5.6 Patching commands (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fix-cm.sty
+Package: fix-cm 2015/01/14 v1.1t fixes to LaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+LaTeX Font Info: Redeclaring font encoding TS1 on input line 47.
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/everysel/everysel.sty
+Package: everysel 2021/01/20 v2.1 EverySelectfont Package (MS)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/everysel/everysel-2011-10-28.sty))
+\l__ctex_tmp_int=\count279
+\l__ctex_tmp_box=\box49
+\l__ctex_tmp_dim=\dimen151
+\g__ctex_section_depth_int=\count280
+\g__ctex_font_size_int=\count281
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/config/ctexopts.cfg
+File: ctexopts.cfg 2021/03/14 v2.5.6 Option configuration file (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def
+File: ctex-engine-xetex.def 2021/03/14 v2.5.6 XeLaTeX adapter (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
+Package: xeCJK 2020/10/19 v3.8.6 Typesetting CJK scripts with XeLaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+Package: xtemplate 2021-03-12 L3 Experimental prototype document functions
+\l__xtemplate_tmp_dim=\dimen152
+\l__xtemplate_tmp_int=\count282
+\l__xtemplate_tmp_muskip=\muskip17
+\l__xtemplate_tmp_skip=\skip50
+)
+\l__xeCJK_tmp_int=\count283
+\l__xeCJK_tmp_box=\box50
+\l__xeCJK_tmp_dim=\dimen153
+\l__xeCJK_tmp_skip=\skip51
+\g__xeCJK_space_factor_int=\count284
+\l__xeCJK_begin_int=\count285
+\l__xeCJK_end_int=\count286
+\c__xeCJK_CJK_class_int=\XeTeXcharclass1
+\c__xeCJK_FullLeft_class_int=\XeTeXcharclass2
+\c__xeCJK_FullRight_class_int=\XeTeXcharclass3
+\c__xeCJK_HalfLeft_class_int=\XeTeXcharclass4
+\c__xeCJK_HalfRight_class_int=\XeTeXcharclass5
+\c__xeCJK_NormalSpace_class_int=\XeTeXcharclass6
+\c__xeCJK_CM_class_int=\XeTeXcharclass7
+\c__xeCJK_HangulJamo_class_int=\XeTeXcharclass8
+\l__xeCJK_last_skip=\skip52
+\g__xeCJK_node_int=\count287
+\c__xeCJK_CJK_node_dim=\dimen154
+\c__xeCJK_CJK-space_node_dim=\dimen155
+\c__xeCJK_default_node_dim=\dimen156
+\c__xeCJK_default-space_node_dim=\dimen157
+\c__xeCJK_CJK-widow_node_dim=\dimen158
+\c__xeCJK_normalspace_node_dim=\dimen159
+\l__xeCJK_ccglue_skip=\skip53
+\l__xeCJK_ecglue_skip=\skip54
+\l__xeCJK_punct_kern_skip=\skip55
+\l__xeCJK_last_penalty_int=\count288
+\l__xeCJK_last_bound_dim=\dimen160
+\l__xeCJK_last_kern_dim=\dimen161
+\l__xeCJK_widow_penalty_int=\count289
+
+Package xtemplate Info: Declaring object type 'xeCJK/punctuation' taking 0
+(xtemplate) argument(s) on line 2341.
+
+\l__xeCJK_fixed_punct_width_dim=\dimen162
+\l__xeCJK_mixed_punct_width_dim=\dimen163
+\l__xeCJK_middle_punct_width_dim=\dimen164
+\l__xeCJK_fixed_margin_width_dim=\dimen165
+\l__xeCJK_mixed_margin_width_dim=\dimen166
+\l__xeCJK_middle_margin_width_dim=\dimen167
+\l__xeCJK_bound_punct_width_dim=\dimen168
+\l__xeCJK_bound_margin_width_dim=\dimen169
+\l__xeCJK_margin_minimum_dim=\dimen170
+\l__xeCJK_kerning_total_width_dim=\dimen171
+\l__xeCJK_same_align_margin_dim=\dimen172
+\l__xeCJK_different_align_margin_dim=\dimen173
+\l__xeCJK_kerning_margin_width_dim=\dimen174
+\l__xeCJK_kerning_margin_minimum_dim=\dimen175
+\l__xeCJK_bound_dim=\dimen176
+\l__xeCJK_reverse_bound_dim=\dimen177
+\l__xeCJK_margin_dim=\dimen178
+\l__xeCJK_minimum_bound_dim=\dimen179
+\l__xeCJK_kerning_margin_dim=\dimen180
+\g__xeCJK_family_int=\count290
+\l__xeCJK_fam_int=\count291
+\g__xeCJK_fam_allocation_int=\count292
+\l__xeCJK_verb_case_int=\count293
+\l__xeCJK_verb_exspace_skip=\skip56
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec.sty
+Package: fontspec 2020/02/21 v2.7i Font selection for XeLaTeX and LuaLaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
+Package: fontspec-xetex 2020/02/21 v2.7i Font selection for XeLaTeX and LuaLaTeX
+\l__fontspec_script_int=\count294
+\l__fontspec_language_int=\count295
+\l__fontspec_strnum_int=\count296
+\l__fontspec_tmp_int=\count297
+\l__fontspec_tmpa_int=\count298
+\l__fontspec_tmpb_int=\count299
+\l__fontspec_tmpc_int=\count300
+\l__fontspec_em_int=\count301
+\l__fontspec_emdef_int=\count302
+\l__fontspec_strong_int=\count303
+\l__fontspec_strongdef_int=\count304
+\l__fontspec_tmpa_dim=\dimen181
+\l__fontspec_tmpb_dim=\dimen182
+\l__fontspec_tmpc_dim=\dimen183
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fontenc.sty
+Package: fontenc 2020/08/10 v2.0s Standard LaTeX package
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec.cfg))) (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg
+File: xeCJK.cfg 2020/10/19 v3.8.6 Configuration file for xeCJK package
+))
+\ccwd=\dimen184
+\l__ctex_ccglue_skip=\skip57
+)
+\l__ctex_ziju_dim=\dimen185
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/zhnumber/zhnumber.sty
+Package: zhnumber 2020/05/01 v2.8 Typesetting numbers with Chinese glyphs
+\l__zhnum_scale_int=\count305
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/zhnumber/zhnumber-utf8.cfg
+File: zhnumber-utf8.cfg 2020/05/01 v2.8 Chinese numerals with UTF8 encoding
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-plain.def
+File: ctex-scheme-plain.def 2021/03/14 v2.5.6 Plain scheme for generic (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-mac.def
+File: ctex-fontset-mac.def 2021/03/14 v2.5.6 macOS fonts definition (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-macnew.def
+File: ctex-fontset-macnew.def 2021/03/14 v2.5.6 macOS fonts definition for El Capitan or later version (CTEX)
+
+
+Package fontspec Warning: Font "Songti SC Light" does not contain requested
+(fontspec) Script "CJK".
+
+
+Package fontspec Info: Font family 'SongtiSCLight(0)' created for font 'Songti
+(fontspec) SC Light' with options
+(fontspec) [Script={CJK},BoldItalicFont={Kaiti SC
+(fontspec) Bold},BoldFont={Songti SC Bold},ItalicFont={Kaiti SC}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Songti SC
+(fontspec) Light/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Songti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+(fontspec) - 'italic' (m/it) with NFSS spec.: <->"Kaiti
+(fontspec) SC/OT:language=dflt;"
+(fontspec) - 'italic small caps' (m/scit) with NFSS spec.:
+(fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Kaiti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.:
+
+))) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/config/ctex.cfg
+File: ctex.cfg 2021/03/14 v2.5.6 Configuration file (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/newtxtext.sty
+Package: newtxtext 2020/09/19 v1.630
+ `newtxtext' v1.630, 2020/09/19 Text macros taking advantage of TeX-Gyre Termes fonts (msharpe) (/usr/local/texlive/2021/texmf-dist/tex/latex/fontaxes/fontaxes.sty
+Package: fontaxes 2020/07/21 v1.0e Font selection axes
+LaTeX Info: Redefining \upshape on input line 29.
+LaTeX Info: Redefining \itshape on input line 31.
+LaTeX Info: Redefining \slshape on input line 33.
+LaTeX Info: Redefining \swshape on input line 35.
+LaTeX Info: Redefining \scshape on input line 37.
+LaTeX Info: Redefining \sscshape on input line 39.
+LaTeX Info: Redefining \ulcshape on input line 41.
+LaTeX Info: Redefining \textsw on input line 47.
+LaTeX Info: Redefining \textssc on input line 48.
+LaTeX Info: Redefining \textulc on input line 49.
+)
+\ntx@fs=\dimen186
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/xkeyval/xkeyval.sty
+Package: xkeyval 2020/11/20 v2.8 package option processing (HA)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/xkeyval/xkeyval.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/xkeyval/xkvutils.tex
+\XKV@toks=\toks18
+\XKV@tempa@toks=\toks19
+)
+\XKV@depth=\count306
+File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/xstring/xstring.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/xstring/xstring.tex
+\integerpart=\count307
+Invalid UTF-8 byte or sequence at line 35 replaced by U+FFFD.
+\decimalpart=\count308
+Invalid UTF-8 byte or sequence at line 79 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 79 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 83 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 86 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 102 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 114 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 120 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 125 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 183 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 184 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 189 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 189 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 190 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 190 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 193 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 221 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 221 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 266 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 284 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 295 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 300 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 300 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 302 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 303 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 333 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 406 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 406 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 409 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 410 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 428 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 434 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 457 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 457 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 464 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 464 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 466 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 466 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 586 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 586 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 588 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 588 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 595 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 597 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 599 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 602 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 605 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 605 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 610 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 615 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 632 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 632 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 633 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 635 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 637 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 647 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 653 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 678 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 700 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 705 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 719 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 732 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 732 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 741 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 741 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 742 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 742 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 762 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 773 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 773 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 797 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 797 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 810 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 824 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 824 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 831 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 838 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 838 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 846 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 846 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 861 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 862 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 864 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 864 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 908 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 909 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 909 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 934 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 934 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 936 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 936 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 940 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 940 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 962 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 962 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 964 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 965 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 1006 replaced by U+FFFD.
+)
+Package: xstring 2019/02/06 v1.83 String manipulations (CT)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty
+Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/carlisle/scalefnt.sty) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fontenc.sty
+Package: fontenc 2020/08/10 v2.0s Standard LaTeX package
+LaTeX Font Info: Trying to load font information for T1+ntxtlf on input line 112.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/t1ntxtlf.fd
+File: t1ntxtlf.fd 2015/01/17 v1.0 font definition file for T1/ntx/tlf
+)
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 10.0pt on input line 112.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/textcomp.sty
+Package: textcomp 2020/02/02 v2.0n Standard LaTeX package
+LaTeX Font Info: Changing ? sub-encoding to TS1/0 on input line 75.
+)
+LaTeX Info: Redefining \textin on input line 103.
+\ntxt@cntz=\count309
+LaTeX Font Info: Redeclaring math symbol \mathsterling on input line 316.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty
+Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.
+Package: anyfontsize 2007/11/22 anyfontsize.sty by pts
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/newtxmath.sty
+Package: newtxmath 2020/12/20 v1.640
+ `newtxmath' v1.640, 2020/12/20 Math macros based originally on txfonts (msharpe) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2020/09/23 v2.17i AMS math features
+\@mathmargin=\skip58
+
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks20
+\ex@=\dimen187
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen188
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count310
+LaTeX Info: Redefining \frac on input line 234.
+\uproot@=\count311
+\leftroot@=\count312
+LaTeX Info: Redefining \overline on input line 399.
+\classnum@=\count313
+\DOTSCASE@=\count314
+LaTeX Info: Redefining \ldots on input line 496.
+LaTeX Info: Redefining \dots on input line 499.
+LaTeX Info: Redefining \cdots on input line 620.
+\Mathstrutbox@=\box51
+\strutbox@=\box52
+\big@size=\dimen189
+LaTeX Font Info: Redeclaring font encoding OML on input line 743.
+LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
+\macc@depth=\count315
+\c@MaxMatrixCols=\count316
+\dotsspace@=\muskip18
+\c@parentequation=\count317
+\dspbrk@lvl=\count318
+\tag@help=\toks21
+\row@=\count319
+\column@=\count320
+\maxfields@=\count321
+\andhelp@=\toks22
+\eqnshift@=\dimen190
+\alignsep@=\dimen191
+\tagshift@=\dimen192
+\tagwidth@=\dimen193
+\totwidth@=\dimen194
+\lineht@=\dimen195
+\@envbody=\toks23
+\multlinegap=\skip59
+\multlinetaggap=\skip60
+\mathdisplay@stack=\toks24
+LaTeX Info: Redefining \[ on input line 2923.
+LaTeX Info: Redefining \] on input line 2924.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifxetex.sty
+Package: ifxetex 2019/10/25 v0.7 ifxetex legacy package. Use iftex instead.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifluatex.sty
+Package: ifluatex 2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/oberdiek/centernot.sty
+Package: centernot 2016/05/16 v1.4 Centers the not symbol horizontally (HO)
+)
+\tx@cntz=\count322
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/kastrup/binhex.tex)
+\tx@Isdigit=\count323
+\tx@IsAlNum=\count324
+\tx@tA=\toks25
+\tx@tB=\toks26
+\tx@su=\read2
+LaTeX Font Info: Redeclaring symbol font `operators' on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `normal'
+(Font) OT1/cmr/m/n --> OT1/ntxtlf/m/n on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/m/n on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
+(Font) OT1/ntxtlf/m/n --> OT1/ntxtlf/b/n on input line 361.
+LaTeX Font Info: Redeclaring math alphabet \mathsf on input line 369.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal'
+(Font) OT1/cmss/m/n --> T1/qhv/m/n on input line 369.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
+(Font) OT1/cmss/bx/n --> T1/qhv/m/n on input line 369.
+LaTeX Font Info: Redeclaring math alphabet \mathit on input line 370.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal'
+(Font) OT1/cmr/m/it --> OT1/ntxtlf/m/it on input line 370.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
+(Font) OT1/cmr/bx/it --> OT1/ntxtlf/m/it on input line 370.
+LaTeX Font Info: Redeclaring math alphabet \mathtt on input line 371.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal'
+(Font) OT1/cmtt/m/n --> T1/ntxtt/m/n on input line 371.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
+(Font) OT1/cmtt/m/n --> T1/ntxtt/m/n on input line 371.
+LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/b/n on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/b/n on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
+(Font) OT1/ntxtlf/m/it --> OT1/ntxtlf/b/it on input line 374.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
+(Font) T1/qhv/m/n --> T1/qhv/b/n on input line 375.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
+(Font) T1/ntxtt/m/n --> T1/ntxtt/b/n on input line 376.
+LaTeX Font Info: Redeclaring symbol font `letters' on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `normal'
+(Font) OML/cmm/m/it --> OML/ntxmi/m/it on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `bold'
+(Font) OML/cmm/b/it --> OML/ntxmi/m/it on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `bold'
+(Font) OML/ntxmi/m/it --> OML/ntxmi/b/it on input line 478.
+\symlettersA=\mathgroup4
+LaTeX Font Info: Overwriting symbol font `lettersA' in version `bold'
+(Font) U/ntxmia/m/it --> U/ntxmia/b/it on input line 542.
+LaTeX Font Info: Redeclaring symbol font `symbols' on input line 563.
+LaTeX Font Info: Encoding `OMS' has changed to `LMS' for symbol font
+(Font) `symbols' in the math version `normal' on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `normal'
+(Font) OMS/cmsy/m/n --> LMS/ntxsy/m/n on input line 563.
+LaTeX Font Info: Encoding `OMS' has changed to `LMS' for symbol font
+(Font) `symbols' in the math version `bold' on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `bold'
+(Font) OMS/cmsy/b/n --> LMS/ntxsy/m/n on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `bold'
+(Font) LMS/ntxsy/m/n --> LMS/ntxsy/b/n on input line 564.
+\symAMSm=\mathgroup5
+LaTeX Font Info: Overwriting symbol font `AMSm' in version `bold'
+(Font) U/ntxsym/m/n --> U/ntxsym/b/n on input line 587.
+\symsymbolsC=\mathgroup6
+LaTeX Font Info: Overwriting symbol font `symbolsC' in version `bold'
+(Font) U/ntxsyc/m/n --> U/ntxsyc/b/n on input line 608.
+LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 621.
+LaTeX Font Info: Encoding `OMX' has changed to `LMX' for symbol font
+(Font) `largesymbols' in the math version `normal' on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal'
+(Font) OMX/cmex/m/n --> LMX/ntxexx/m/n on input line 621.
+LaTeX Font Info: Encoding `OMX' has changed to `LMX' for symbol font
+(Font) `largesymbols' in the math version `bold' on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold'
+(Font) OMX/cmex/m/n --> LMX/ntxexx/m/n on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold'
+(Font) LMX/ntxexx/m/n --> LMX/ntxexx/b/n on input line 622.
+\symlargesymbolsTXA=\mathgroup7
+LaTeX Font Info: Overwriting symbol font `largesymbolsTXA' in version `bold'
+(Font) U/ntxexa/m/n --> U/ntxexa/b/n on input line 636.
+\tx@sbptoks=\toks27
+LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 858.
+LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 859.
+LaTeX Font Info: Redeclaring math delimiter \lceil on input line 860.
+LaTeX Font Info: Redeclaring math delimiter \rceil on input line 861.
+LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 862.
+LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 863.
+LaTeX Font Info: Redeclaring math delimiter \langle on input line 864.
+LaTeX Font Info: Redeclaring math delimiter \rangle on input line 866.
+LaTeX Font Info: Redeclaring math delimiter \arrowvert on input line 870.
+LaTeX Font Info: Redeclaring math delimiter \vert on input line 871.
+LaTeX Font Info: Redeclaring math symbol \hbar on input line 917.
+LaTeX Font Info: Redeclaring math accent \dot on input line 942.
+LaTeX Font Info: Redeclaring math accent \ddot on input line 943.
+LaTeX Font Info: Redeclaring math accent \vec on input line 2006.
+LaTeX Font Info: Redeclaring math symbol \imathscr on input line 2646.
+LaTeX Font Info: Redeclaring math symbol \jmathscr on input line 2647.
+LaTeX Info: Redefining \Bbbk on input line 2780.
+LaTeX Info: Redefining \not on input line 2929.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/esint/esint.sty
+Package: esint
+\symlargesymbolsA=\mathgroup8
+)
+\symCMlargesymbols=\mathgroup9
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty
+Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package xcolor Info: Driver file: xetex.def on input line 225.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-def/xetex.def
+File: xetex.def 2021/03/18 v5.0k Graphics/color driver for xetex
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/colortbl/colortbl.sty
+Package: colortbl 2020/01/04 v1.0e Color table columns (DPC)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/array.sty
+Package: array 2020/10/01 v2.5c Tabular extension package (FMi)
+\col@sep=\dimen196
+\ar@mcellbox=\box53
+\extrarowheight=\dimen197
+\NC@list=\toks28
+\extratabsurround=\skip61
+\backup@length=\skip62
+\ar@cellbox=\box54
+)
+\everycr=\toks29
+\minrowclearance=\skip63
+)
+\rownum=\count325
+Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
+Package xcolor Info: Model `RGB' extended on input line 1364.
+Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
+Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
+Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
+Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
+Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
+Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/mwe/mwe.sty
+Package: mwe 2018/03/30 v0.5 Package to support minimal working examples (MWE)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2020/09/09 v1.2b Enhanced LaTeX Graphics (DPC,SPQR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2020/08/30 v1.4c Standard LaTeX Graphics (DPC,SPQR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: xetex.def on input line 105.
+)
+\Gin@req@height=\dimen198
+\Gin@req@width=\dimen199
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/lipsum/lipsum.sty
+Package: lipsum 2021-03-03 v2.3 150 paragraphs of Lorem Ipsum dummy text
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex
+File: lipsum.ltd.tex 2021-03-03 v2.3 The Lorem ipsum dummy text
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/blindtext/blindtext.sty
+Package: blindtext 2012/01/06 V2.0 blindtext-Package
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty
+Package: xspace 2014/10/28 v1.13 Space after command names (DPC,MH)
+)
+\c@blindtext=\count326
+\c@Blindtext=\count327
+\c@blind@countparstart=\count328
+\blind@countxx=\count329
+\blindtext@numBlindtext=\count330
+\blind@countyy=\count331
+\c@blindlist=\count332
+\c@blindlistlevel=\count333
+\c@blindlist@level=\count334
+\blind@listitem=\count335
+\c@blind@listcount=\count336
+\c@blind@levelcount=\count337
+\blind@mathformula=\count338
+\blind@Mathformula=\count339
+\c@blind@randomcount=\count340
+\c@blind@randommax=\count341
+\c@blind@pangramcount=\count342
+\c@blind@pangrammax=\count343
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty
+Package: enumerate 2015/07/23 v3.00 enumerate extensions (DPC)
+\@enLab=\toks30
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/enumitem/enumitem.sty
+Package: enumitem 2019/06/20 v3.9 Customized lists
+\labelindent=\skip64
+\enit@outerparindent=\dimen256
+\enit@toks=\toks31
+\enit@inbox=\box55
+\enit@count@id=\count344
+\enitdp@description=\count345
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2020/10/26 v3.5g Customizing captions (AR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2020/10/21 v2.2e caption3 kernel (AR)
+\captionmargin=\dimen257
+\captionmargin@=\dimen258
+\captionwidth=\dimen259
+\caption@tempdima=\dimen260
+\caption@indent=\dimen261
+\caption@parindent=\dimen262
+\caption@hangindent=\dimen263
+Package caption Info: Standard document class detected.
+)
+\c@caption@flags=\count346
+\c@continuedfloat=\count347
+Package caption Info: hyperref package is loaded.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/jknapltx/mathrsfs.sty
+Package: mathrsfs 1996/01/01 Math RSFS package v1.0 (jk)
+\symrsfs=\mathgroup10
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty
+Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
+\symAMSa=\mathgroup11
+\symAMSb=\mathgroup12
+LaTeX Font Info: Redeclaring math delimiter \ulcorner on input line 74.
+LaTeX Font Info: Redeclaring math delimiter \urcorner on input line 75.
+LaTeX Font Info: Redeclaring math delimiter \llcorner on input line 76.
+LaTeX Font Info: Redeclaring math delimiter \lrcorner on input line 77.
+LaTeX Font Info: Redeclaring math symbol \square on input line 141.
+LaTeX Font Info: Redeclaring math symbol \lozenge on input line 142.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty
+Package: amssymb 2013/01/14 v3.01 AMS font symbols
+LaTeX Font Info: Redeclaring math symbol \boxdot on input line 44.
+LaTeX Font Info: Redeclaring math symbol \boxplus on input line 45.
+LaTeX Font Info: Redeclaring math symbol \boxtimes on input line 46.
+LaTeX Font Info: Redeclaring math symbol \blacksquare on input line 48.
+LaTeX Font Info: Redeclaring math symbol \centerdot on input line 49.
+LaTeX Font Info: Redeclaring math symbol \blacklozenge on input line 51.
+LaTeX Font Info: Redeclaring math symbol \circlearrowright on input line 52.
+LaTeX Font Info: Redeclaring math symbol \circlearrowleft on input line 53.
+LaTeX Font Info: Redeclaring math symbol \leftrightharpoons on input line 56.
+LaTeX Font Info: Redeclaring math symbol \boxminus on input line 57.
+LaTeX Font Info: Redeclaring math symbol \Vdash on input line 58.
+LaTeX Font Info: Redeclaring math symbol \Vvdash on input line 59.
+LaTeX Font Info: Redeclaring math symbol \vDash on input line 60.
+LaTeX Font Info: Redeclaring math symbol \twoheadrightarrow on input line 61.
+LaTeX Font Info: Redeclaring math symbol \twoheadleftarrow on input line 62.
+LaTeX Font Info: Redeclaring math symbol \leftleftarrows on input line 63.
+LaTeX Font Info: Redeclaring math symbol \rightrightarrows on input line 64.
+LaTeX Font Info: Redeclaring math symbol \upuparrows on input line 65.
+LaTeX Font Info: Redeclaring math symbol \downdownarrows on input line 66.
+LaTeX Font Info: Redeclaring math symbol \upharpoonright on input line 67.
+LaTeX Font Info: Redeclaring math symbol \downharpoonright on input line 69.
+LaTeX Font Info: Redeclaring math symbol \upharpoonleft on input line 70.
+LaTeX Font Info: Redeclaring math symbol \downharpoonleft on input line 71.
+LaTeX Font Info: Redeclaring math symbol \rightarrowtail on input line 72.
+LaTeX Font Info: Redeclaring math symbol \leftarrowtail on input line 73.
+LaTeX Font Info: Redeclaring math symbol \leftrightarrows on input line 74.
+LaTeX Font Info: Redeclaring math symbol \rightleftarrows on input line 75.
+LaTeX Font Info: Redeclaring math symbol \Lsh on input line 76.
+LaTeX Font Info: Redeclaring math symbol \Rsh on input line 77.
+LaTeX Font Info: Redeclaring math symbol \leftrightsquigarrow on input line 79.
+LaTeX Font Info: Redeclaring math symbol \looparrowleft on input line 80.
+LaTeX Font Info: Redeclaring math symbol \looparrowright on input line 81.
+LaTeX Font Info: Redeclaring math symbol \circeq on input line 82.
+LaTeX Font Info: Redeclaring math symbol \succsim on input line 83.
+LaTeX Font Info: Redeclaring math symbol \gtrsim on input line 84.
+LaTeX Font Info: Redeclaring math symbol \gtrapprox on input line 85.
+LaTeX Font Info: Redeclaring math symbol \multimap on input line 86.
+LaTeX Font Info: Redeclaring math symbol \therefore on input line 87.
+LaTeX Font Info: Redeclaring math symbol \because on input line 88.
+LaTeX Font Info: Redeclaring math symbol \doteqdot on input line 89.
+LaTeX Font Info: Redeclaring math symbol \triangleq on input line 91.
+LaTeX Font Info: Redeclaring math symbol \precsim on input line 92.
+LaTeX Font Info: Redeclaring math symbol \lesssim on input line 93.
+LaTeX Font Info: Redeclaring math symbol \lessapprox on input line 94.
+LaTeX Font Info: Redeclaring math symbol \eqslantless on input line 95.
+LaTeX Font Info: Redeclaring math symbol \eqslantgtr on input line 96.
+LaTeX Font Info: Redeclaring math symbol \curlyeqprec on input line 97.
+LaTeX Font Info: Redeclaring math symbol \curlyeqsucc on input line 98.
+LaTeX Font Info: Redeclaring math symbol \preccurlyeq on input line 99.
+LaTeX Font Info: Redeclaring math symbol \leqq on input line 100.
+LaTeX Font Info: Redeclaring math symbol \leqslant on input line 101.
+LaTeX Font Info: Redeclaring math symbol \lessgtr on input line 102.
+LaTeX Font Info: Redeclaring math symbol \backprime on input line 103.
+LaTeX Font Info: Redeclaring math symbol \risingdotseq on input line 104.
+LaTeX Font Info: Redeclaring math symbol \fallingdotseq on input line 105.
+LaTeX Font Info: Redeclaring math symbol \succcurlyeq on input line 106.
+LaTeX Font Info: Redeclaring math symbol \geqq on input line 107.
+LaTeX Font Info: Redeclaring math symbol \geqslant on input line 108.
+LaTeX Font Info: Redeclaring math symbol \gtrless on input line 109.
+LaTeX Font Info: Redeclaring math symbol \bigstar on input line 117.
+LaTeX Font Info: Redeclaring math symbol \between on input line 118.
+LaTeX Font Info: Redeclaring math symbol \blacktriangledown on input line 119.
+LaTeX Font Info: Redeclaring math symbol \blacktriangleright on input line 120.
+LaTeX Font Info: Redeclaring math symbol \blacktriangleleft on input line 121.
+LaTeX Font Info: Redeclaring math symbol \vartriangle on input line 122.
+LaTeX Font Info: Redeclaring math symbol \blacktriangle on input line 123.
+LaTeX Font Info: Redeclaring math symbol \triangledown on input line 124.
+LaTeX Font Info: Redeclaring math symbol \eqcirc on input line 125.
+LaTeX Font Info: Redeclaring math symbol \lesseqgtr on input line 126.
+LaTeX Font Info: Redeclaring math symbol \gtreqless on input line 127.
+LaTeX Font Info: Redeclaring math symbol \lesseqqgtr on input line 128.
+LaTeX Font Info: Redeclaring math symbol \gtreqqless on input line 129.
+LaTeX Font Info: Redeclaring math symbol \Rrightarrow on input line 130.
+LaTeX Font Info: Redeclaring math symbol \Lleftarrow on input line 131.
+LaTeX Font Info: Redeclaring math symbol \veebar on input line 132.
+LaTeX Font Info: Redeclaring math symbol \barwedge on input line 133.
+LaTeX Font Info: Redeclaring math symbol \doublebarwedge on input line 134.
+LaTeX Font Info: Redeclaring math symbol \measuredangle on input line 137.
+LaTeX Font Info: Redeclaring math symbol \sphericalangle on input line 138.
+LaTeX Font Info: Redeclaring math symbol \varpropto on input line 139.
+LaTeX Font Info: Redeclaring math symbol \smallsmile on input line 140.
+LaTeX Font Info: Redeclaring math symbol \smallfrown on input line 141.
+LaTeX Font Info: Redeclaring math symbol \Subset on input line 142.
+LaTeX Font Info: Redeclaring math symbol \Supset on input line 143.
+LaTeX Font Info: Redeclaring math symbol \Cup on input line 144.
+LaTeX Font Info: Redeclaring math symbol \Cap on input line 146.
+LaTeX Font Info: Redeclaring math symbol \curlywedge on input line 148.
+LaTeX Font Info: Redeclaring math symbol \curlyvee on input line 149.
+LaTeX Font Info: Redeclaring math symbol \leftthreetimes on input line 150.
+LaTeX Font Info: Redeclaring math symbol \rightthreetimes on input line 151.
+LaTeX Font Info: Redeclaring math symbol \subseteqq on input line 152.
+LaTeX Font Info: Redeclaring math symbol \supseteqq on input line 153.
+LaTeX Font Info: Redeclaring math symbol \bumpeq on input line 154.
+LaTeX Font Info: Redeclaring math symbol \Bumpeq on input line 155.
+LaTeX Font Info: Redeclaring math symbol \lll on input line 156.
+LaTeX Font Info: Redeclaring math symbol \ggg on input line 158.
+LaTeX Font Info: Redeclaring math symbol \circledS on input line 160.
+LaTeX Font Info: Redeclaring math symbol \pitchfork on input line 161.
+LaTeX Font Info: Redeclaring math symbol \dotplus on input line 162.
+LaTeX Font Info: Redeclaring math symbol \backsim on input line 163.
+LaTeX Font Info: Redeclaring math symbol \backsimeq on input line 164.
+LaTeX Font Info: Redeclaring math symbol \complement on input line 165.
+LaTeX Font Info: Redeclaring math symbol \intercal on input line 166.
+LaTeX Font Info: Redeclaring math symbol \circledcirc on input line 167.
+LaTeX Font Info: Redeclaring math symbol \circledast on input line 168.
+LaTeX Font Info: Redeclaring math symbol \circleddash on input line 169.
+LaTeX Font Info: Redeclaring math symbol \lvertneqq on input line 171.
+LaTeX Font Info: Redeclaring math symbol \gvertneqq on input line 172.
+LaTeX Font Info: Redeclaring math symbol \nleq on input line 173.
+LaTeX Font Info: Redeclaring math symbol \ngeq on input line 174.
+LaTeX Font Info: Redeclaring math symbol \nless on input line 175.
+LaTeX Font Info: Redeclaring math symbol \ngtr on input line 176.
+LaTeX Font Info: Redeclaring math symbol \nprec on input line 177.
+LaTeX Font Info: Redeclaring math symbol \nsucc on input line 178.
+LaTeX Font Info: Redeclaring math symbol \lneqq on input line 179.
+LaTeX Font Info: Redeclaring math symbol \gneqq on input line 180.
+LaTeX Font Info: Redeclaring math symbol \nleqslant on input line 181.
+LaTeX Font Info: Redeclaring math symbol \ngeqslant on input line 182.
+LaTeX Font Info: Redeclaring math symbol \lneq on input line 183.
+LaTeX Font Info: Redeclaring math symbol \gneq on input line 184.
+LaTeX Font Info: Redeclaring math symbol \npreceq on input line 185.
+LaTeX Font Info: Redeclaring math symbol \nsucceq on input line 186.
+LaTeX Font Info: Redeclaring math symbol \precnsim on input line 187.
+LaTeX Font Info: Redeclaring math symbol \succnsim on input line 188.
+LaTeX Font Info: Redeclaring math symbol \lnsim on input line 189.
+LaTeX Font Info: Redeclaring math symbol \gnsim on input line 190.
+LaTeX Font Info: Redeclaring math symbol \nleqq on input line 191.
+LaTeX Font Info: Redeclaring math symbol \ngeqq on input line 192.
+LaTeX Font Info: Redeclaring math symbol \precneqq on input line 193.
+LaTeX Font Info: Redeclaring math symbol \succneqq on input line 194.
+LaTeX Font Info: Redeclaring math symbol \precnapprox on input line 195.
+LaTeX Font Info: Redeclaring math symbol \succnapprox on input line 196.
+LaTeX Font Info: Redeclaring math symbol \lnapprox on input line 197.
+LaTeX Font Info: Redeclaring math symbol \gnapprox on input line 198.
+LaTeX Font Info: Redeclaring math symbol \nsim on input line 199.
+LaTeX Font Info: Redeclaring math symbol \ncong on input line 200.
+LaTeX Font Info: Redeclaring math symbol \diagup on input line 201.
+LaTeX Font Info: Redeclaring math symbol \diagdown on input line 202.
+LaTeX Font Info: Redeclaring math symbol \varsubsetneq on input line 203.
+LaTeX Font Info: Redeclaring math symbol \varsupsetneq on input line 204.
+LaTeX Font Info: Redeclaring math symbol \nsubseteqq on input line 205.
+LaTeX Font Info: Redeclaring math symbol \nsupseteqq on input line 206.
+LaTeX Font Info: Redeclaring math symbol \subsetneqq on input line 207.
+LaTeX Font Info: Redeclaring math symbol \supsetneqq on input line 208.
+LaTeX Font Info: Redeclaring math symbol \varsubsetneqq on input line 209.
+LaTeX Font Info: Redeclaring math symbol \varsupsetneqq on input line 210.
+LaTeX Font Info: Redeclaring math symbol \subsetneq on input line 211.
+LaTeX Font Info: Redeclaring math symbol \supsetneq on input line 212.
+LaTeX Font Info: Redeclaring math symbol \nsubseteq on input line 213.
+LaTeX Font Info: Redeclaring math symbol \nsupseteq on input line 214.
+LaTeX Font Info: Redeclaring math symbol \nparallel on input line 215.
+LaTeX Font Info: Redeclaring math symbol \nmid on input line 216.
+LaTeX Font Info: Redeclaring math symbol \nshortmid on input line 217.
+LaTeX Font Info: Redeclaring math symbol \nshortparallel on input line 218.
+LaTeX Font Info: Redeclaring math symbol \nvdash on input line 219.
+LaTeX Font Info: Redeclaring math symbol \nVdash on input line 220.
+LaTeX Font Info: Redeclaring math symbol \nvDash on input line 221.
+LaTeX Font Info: Redeclaring math symbol \nVDash on input line 222.
+LaTeX Font Info: Redeclaring math symbol \ntrianglerighteq on input line 223.
+LaTeX Font Info: Redeclaring math symbol \ntrianglelefteq on input line 224.
+LaTeX Font Info: Redeclaring math symbol \ntriangleleft on input line 225.
+LaTeX Font Info: Redeclaring math symbol \ntriangleright on input line 226.
+LaTeX Font Info: Redeclaring math symbol \nleftarrow on input line 227.
+LaTeX Font Info: Redeclaring math symbol \nrightarrow on input line 228.
+LaTeX Font Info: Redeclaring math symbol \nLeftarrow on input line 229.
+LaTeX Font Info: Redeclaring math symbol \nRightarrow on input line 230.
+LaTeX Font Info: Redeclaring math symbol \nLeftrightarrow on input line 231.
+LaTeX Font Info: Redeclaring math symbol \nleftrightarrow on input line 232.
+LaTeX Font Info: Redeclaring math symbol \divideontimes on input line 233.
+LaTeX Font Info: Redeclaring math symbol \varnothing on input line 234.
+LaTeX Font Info: Redeclaring math symbol \nexists on input line 235.
+LaTeX Font Info: Redeclaring math symbol \Finv on input line 236.
+LaTeX Font Info: Redeclaring math symbol \Game on input line 237.
+LaTeX Font Info: Redeclaring math symbol \eth on input line 240.
+LaTeX Font Info: Redeclaring math symbol \eqsim on input line 241.
+LaTeX Font Info: Redeclaring math symbol \beth on input line 242.
+LaTeX Font Info: Redeclaring math symbol \gimel on input line 243.
+LaTeX Font Info: Redeclaring math symbol \daleth on input line 244.
+LaTeX Font Info: Redeclaring math symbol \lessdot on input line 245.
+LaTeX Font Info: Redeclaring math symbol \gtrdot on input line 246.
+LaTeX Font Info: Redeclaring math symbol \ltimes on input line 247.
+LaTeX Font Info: Redeclaring math symbol \rtimes on input line 248.
+LaTeX Font Info: Redeclaring math symbol \shortmid on input line 249.
+LaTeX Font Info: Redeclaring math symbol \shortparallel on input line 250.
+LaTeX Font Info: Redeclaring math symbol \smallsetminus on input line 251.
+LaTeX Font Info: Redeclaring math symbol \thicksim on input line 252.
+LaTeX Font Info: Redeclaring math symbol \thickapprox on input line 253.
+LaTeX Font Info: Redeclaring math symbol \approxeq on input line 254.
+LaTeX Font Info: Redeclaring math symbol \succapprox on input line 255.
+LaTeX Font Info: Redeclaring math symbol \precapprox on input line 256.
+LaTeX Font Info: Redeclaring math symbol \curvearrowleft on input line 257.
+LaTeX Font Info: Redeclaring math symbol \curvearrowright on input line 258.
+LaTeX Font Info: Redeclaring math symbol \digamma on input line 259.
+LaTeX Font Info: Redeclaring math symbol \varkappa on input line 260.
+LaTeX Font Info: Redeclaring math symbol \hslash on input line 262.
+LaTeX Font Info: Redeclaring math symbol \backepsilon on input line 265.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/booktabs/booktabs.sty
+Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
+\heavyrulewidth=\dimen264
+\lightrulewidth=\dimen265
+\cmidrulewidth=\dimen266
+\belowrulesep=\dimen267
+\belowbottomsep=\dimen268
+\aboverulesep=\dimen269
+\abovetopsep=\dimen270
+\cmidrulesep=\dimen271
+\cmidrulekern=\dimen272
+\defaultaddspace=\dimen273
+\@cmidla=\count348
+\@cmidlb=\count349
+\@aboverulesep=\dimen274
+\@belowrulesep=\dimen275
+\@thisruleclass=\count350
+\@lastruleclass=\count351
+\@thisrulewidth=\dimen276
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/multicol.sty
+Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi)
+\c@tracingmulticols=\count352
+\mult@box=\box56
+\multicol@leftmargin=\dimen277
+\c@unbalance=\count353
+\c@collectmore=\count354
+\doublecol@number=\count355
+\multicoltolerance=\count356
+\multicolpretolerance=\count357
+\full@width=\dimen278
+\page@free=\dimen279
+\premulticols=\dimen280
+\postmulticols=\dimen281
+\multicolsep=\skip65
+\multicolbaselineskip=\skip66
+\partial@page=\box57
+\last@line=\box58
+\maxbalancingoverflow=\dimen282
+\mult@rightbox=\box59
+\mult@grightbox=\box60
+\mult@gfirstbox=\box61
+\mult@firstbox=\box62
+\@tempa=\box63
+\@tempa=\box64
+\@tempa=\box65
+\@tempa=\box66
+\@tempa=\box67
+\@tempa=\box68
+\@tempa=\box69
+\@tempa=\box70
+\@tempa=\box71
+\@tempa=\box72
+\@tempa=\box73
+\@tempa=\box74
+\@tempa=\box75
+\@tempa=\box76
+\@tempa=\box77
+\@tempa=\box78
+\@tempa=\box79
+\@tempa=\box80
+\@tempa=\box81
+\@tempa=\box82
+\@tempa=\box83
+\@tempa=\box84
+\@tempa=\box85
+\@tempa=\box86
+\@tempa=\box87
+\@tempa=\box88
+\@tempa=\box89
+\@tempa=\box90
+\@tempa=\box91
+\@tempa=\box92
+\@tempa=\box93
+\@tempa=\box94
+\@tempa=\box95
+\@tempa=\box96
+\@tempa=\box97
+\@tempa=\box98
+\@tempa=\box99
+\c@minrows=\count358
+\c@columnbadness=\count359
+\c@finalcolumnbadness=\count360
+\last@try=\dimen283
+\multicolovershoot=\dimen284
+\multicolundershoot=\dimen285
+\mult@nat@firstbox=\box100
+\colbreak@box=\box101
+\mc@col@check@num=\count361
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/multirow/multirow.sty
+Package: multirow 2021/03/15 v2.8 Span multiple rows of a table
+\multirow@colwidth=\skip67
+\multirow@cntb=\count362
+\multirow@dima=\skip68
+\bigstrutjot=\dimen286
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
+Package: fancyvrb 2021/01/20 v3.7 verbatim text (tvz,hv)
+\FV@CodeLineNo=\count363
+\FV@InFile=\read3
+\FV@TabBox=\box102
+\c@FancyVerbLine=\count364
+\FV@StepNumber=\count365
+\FV@OutFile=\write4
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/makecell/makecell.sty
+Package: makecell 2009/08/03 V0.1e Managing of Tab Column Heads and Cells
+\rotheadsize=\dimen287
+\c@nlinenum=\count366
+\TeXr@lab=\toks32
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/hologo/hologo.sty
+Package: hologo 2019/12/05 v1.14 A logo collection with bookmark support (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.sty
+Package: biblatex 2020/12/31 v3.16 programmable bibliographies (PK/MW)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/logreq/logreq.sty
+Package: logreq 2010/08/04 v1.0 xml request logger
+\lrq@indent=\count367
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/logreq/logreq.def
+File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+))
+\c@tabx@nest=\count368
+\c@listtotal=\count369
+\c@listcount=\count370
+\c@liststart=\count371
+\c@liststop=\count372
+\c@citecount=\count373
+\c@citetotal=\count374
+\c@multicitecount=\count375
+\c@multicitetotal=\count376
+\c@instcount=\count377
+\c@maxnames=\count378
+\c@minnames=\count379
+\c@maxitems=\count380
+\c@minitems=\count381
+\c@citecounter=\count382
+\c@maxcitecounter=\count383
+\c@savedcitecounter=\count384
+\c@uniquelist=\count385
+\c@uniquename=\count386
+\c@refsection=\count387
+\c@refsegment=\count388
+\c@maxextratitle=\count389
+\c@maxextratitleyear=\count390
+\c@maxextraname=\count391
+\c@maxextradate=\count392
+\c@maxextraalpha=\count393
+\c@abbrvpenalty=\count394
+\c@highnamepenalty=\count395
+\c@lownamepenalty=\count396
+\c@maxparens=\count397
+\c@parenlevel=\count398
+\blx@tempcnta=\count399
+\blx@tempcntb=\count400
+\blx@tempcntc=\count401
+\blx@maxsection=\count402
+\blx@maxsegment@0=\count403
+\blx@notetype=\count404
+\blx@parenlevel@text=\count405
+\blx@parenlevel@foot=\count406
+\blx@sectionciteorder@0=\count407
+\blx@entrysetcounter=\count408
+\blx@biblioinstance=\count409
+\labelnumberwidth=\skip69
+\labelalphawidth=\skip70
+\biblabelsep=\skip71
+\bibitemsep=\skip72
+\bibnamesep=\skip73
+\bibinitsep=\skip74
+\bibparsep=\skip75
+\bibhang=\skip76
+\blx@bcfin=\read4
+\blx@bcfout=\write5
+\blx@langwohyphens=\language87
+\c@mincomprange=\count410
+\c@maxcomprange=\count411
+\c@mincompwidth=\count412
+Package biblatex Info: Trying to load biblatex default data model...
+Package biblatex Info: ... file 'blx-dm.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-dm.def
+File: blx-dm.def 2020/12/31 v3.16 biblatex localization (PK/MW)
+)
+Package biblatex Info: Trying to load biblatex citestyle data model...
+Package biblatex Info: ... file 'gb7714-2015.dbx' not found.
+Package biblatex Info: Trying to load biblatex custom data model...
+Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+\c@afterword=\count413
+\c@savedafterword=\count414
+\c@annotator=\count415
+\c@savedannotator=\count416
+\c@author=\count417
+\c@savedauthor=\count418
+\c@bookauthor=\count419
+\c@savedbookauthor=\count420
+\c@commentator=\count421
+\c@savedcommentator=\count422
+\c@editor=\count423
+\c@savededitor=\count424
+\c@editora=\count425
+\c@savededitora=\count426
+\c@editorb=\count427
+\c@savededitorb=\count428
+\c@editorc=\count429
+\c@savededitorc=\count430
+\c@foreword=\count431
+\c@savedforeword=\count432
+\c@holder=\count433
+\c@savedholder=\count434
+\c@introduction=\count435
+\c@savedintroduction=\count436
+\c@namea=\count437
+\c@savednamea=\count438
+\c@nameb=\count439
+\c@savednameb=\count440
+\c@namec=\count441
+\c@savednamec=\count442
+\c@translator=\count443
+\c@savedtranslator=\count444
+\c@shortauthor=\count445
+\c@savedshortauthor=\count446
+\c@shorteditor=\count447
+\c@savedshorteditor=\count448
+\c@labelname=\count449
+\c@savedlabelname=\count450
+\c@institution=\count451
+\c@savedinstitution=\count452
+\c@lista=\count453
+\c@savedlista=\count454
+\c@listb=\count455
+\c@savedlistb=\count456
+\c@listc=\count457
+\c@savedlistc=\count458
+\c@listd=\count459
+\c@savedlistd=\count460
+\c@liste=\count461
+\c@savedliste=\count462
+\c@listf=\count463
+\c@savedlistf=\count464
+\c@location=\count465
+\c@savedlocation=\count466
+\c@organization=\count467
+\c@savedorganization=\count468
+\c@origlocation=\count469
+\c@savedoriglocation=\count470
+\c@origpublisher=\count471
+\c@savedorigpublisher=\count472
+\c@publisher=\count473
+\c@savedpublisher=\count474
+\c@language=\count475
+\c@savedlanguage=\count476
+\c@origlanguage=\count477
+\c@savedoriglanguage=\count478
+\c@pageref=\count479
+\c@savedpageref=\count480
+\shorthandwidth=\skip77
+\shortjournalwidth=\skip78
+\shortserieswidth=\skip79
+\shorttitlewidth=\skip80
+\shortauthorwidth=\skip81
+\shorteditorwidth=\skip82
+\locallabelnumberwidth=\skip83
+\locallabelalphawidth=\skip84
+\localshorthandwidth=\skip85
+\localshortjournalwidth=\skip86
+\localshortserieswidth=\skip87
+\localshorttitlewidth=\skip88
+\localshortauthorwidth=\skip89
+\localshorteditorwidth=\skip90
+Package biblatex Info: Trying to load enhanced support for Unicode engines...
+Package biblatex Info: ... file 'blx-unicode.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-unicode.def)
+Package biblatex Info: Trying to load compatibility code...
+Package biblatex Info: ... file 'blx-compat.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-compat.def
+File: blx-compat.def 2020/12/31 v3.16 biblatex compatibility (PK/MW)
+)
+Package biblatex Info: Trying to load generic definitions...
+Package biblatex Info: ... file 'biblatex.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.def
+File: biblatex.def 2020/12/31 v3.16 biblatex compatibility (PK/MW)
+\c@textcitecount=\count481
+\c@textcitetotal=\count482
+\c@textcitemaxnames=\count483
+\c@biburlbigbreakpenalty=\count484
+\c@biburlbreakpenalty=\count485
+\c@biburlnumpenalty=\count486
+\c@biburlucpenalty=\count487
+\c@biburllcpenalty=\count488
+\biburlbigskip=\muskip19
+\biburlnumskip=\muskip20
+\biburlucskip=\muskip21
+\biburllcskip=\muskip22
+\c@smartand=\count489
+)
+Package biblatex Info: Trying to load bibliography style 'gb7714-2015'...
+Package biblatex Info: ... file 'gb7714-2015.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
+File: gb7714-2015.bbx 2021/01/19 v1.0wbiblatex bibliography style
+Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
+File: numeric-comp.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+Package biblatex Info: Trying to load bibliography style 'numeric'...
+Package biblatex Info: ... file 'numeric.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
+File: numeric.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+Package biblatex Info: Trying to load bibliography style 'standard'...
+Package biblatex Info: ... file 'standard.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+File: standard.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+\c@bbx:relatedcount=\count490
+\c@bbx:relatedtotal=\count491
+)))
+\footbibmargin=\skip91
+\footbiblabelsep=\skip92
+\c@gbnamefmtcase=\count492
+\c@gbalignlabel=\count493
+\c@gbcitelocalcase=\count494
+\c@gbbiblocalcase=\count495
+\c@lanordernum=\count496
+\bibitemindent=\skip93
+\biblabelextend=\skip94
+Package biblatex Info: Delimiter 'finalnamedelim' in context '' already defined, overwriting.
+)
+Package biblatex Info: Trying to load citation style 'gb7714-2015'...
+Package biblatex Info: ... file 'gb7714-2015.cbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx
+File: gb7714-2015.cbx 2021/01/19 v1.0wbiblatex citation style
+Package biblatex Info: Trying to load citation style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.cbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
+File: numeric-comp.cbx 2020/12/31 v3.16 biblatex citation style (PK/MW)
+\c@cbx@tempcnta=\count497
+\c@cbx@tempcntb=\count498
+\c@cbx@tempcntc=\count499
+\c@cbx@tempcntd=\count500
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\footcite'.
+Package biblatex Info: Redefining '\footcitetext'.
+Package biblatex Info: Redefining '\smartcite'.
+Package biblatex Info: Redefining '\supercite'.
+Package biblatex Info: Redefining '\textcite'.
+Package biblatex Info: Redefining '\textcites'.
+Package biblatex Info: Redefining '\cites'.
+Package biblatex Info: Redefining '\parencites'.
+Package biblatex Info: Redefining '\smartcites'.
+)
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\cbx@textcite'.
+)
+Package biblatex Info: Trying to load configuration file...
+Package biblatex Info: ... file 'biblatex.cfg' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.cfg
+File: biblatex.cfg
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/appendix/appendix.sty
+Package: appendix 2020/02/08 v1.2c extra appendix facilities
+\c@@pps=\count501
+\c@@ppsavesec=\count502
+\c@@ppsaveapp=\count503
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
+\pgfutil@everybye=\toks33
+\pgfutil@tempdima=\dimen288
+\pgfutil@tempdimb=\dimen289
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
+\pgfutil@abb=\box103
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/pgf.revision.tex)
+Package: pgfrcs 2020/12/27 v3.1.8b (3.1.8b)
+))
+Package: pgf 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
+Package: pgfsys 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
+\pgfkeys@pathtoks=\toks34
+\pgfkeys@temptoks=\toks35
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
+\pgfkeys@tmptoks=\toks36
+))
+\pgf@x=\dimen290
+\pgf@y=\dimen291
+\pgf@xa=\dimen292
+\pgf@ya=\dimen293
+\pgf@xb=\dimen294
+\pgf@yb=\dimen295
+\pgf@xc=\dimen296
+\pgf@yc=\dimen297
+\pgf@xd=\dimen298
+\pgf@yd=\dimen299
+\w@pgf@writea=\write6
+\r@pgf@reada=\read5
+\c@pgf@counta=\count504
+\c@pgf@countb=\count505
+\c@pgf@countc=\count506
+\c@pgf@countd=\count507
+\t@pgf@toka=\toks37
+\t@pgf@tokb=\toks38
+\t@pgf@tokc=\toks39
+\pgf@sys@id@count=\count508
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
+File: pgf.cfg 2020/12/27 v3.1.8b (3.1.8b)
+)
+Driver file for pgf: pgfsys-xetex.def
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def
+File: pgfsys-xetex.def 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def
+File: pgfsys-dvipdfmx.def 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
+File: pgfsys-common-pdf.def 2020/12/27 v3.1.8b (3.1.8b)
+)
+\pgfsys@objnum=\count509
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
+File: pgfsyssoftpath.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfsyssoftpath@smallbuffer@items=\count510
+\pgfsyssoftpath@bigbuffer@items=\count511
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
+File: pgfsysprotocol.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
+Package: pgfcore 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
+\pgfmath@dimen=\dimen300
+\pgfmath@count=\count512
+\pgfmath@box=\box104
+\pgfmath@toks=\toks40
+\pgfmath@stack@operand=\toks41
+\pgfmath@stack@operation=\toks42
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
+\c@pgfmathroundto@lastzeros=\count513
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
+File: pgfcorepoints.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@picminx=\dimen301
+\pgf@picmaxx=\dimen302
+\pgf@picminy=\dimen303
+\pgf@picmaxy=\dimen304
+\pgf@pathminx=\dimen305
+\pgf@pathmaxx=\dimen306
+\pgf@pathminy=\dimen307
+\pgf@pathmaxy=\dimen308
+\pgf@xx=\dimen309
+\pgf@xy=\dimen310
+\pgf@yx=\dimen311
+\pgf@yy=\dimen312
+\pgf@zx=\dimen313
+\pgf@zy=\dimen314
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
+File: pgfcorepathconstruct.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@path@lastx=\dimen315
+\pgf@path@lasty=\dimen316
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
+File: pgfcorepathusage.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@shorten@end@additional=\dimen317
+\pgf@shorten@start@additional=\dimen318
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
+File: pgfcorescopes.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfpic=\box105
+\pgf@hbox=\box106
+\pgf@layerbox@main=\box107
+\pgf@picture@serial@count=\count514
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
+File: pgfcoregraphicstate.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgflinewidth=\dimen319
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex
+File: pgfcoretransformations.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@pt@x=\dimen320
+\pgf@pt@y=\dimen321
+\pgf@pt@temp=\dimen322
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
+File: pgfcorequick.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
+File: pgfcoreobjects.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex
+File: pgfcorepathprocessing.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
+File: pgfcorearrows.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfarrowsep=\dimen323
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
+File: pgfcoreshade.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@max=\dimen324
+\pgf@sys@shading@range@num=\count515
+\pgf@shadingcount=\count516
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
+File: pgfcoreimage.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
+File: pgfcoreexternal.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfexternal@startupbox=\box108
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
+File: pgfcorelayers.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
+File: pgfcoretransparency.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
+File: pgfcorepatterns.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
+File: pgfcorerdf.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
+File: pgfmoduleshapes.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfnodeparttextbox=\box109
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
+File: pgfmoduleplot.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
+Package: pgfcomp-version-0-65 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@nodesepstart=\dimen325
+\pgf@nodesepend=\dimen326
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
+Package: pgfcomp-version-1-18 2020/12/27 v3.1.8b (3.1.8b)
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgffor.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
+Package: pgffor 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
+\pgffor@iter=\dimen327
+\pgffor@skip=\dimen328
+\pgffor@stack=\toks43
+\pgffor@toks=\toks44
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
+Package: tikz 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
+File: pgflibraryplothandlers.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@plot@mark@count=\count517
+\pgfplotmarksize=\dimen329
+)
+\tikz@lastx=\dimen330
+\tikz@lasty=\dimen331
+\tikz@lastxsaved=\dimen332
+\tikz@lastysaved=\dimen333
+\tikz@lastmovetox=\dimen334
+\tikz@lastmovetoy=\dimen335
+\tikzleveldistance=\dimen336
+\tikzsiblingdistance=\dimen337
+\tikz@figbox=\box110
+\tikz@figbox@bg=\box111
+\tikz@tempbox=\box112
+\tikz@tempbox@bg=\box113
+\tikztreelevel=\count518
+\tikznumberofchildren=\count519
+\tikznumberofcurrentchild=\count520
+\tikz@fig@count=\count521
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
+File: pgfmodulematrix.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfmatrixcurrentrow=\count522
+\pgfmatrixcurrentcolumn=\count523
+\pgf@matrix@numberofcolumns=\count524
+)
+\tikz@expandcount=\count525
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex
+File: tikzlibrarytopaths.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
+File: tikzlibrarybackgrounds.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@layerbox@background=\box114
+\pgf@layerboxsaved@background=\box115
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex
+File: tikzlibrarycalc.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshadows.code.tex
+File: tikzlibraryshadows.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfadings.code.tex
+File: tikzlibraryfadings.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/libraries/pgflibraryfadings.code.tex
+File: pgflibraryfadings.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex
+File: tikzlibrarypositioning.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex
+File: tikzlibraryfit.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/titlesec/titlesec.sty
+Package: titlesec 2019/10/16 v2.13 Sectioning titles
+\ttl@box=\box116
+\beforetitleunit=\skip95
+\aftertitleunit=\skip96
+\ttl@plus=\dimen338
+\ttl@minus=\dimen339
+\ttl@toksa=\toks45
+\titlewidth=\dimen340
+\titlewidthlast=\dimen341
+\titlewidthfirst=\dimen342
+
+(/usr/local/texlive/2021/texmf-dist/tex/latex/titlesec/titleps.sty)) (/usr/local/texlive/2021/texmf-dist/tex/latex/apptools/apptools.sty
+Package: apptools 2012/11/28 v1.0 Tools for customizing appendices
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/pifont.sty
+Package: pifont 2020/03/25 PSNFSS-v9.3 Pi font support (SPQR)
+LaTeX Font Info: Trying to load font information for U+pzd on input line 63.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/upzd.fd
+File: upzd.fd 2001/06/04 font definitions for U/pzd.
+)
+LaTeX Font Info: Trying to load font information for U+psy on input line 64.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/upsy.fd
+File: upsy.fd 2001/06/04 font definitions for U/psy.
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/manfnt/manfnt.sty
+Package: manfnt 1999/07/010.2LaTeX2e manfnt package
+\dbend@height=\skip97
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/bbding/bbding.sty
+Package: bbding 1999/04/15 v1.01 Dingbats symbols
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty
+Package: tcolorbox 2020/10/09 version 4.42 text color boxes
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/verbatim.sty
+Package: verbatim 2020-07-07 v1.5u LaTeX2e package for verbatim enhancements
+\every@verbatim=\toks46
+\verbatim@line=\toks47
+\verbatim@in@stream=\read6
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/environ/environ.sty
+Package: environ 2014/05/04 v0.3 A new way to define environments
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/trimspaces/trimspaces.sty
+Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list
+))
+\tcb@titlebox=\box117
+\tcb@upperbox=\box118
+\tcb@lowerbox=\box119
+\tcb@phantombox=\box120
+\c@tcbbreakpart=\count526
+\c@tcblayer=\count527
+\c@tcolorbox@number=\count528
+\tcb@temp=\box121
+\tcb@temp=\box122
+\tcb@temp=\box123
+\tcb@temp=\box124
+\tcb@out=\write7
+\tcb@record@out=\write8
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbraster.code.tex
+Library (tcolorbox): 'tcbraster.code.tex' version '4.42'
+\c@tcbrastercolumn=\count529
+\c@tcbrasterrow=\count530
+\c@tcbraster=\count531
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbskins.code.tex
+Library (tcolorbox): 'tcbskins.code.tex' version '4.42'
+\tcb@waterbox=\box125
+(/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbskinsjigsaw.code.tex
+Library (tcolorbox): 'tcbskinsjigsaw.code.tex' version '4.42'
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbbreakable.code.tex
+Library (tcolorbox): 'tcbbreakable.code.tex' version '4.42'
+(/usr/local/texlive/2021/texmf-dist/tex/generic/oberdiek/pdfcol.sty
+Package: pdfcol 2019/12/29 v1.6 Handle new color stacks for pdfTeX (HO)
+Package pdfcol Info: Interface disabled because of missing PDF mode of pdfTeX.
+)
+Package pdfcol Info: pdfTeX's color stacks are not available.
+\tcb@testbox=\box126
+\tcb@totalupperbox=\box127
+\tcb@totallowerbox=\box128
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbhooks.code.tex
+Library (tcolorbox): 'tcbhooks.code.tex' version '4.42'
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbtheorems.code.tex
+Library (tcolorbox): 'tcbtheorems.code.tex' version '4.42'
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbfitting.code.tex
+Library (tcolorbox): 'tcbfitting.code.tex' version '4.42'
+\tcbfitdim=\dimen343
+\tcb@lowerfitdim=\dimen344
+\tcb@upperfitdim=\dimen345
+\tcb@cur@hbadness=\count532
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbxparse.code.tex
+Library (tcolorbox): 'tcbxparse.code.tex' version '4.42'
+))
+\c@tcb@cnt@definition=\count533
+\c@tcb@cnt@theorem=\count534
+\c@tcb@cnt@postulate=\count535
+\c@tcb@cnt@axiom=\count536
+\c@tcb@cnt@corollary=\count537
+\c@tcb@cnt@lemma=\count538
+\c@tcb@cnt@proposition=\count539
+\c@exam=\count540
+\c@exer=\count541
+\c@prob=\count542
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/adforn/adforn.sty
+Package: adforn 2019/10/13 v1.1b adforn CFR
+LaTeX Font Info: Trying to load font information for U+OrnementsADF on input line 4.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/adforn/uornementsadf.fd)) (/usr/local/texlive/2021/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
+Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and footers
+\f@nch@headwidth=\skip98
+\f@nch@O@elh=\skip99
+\f@nch@O@erh=\skip100
+\f@nch@O@olh=\skip101
+\f@nch@O@orh=\skip102
+\f@nch@O@elf=\skip103
+\f@nch@O@erf=\skip104
+\f@nch@O@olf=\skip105
+\f@nch@O@orf=\skip106
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/listings.sty
+\lst@mode=\count543
+\lst@gtempboxa=\box129
+\lst@token=\toks48
+\lst@length=\count544
+\lst@currlwidth=\dimen346
+\lst@column=\count545
+\lst@pos=\count546
+\lst@lostspace=\dimen347
+\lst@width=\dimen348
+\lst@newlines=\count547
+\lst@lineno=\count548
+\lst@maxwidth=\dimen349
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2020/03/24 1.8d (Carsten Heinz)
+\c@lstnumber=\count549
+\lst@skipnumbers=\count550
+\lst@framebox=\box130
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/listings.cfg
+File: listings.cfg 2020/03/24 1.8d listings configuration
+))
+Package: listings 2020/03/24 1.8d (Carsten Heinz)
+ (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty
+Package: xeCJK-listings 2020/10/19 v3.8.6 xeCJK patch file for listings
+\l__xeCJK_listings_max_char_int=\count551
+\l__xeCJK_listings_flag_int=\count552
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/lstlang1.sty
+File: lstlang1.sty 2020/03/24 1.8d listings language file
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/bm.sty
+Package: bm 2019/07/24 v1.2d Bold Symbol Support (DPC/FMi)
+LaTeX Info: Redefining \bm on input line 209.
+))
+Package csquotes Info: Checking for multilingual support...
+Package csquotes Info: ... none found.
+ (./elegantbook-cn.aux)
+\openout1 = `elegantbook-cn.aux'.
+
+LaTeX Font Info: Checking defaults for OML/ntxmi/m/it on input line 26.
+LaTeX Font Info: Trying to load font information for OML+ntxmi on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/omlntxmi.fd
+File: omlntxmi.fd 2015/08/25 Fontinst v1.933 font definitions for OML/ntxmi.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for TU/lmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for U/ntxexa/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for U+ntxexa on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxexa.fd
+File: untxexa.fd 2012/04/16 Fontinst v1.933 font definitions for U/ntxexa.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for LMS/ntxsy/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for LMS+ntxsy on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/lmsntxsy.fd
+File: lmsntxsy.fd 2016/07/02 Fontinst v1.933 font definitions for LMS/ntxsy.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for LMX/ntxexx/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for LMX+ntxexx on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/lmxntxexx.fd
+File: lmxntxexx.fd 2016/07/03 Fontinst v1.933 font definitions for LMX/ntxexx.
+)
+LaTeX Font Info: ... okay on input line 26.
+Package hyperref Info: Link coloring ON on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty
+Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
+Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
+)
+\c@section@level=\count553
+)
+LaTeX Info: Redefining \ref on input line 26.
+LaTeX Info: Redefining \pageref on input line 26.
+LaTeX Info: Redefining \nameref on input line 26.
+ (./elegantbook-cn.out) (./elegantbook-cn.out)
+\@outlinefile=\write9
+\openout9 = `elegantbook-cn.out'.
+
+
+*geometry* driver: auto-detecting
+*geometry* detected driver: xetex
+*geometry* verbose mode - [ preamble ] result:
+* driver: xetex
+* paper: a4paper
+* layout:
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes:
+* h-part:(L,W,R)=(56.9055pt, 483.69687pt, 56.9055pt)
+* v-part:(T,H,B)=(72.26997pt, 700.5069pt, 72.26997pt)
+* \paperwidth=597.50787pt
+* \paperheight=845.04684pt
+* \textwidth=483.69687pt
+* \textheight=700.5069pt
+* \oddsidemargin=-15.36449pt
+* \evensidemargin=-15.36449pt
+* \topmargin=-73.12352pt
+* \headheight=61.74242pt
+* \headsep=11.38109pt
+* \topskip=10.0pt
+* \footskip=34.1433pt
+* \marginparwidth=61.0pt
+* \marginparsep=7.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+ABD: EverySelectfont initializing macros
+LaTeX Info: Redefining \selectfont on input line 26.
+\c@mv@tabular=\count554
+\c@mv@boldtabular=\count555
+Package caption Info: Begin \AtBeginDocument code.
+Package caption Info: listings package is loaded.
+Package caption Info: End \AtBeginDocument code.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/footmisc/footmisc.sty
+Package: footmisc 2011/06/06 v5.5b a miscellany of footnote facilities
+\FN@temptoken=\toks49
+\footnotemargin=\dimen350
+\c@pp@next@reset=\count556
+Package footmisc Info: Declaring symbol style bringhurst on input line 855.
+Package footmisc Info: Declaring symbol style chicago on input line 863.
+Package footmisc Info: Declaring symbol style wiley on input line 872.
+Package footmisc Info: Declaring symbol style lamport-robust on input line 883.
+Package footmisc Info: Declaring symbol style lamport* on input line 903.
+Package footmisc Info: Declaring symbol style lamport*-robust on input line 924.
+)
+Package biblatex Info: Trying to load language 'english'...
+Package biblatex Info: ... file 'english.lbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/lbx/english.lbx
+File: english.lbx 2020/12/31 v3.16 biblatex localization (PK/MW)
+)
+Package biblatex Info: XeTeX detected.
+(biblatex) Assuming input encoding 'utf8'.
+Package biblatex Info: Automatic encoding selection.
+(biblatex) Assuming data encoding 'utf8'.
+Package biblatex Info: Document encoding is UTF8 ....
+Package biblatex Info: ... and expl3
+(biblatex) 2021-02-18 L3 programming layer (loader)
+(biblatex) is new enough (at least 2020/04/06),
+(biblatex) setting 'casechanger=expl3'.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-case-expl3.sty
+Package: blx-case-expl3 2020/12/31 v3.16 expl3 case changing code for biblatex
+)
+\openout5 = `elegantbook-cn.bcf'.
+
+Package biblatex Info: Trying to load bibliographic data...
+Package biblatex Info: ... file 'elegantbook-cn.bbl' not found.
+
+No file elegantbook-cn.bbl.
+Package biblatex Info: Reference section=0 on input line 26.
+Package biblatex Info: Reference segment=0 on input line 26.
+\c@lstlisting=\count557
+Package hyperref Info: Option `pageanchor' set `false' on input line 28.
+*geometry* verbose mode - [ newgeometry ] result:
+* driver: xetex
+* paper: a4paper
+* layout:
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes:
+* h-part:(L,W,R)=(0.0pt, 597.50787pt, 0.0pt)
+* v-part:(T,H,B)=(0.0pt, 845.04684pt, 0.0pt)
+* \paperwidth=597.50787pt
+* \paperheight=845.04684pt
+* \textwidth=597.50787pt
+* \textheight=845.04684pt
+* \oddsidemargin=-72.26999pt
+* \evensidemargin=-72.26999pt
+* \topmargin=-145.3935pt
+* \headheight=61.74242pt
+* \headsep=11.38109pt
+* \topskip=10.0pt
+* \footskip=34.1433pt
+* \marginparwidth=61.0pt
+* \marginparsep=7.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+File: ./figure//cover.jpg Graphic file (type bmp)
+<./figure//cover.jpg>
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 10.0pt on input line 28.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 24.88pt on input line 28.
+LaTeX Font Info: Trying to load font information for OT1+ntxtlf on input line 28.
+(/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/ot1ntxtlf.fd
+File: ot1ntxtlf.fd 2015/01/17 v1.0 font definition file for OT1/ntx/tlf
+)
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 10.0pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 7.3pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 5.5pt on input line 28.
+LaTeX Font Info: Trying to load font information for U+ntxmia on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxmia.fd
+File: untxmia.fd 2018/04/14 Fontinst v1.933 font definitions for U/ntxmia.
+)
+LaTeX Font Info: Trying to load font information for U+ntxsym on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxsym.fd
+File: untxsym.fd 2015/03/20 Fontinst v1.933 font definitions for U/ntxsym.
+)
+LaTeX Font Info: Trying to load font information for U+ntxsyc on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxsyc.fd
+File: untxsyc.fd 2012/04/12 Fontinst v1.933 font definitions for U/ntxsyc.
+)
+LaTeX Font Info: Trying to load font information for U+esint on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/esint/uesint.fd
+File: uesint.fd
+)
+LaTeX Font Info: Trying to load font information for U+rsfs on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/jknapltx/ursfs.fd
+File: ursfs.fd 1998/03/24 rsfs font definition file (jk)
+)
+LaTeX Font Info: Trying to load font information for U+msa on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd
+File: umsa.fd 2013/01/14 v3.01 AMS symbols A
+)
+LaTeX Font Info: Trying to load font information for U+msb on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd
+File: umsb.fd 2013/01/14 v3.01 AMS symbols B
+)
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 14.4pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 14.4pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 10.5pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 7.9pt on input line 28.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 10.5pt on input line 28.
+
+
+Package fontspec Warning: Font "Kaiti SC" does not contain requested Script
+(fontspec) "CJK".
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC Bold/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC/BI" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'KaitiSC(0)' created for font 'Kaiti SC'
+(fontspec) with options [Script={CJK},BoldFont={Kaiti SC Bold}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Kaiti
+(fontspec) SC/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Kaiti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 7.3pt on input line 28.
+File: ./figure//logo-blue.png Graphic file (type bmp)
+<./figure//logo-blue.png>
+[1
+
+
+
+]
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 17.28pt on input line 31.
+ [1
+
+
+
+] (./elegantbook-cn.toc
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 7.3pt on input line 3.
+ [2
+
+])
+\tf@toc=\write10
+\openout10 = `elegantbook-cn.toc'.
+
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 7.0pt on input line 56.
+ [3]
+第 1{} 章 1.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 17.28pt on input line 58.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 12.5pt on input line 58.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 9.4pt on input line 58.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 12.5pt on input line 58.
+
+Package fontspec Warning: Font "STFangsong" does not contain requested Script
+(fontspec) "CJK".
+
+
+Package fontspec Info: Could not resolve font "STFangsong/BI" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "STFangsong/B" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "STFangsong/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'STFangsong(0)' created for font
+(fontspec) 'STFangsong' with options [Script={CJK}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.:
+(fontspec) <->"STFangsong/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 12.0pt on input line 96.
+[1
+
+
+]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 9.0pt on input line 119.
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 8.0pt on input line 119.
+ [2]
+第 2{} 章 2.
+LaTeX Font Info: Trying to load font information for T1+ntxsups on input line 165.
+(/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/t1ntxsups.fd
+File: t1ntxsups.fd 2015/01/17 v1.0
+)
+LaTeX Font Info: Font shape `T1/ntxsups/m/n' will be
+(Font) scaled to size 10.0pt on input line 165.
+LaTeX Font Info: Font shape `T1/ntxsups/m/n' will be
+(Font) scaled to size 8.0pt on input line 165.
+ [3
+
+]
+Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on input line 220.
+ [4]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/it' will be
+(Font) scaled to size 10.0pt on input line 272.
+Missing character: There is no 1 ("31) in font nullfont!
+Missing character: There is no 2 ("32) in font nullfont!
+Missing character: There is no 1 ("31) in font nullfont!
+Missing character: There is no 2 ("32) in font nullfont!
+Missing character: There is no 1 ("31) in font nullfont!
+Missing character: There is no 2 ("32) in font nullfont!
+ [5]
+Missing character: There is no 1 ("31) in font nullfont!
+Missing character: There is no 2 ("32) in font nullfont!
+Missing character: There is no 1 ("31) in font nullfont!
+Missing character: There is no 2 ("32) in font nullfont!
+ [6]
+
+LaTeX Warning: Citation 'cn1' on page 7 undefined on input line 427.
+
+
+LaTeX Warning: Citation 'en2' on page 7 undefined on input line 427.
+
+
+LaTeX Warning: Citation 'en3' on page 7 undefined on input line 427.
+
+[7]
+LaTeX Font Info: Trying to load font information for U+ding on input line 479.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/bbding/Uding.fd
+File: Uding.fd 1996/02/01 v1.0 BBding font definitions
+)
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 14.4pt on input line 507.
+ [8] [9]
+第 3{} 章 3.
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 5.5pt on input line 591.
+
+Package fontspec Warning: Font "Heiti SC Light" does not contain requested
+(fontspec) Script "CJK".
+
+
+Package fontspec Info: Could not resolve font "Heiti SC Medium/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Heiti SC Light/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'HeitiSCLight(0)' created for font 'Heiti
+(fontspec) SC Light' with options [Script={CJK},BoldFont={Heiti SC
+(fontspec) Medium}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Heiti SC
+(fontspec) Light/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Heiti SC
+(fontspec) Medium/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+(fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Heiti SC
+(fontspec) Light/BI/OT:language=dflt;"
+(fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.:
+
+[10
+
+]
+
+Package fontspec Warning: Font "Songti SC Light" does not contain requested
+(fontspec) Script "CJK".
+
+
+Package fontspec Info: Could not resolve font "Songti SC Bold/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Songti SC Light/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'SongtiSCLight(1)' created for font 'Songti
+(fontspec) SC Light' with options [Script={CJK},BoldFont={Songti
+(fontspec) SC Bold}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Songti SC
+(fontspec) Light/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Songti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+(fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Songti SC
+(fontspec) Light/BI/OT:language=dflt;"
+(fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.:
+
+
+Package fontspec Warning: Font "STFangsong" does not contain requested Script
+(fontspec) "CJK".
+
+File: ./image//founder.png Graphic file (type bmp)
+<./image//founder.png>
+[11] [12]
+第 4{} 章 4.
+[13
+
+]
+File: ./image//scatter.jpg Graphic file (type bmp)
+<./image//scatter.jpg>
+ [14] [15]
+第 5{} 章 5.
+LaTeX Font Info: Font shape `T1/ntxtlf/m/sl' will be
+(Font) scaled to size 10.0pt on input line 774.
+[16
+
+]
+第 6{} 章 6.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 9.0pt on input line 799.
+[17
+
+] [18]
+
+LaTeX Warning: Empty bibliography on input line 937.
+
+[19]
+附录 A.
+[20
+
+] (./elegantbook-cn.aux)
+
+LaTeX Warning: There were undefined references.
+
+Package rerunfilecheck Info: File `elegantbook-cn.out' has not changed.
+(rerunfilecheck) Checksum: 59BD88202F863448E9C2B032728D2D38;5750.
+
+Package biblatex Warning: Please (re)run Biber on the file:
+(biblatex) elegantbook-cn
+(biblatex) and rerun LaTeX afterwards.
+
+Package logreq Info: Writing requests to 'elegantbook-cn.run.xml'.
+\openout1 = `elegantbook-cn.run.xml'.
+
+ )
+Here is how much of TeX's memory you used:
+ 46939 strings out of 476919
+ 965454 string characters out of 5821841
+ 2033737 words of memory out of 5000000
+ 66050 multiletter control sequences out of 15000+600000
+ 506146 words of font info for 209 fonts, out of 8000000 for 9000
+ 1348 hyphenation exceptions out of 8191
+ 118i,18n,131p,792b,1883s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+Output written on elegantbook-cn.pdf (24 pages).
diff --git a/elegantbook-cn.out b/elegantbook-cn.out
new file mode 100644
index 0000000..16d8ea7
--- /dev/null
+++ b/elegantbook-cn.out
@@ -0,0 +1,46 @@
+\BOOKMARK [0][]{chapter.1}{\376\377\0001\000\040\000E\000l\000e\000g\000a\000n\000t\000L\000a\000T\000e\000X\000\040\174\373\122\027\152\041\147\177\116\313\176\315}{}% 1
+\BOOKMARK [1][]{section.1.1}{\376\377\0001\000.\0001\000\040\000E\000l\000e\000g\000a\000n\000t\000B\000o\000o\000k\000\040\146\364\145\260\213\364\146\016}{chapter.1}% 2
+\BOOKMARK [1][]{section.1.2}{\376\377\0001\000.\0002\000\040\152\041\147\177\133\211\210\305\116\016\146\364\145\260}{chapter.1}% 3
+\BOOKMARK [2][]{subsection.1.2.1}{\376\377\0001\000.\0002\000.\0001\000\040\127\050\176\277\117\177\165\050\152\041\147\177}{section.1.2}% 4
+\BOOKMARK [2][]{subsection.1.2.2}{\376\377\0001\000.\0002\000.\0002\000\040\147\054\127\060\121\115\133\211\210\305\117\177\165\050}{section.1.2}% 5
+\BOOKMARK [2][]{subsection.1.2.3}{\376\377\0001\000.\0002\000.\0003\000\040\123\321\210\114\162\110\133\211\210\305\117\177\165\050}{section.1.2}% 6
+\BOOKMARK [2][]{subsection.1.2.4}{\376\377\0001\000.\0002\000.\0004\000\040\146\364\145\260\225\356\230\230}{section.1.2}% 7
+\BOOKMARK [2][]{subsection.1.2.5}{\376\377\0001\000.\0002\000.\0005\000\040\121\166\116\326\123\321\210\114\162\110\147\054}{section.1.2}% 8
+\BOOKMARK [1][]{section.1.3}{\376\377\0001\000.\0003\000\040\121\163\116\216\143\320\116\244}{chapter.1}% 9
+\BOOKMARK [0][]{chapter.2}{\376\377\0002\000\040\000E\000l\000e\000g\000a\000n\000t\000B\000o\000o\000k\000\040\213\276\177\156\213\364\146\016}{}% 10
+\BOOKMARK [1][]{section.2.1}{\376\377\0002\000.\0001\000\040\213\355\212\000\152\041\137\017}{chapter.2}% 11
+\BOOKMARK [1][]{section.2.2}{\376\377\0002\000.\0002\000\040\213\276\131\007\220\011\230\171}{chapter.2}% 12
+\BOOKMARK [1][]{section.2.3}{\376\377\0002\000.\0003\000\040\230\234\202\162\116\073\230\230}{chapter.2}% 13
+\BOOKMARK [1][]{section.2.4}{\376\377\0002\000.\0004\000\040\134\001\227\142}{chapter.2}% 14
+\BOOKMARK [2][]{subsection.2.4.1}{\376\377\0002\000.\0004\000.\0001\000\040\134\001\227\142\116\052\140\047\123\026}{section.2.4}% 15
+\BOOKMARK [2][]{subsection.2.4.2}{\376\377\0002\000.\0004\000.\0002\000\040\134\001\227\142\126\376}{section.2.4}% 16
+\BOOKMARK [2][]{subsection.2.4.3}{\376\377\0002\000.\0004\000.\0003\000\040\137\275\150\007}{section.2.4}% 17
+\BOOKMARK [2][]{subsection.2.4.4}{\376\377\0002\000.\0004\000.\0004\000\040\201\352\133\232\116\111\134\001\227\142}{section.2.4}% 18
+\BOOKMARK [1][]{section.2.5}{\376\377\0002\000.\0005\000\040\172\340\150\007\150\007\230\230}{chapter.2}% 19
+\BOOKMARK [1][]{section.2.6}{\376\377\0002\000.\0006\000\040\145\160\133\146\163\257\130\203\173\200\116\313}{chapter.2}% 20
+\BOOKMARK [2][]{subsection.2.6.1}{\376\377\0002\000.\0006\000.\0001\000\040\133\232\164\006\174\173\163\257\130\203\166\204\117\177\165\050}{section.2.6}% 21
+\BOOKMARK [2][]{subsection.2.6.2}{\376\377\0002\000.\0006\000.\0002\000\040\121\166\116\326\163\257\130\203\166\204\117\177\165\050}{section.2.6}% 22
+\BOOKMARK [1][]{section.2.7}{\376\377\0002\000.\0007\000\040\122\027\210\150\163\257\130\203}{chapter.2}% 23
+\BOOKMARK [1][]{section.2.8}{\376\377\0002\000.\0008\000\040\123\302\200\003\145\207\163\056}{chapter.2}% 24
+\BOOKMARK [1][]{section.2.9}{\376\377\0002\000.\0009\000\040\155\373\122\240\136\217\172\340}{chapter.2}% 25
+\BOOKMARK [1][]{section.2.10}{\376\377\0002\000.\0001\0000\000\040\166\356\137\125\220\011\230\171\116\016\155\361\136\246}{chapter.2}% 26
+\BOOKMARK [1][]{section.2.11}{\376\377\0002\000.\0001\0001\000\040\172\340\202\202\144\130\211\201}{chapter.2}% 27
+\BOOKMARK [1][]{section.2.12}{\376\377\0002\000.\0001\0002\000\040\172\340\124\016\116\140\230\230}{chapter.2}% 28
+\BOOKMARK [1][]{section*.6}{\376\377\176\303\116\140}{chapter.2}% 29
+\BOOKMARK [1][]{section.2.13}{\376\377\0002\000.\0001\0003\000\040\145\301\154\350}{chapter.2}% 30
+\BOOKMARK [0][]{chapter.3}{\376\377\0003\000\040\133\127\117\123\220\011\230\171}{}% 31
+\BOOKMARK [1][]{section.3.1}{\376\377\0003\000.\0001\000\040\145\160\133\146\133\127\117\123\220\011\230\171}{chapter.3}% 32
+\BOOKMARK [1][]{section.3.2}{\376\377\0003\000.\0002\000\040\117\177\165\050\000\040\000n\000e\000w\000t\000x\000\040\174\373\122\027\133\127\117\123}{chapter.3}% 33
+\BOOKMARK [2][]{subsection.3.2.1}{\376\377\0003\000.\0002\000.\0001\000\040\217\336\133\127\173\046}{section.3.2}% 34
+\BOOKMARK [2][]{subsection.3.2.2}{\376\377\0003\000.\0002\000.\0002\000\040\133\217\123\005\121\262\172\201}{section.3.2}% 35
+\BOOKMARK [1][]{section.3.3}{\376\377\0003\000.\0003\000\040\116\055\145\207\133\127\117\123\220\011\230\171}{chapter.3}% 36
+\BOOKMARK [2][]{subsection.3.3.1}{\376\377\0003\000.\0003\000.\0001\000\040\145\271\153\143\133\127\117\123\220\011\230\171}{section.3.3}% 37
+\BOOKMARK [2][]{subsection.3.3.2}{\376\377\0003\000.\0003\000.\0002\000\040\121\166\116\326\116\055\145\207\133\127\117\123}{section.3.3}% 38
+\BOOKMARK [0][]{chapter.4}{\376\377\0004\000\040\000E\000l\000e\000g\000a\000n\000t\000B\000o\000o\000k\000\040\121\231\117\134\171\072\117\213}{}% 39
+\BOOKMARK [1][]{section.4.1}{\376\377\0004\000.\0001\000\040\000L\000e\000b\000e\000s\000g\000u\000e\000\040\171\357\122\006}{chapter.4}% 40
+\BOOKMARK [2][]{subsection.4.1.1}{\376\377\0004\000.\0001\000.\0001\000\040\171\357\122\006\166\204\133\232\116\111}{section.4.1}% 41
+\BOOKMARK [1][]{section*.9}{\376\377\176\303\116\140}{chapter.4}% 42
+\BOOKMARK [0][]{chapter.5}{\376\377\0005\000\040\136\070\211\301\225\356\230\230\226\306}{}% 43
+\BOOKMARK [0][]{chapter.6}{\376\377\0006\000\040\162\110\147\054\146\364\145\260\123\206\123\362}{}% 44
+\BOOKMARK [0][]{appendix.A}{\376\377\000A\000\040\127\372\147\054\145\160\133\146\135\345\121\167}{}% 45
+\BOOKMARK [1][]{section.A.1}{\376\377\000A\000.\0001\000\040\154\102\124\214\173\227\133\120\116\016\143\317\217\360\176\337\213\241\221\317}{appendix.A}% 46
diff --git a/elegantbook-cn.pdf b/elegantbook-cn.pdf
new file mode 100644
index 0000000..e33c8c8
Binary files /dev/null and b/elegantbook-cn.pdf differ
diff --git a/elegantbook-cn.run.xml b/elegantbook-cn.run.xml
new file mode 100644
index 0000000..3c80c86
--- /dev/null
+++ b/elegantbook-cn.run.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+ latex
+
+ elegantbook-cn.bcf
+
+
+ elegantbook-cn.bbl
+
+
+ blx-dm.def
+ blx-unicode.def
+ blx-compat.def
+ biblatex.def
+ standard.bbx
+ numeric.bbx
+ numeric-comp.bbx
+ gb7714-2015.bbx
+ numeric-comp.cbx
+ gb7714-2015.cbx
+ biblatex.cfg
+ english.lbx
+
+
+
+ biber
+
+ biber
+ elegantbook-cn
+
+
+ elegantbook-cn.bcf
+
+
+
+ elegantbook-cn.bbl
+
+
+ elegantbook-cn.bcf
+
+
+ reference.bib
+
+
+
diff --git a/elegantbook-cn.synctex.gz b/elegantbook-cn.synctex.gz
new file mode 100644
index 0000000..e9073e5
Binary files /dev/null and b/elegantbook-cn.synctex.gz differ
diff --git a/elegantbook-cn.tex b/elegantbook-cn.tex
new file mode 100644
index 0000000..5ee80c8
--- /dev/null
+++ b/elegantbook-cn.tex
@@ -0,0 +1,955 @@
+\documentclass[cn,10pt,math=newtx,citestyle=gb7714-2015,bibstyle=gb7714-2015]{elegantbook}
+
+\title{ElegantBook:优美的书籍模板}
+\subtitle{Elegant\LaTeX{} 经典之作}
+
+\author{Ethan Deng \& Liam Huang}
+\institute{Elegant\LaTeX{} Program}
+\date{May 2, 2021}
+\version{4.1}
+\bioinfo{自定义}{信息}
+
+\extrainfo{各人自扫门前雪,休管他人瓦上霜。—— 陈元靓}
+
+\setcounter{tocdepth}{3}
+
+\logo{logo-blue.png}
+\cover{cover.jpg}
+
+% 本文档命令
+\usepackage{array}
+\newcommand{\ccr}[1]{\makecell{{\color{#1}\rule{1cm}{1cm}}}}
+
+\definecolor{customcolor}{RGB}{32,178,170}
+\colorlet{coverlinecolor}{customcolor}
+
+\begin{document}
+
+\maketitle
+\frontmatter
+
+\chapter*{特别声明}
+
+\markboth{Introduction}{前言}
+
+自 2019 年 Elegant\LaTeX{} 系列模板上线 GitHub、CTAN 以来,受到很多用户的喜爱。
+
+2020 年,我打算做 Elegant\LaTeX{} 的最后一个版本,也就是原定计划 ElegantBook 4.x 版本为 Elegant\LaTeX{} 系列模板的终止符。基于我想把 4.x 做成一个最终版本,我计划了很多事情,包括将代码转为 dtx,将三个模板的文档打包进 dtx 里面,然后重新设计封面,补充各种页面,增加元素等等。我想的很多,但是做起来并不是很顺利,中间也发生了很多事情,不想解释。直至今年 4 月,我决定,不论如何,先把 4.1 发布出来。
+
+\vskip 0.5cm
+
+另外,在临近 Elegant\LaTeX{} 模板告别之际,我想和各位用户说:多分享,多奉献。
+
+\vskip 0.5cm
+
+\underline{如果你无法认同我的想法,建议直接删除本模板。}
+
+\vskip 1.5cm
+
+\begin{flushright}
+Ethan Deng\\
+May 2, 2021
+\end{flushright}
+
+\tableofcontents
+
+\mainmatter
+
+\chapter{Elegant\LaTeX{} 系列模板介绍}
+
+Elegant\LaTeX{} 项目组致力于打造一系列美观、优雅、简便的模板方便用户使用。目前由 \href{https://github.com/ElegantLaTeX/ElegantNote}{ElegantNote},\href{https://github.com/ElegantLaTeX/ElegantBook}{ElegantBook},\href{https://github.com/ElegantLaTeX/ElegantPaper}{ElegantPaper} 组成,分别用于排版笔记,书籍和工作论文。强烈推荐使用最新正式版本!本文将介绍本模板的一些设置内容以及基本使用方法。如果您有其他问题,建议或者意见,欢迎在 GitHub 上给我们提交 \href{https://github.com/ElegantLaTeX/ElegantBook/issues}{issues} 或者邮件联系我们。
+
+我们的联系方式如下,建议加入用户 QQ 群提问,这样能更快获得准确的反馈,加群时请备注 \LaTeX{} 或者 Elegant\LaTeX{} 相关内容。
+\begin{itemize}
+ \item 官网:\href{https://elegantlatex.org/}{https://elegantlatex.org/}
+ \item GitHub 网址:\href{https://github.com/ElegantLaTeX/}{https://github.com/ElegantLaTeX/}
+ \item CTAN 地址:\href{https://ctan.org/pkg/elegantbook}{https://ctan.org/pkg/elegantbook}
+ \item 下载地址:\href{https://github.com/ElegantLaTeX/ElegantBook/releases}{正式发行版},\href{https://github.com/ElegantLaTeX/ElegantBook/archive/master.zip}{最新版}
+ \item 微博:Elegant\LaTeX{}
+ \item 微信公众号:Elegant\LaTeX{}
+ \item 用户 QQ 群:692108391
+ \item 邮件:\email{elegantlatex2e@gmail.com}
+\end{itemize}
+
+
+\section{ElegantBook 更新说明}
+
+此次为 4.x 第一个版本,在 3.x 基础上,主要更新了定理以及参考文献的支持方式,具体内容有:
+
+\begin{enumerate}
+ \item \textbf{重要改动}:由原先的 \hologo{BibTeX} 改为 biblatex 编译方式(后端为 \lstinline{biber}),请注意两者之间的差异;
+ \item \textbf{重要改进}:修改对于定理写法兼容方式,提高数学公式代码的兼容性;
+ \item 页面设置改动,默认页面更宽;方便书写和阅读;
+ \item 支持目录文字以及页码跳转;
+ \item 不再维护 \hologo{pdfLaTeX} 中文支持方式,请务必使用 \hologo{XeLaTeX} 编译中文文稿。
+ \item 增加多语言选项,法语 \lstinline{lang=fr}、德语 \lstinline{lang=de}、荷兰语 \lstinline{lang=nl}、匈牙利语 \lstinline{lang=hu}、西班牙语 \lstinline{lang=es}、蒙古语 \lstinline{lang=mn} 等。
+\end{enumerate}
+
+\begin{note}
+如果你使用旧版本切换到新版本时,遇到问题时,请核对文档中是否有 \lstinline{pageanchor} 字样。如果有,请删除文档中的 \lstinline|\hypersetup{pageanchor=true}|,并且在 \lstinline{\maketitle} 和 \lstinline{\tableofcontents} 之间添加 \lstinline{\frontmatter}。2.x 版本的用户请仔细查看\href{https://github.com/ElegantLaTeX/ElegantBook/wiki/convert}{跨版本转换}。
+\end{note}
+
+\section{模板安装与更新}
+
+你可以通过免安装的方式使用本模板,包括在线使用和本地(文件夹内)使用两种方式,也可以通过 \TeX{} 发行版安装使用。
+
+\subsection{在线使用模板}
+
+我们把三套模板全部上传到 \href{https://www.overleaf.com/}{Overleaf} 上了,网络便利的用户可以直接通过 Overleaf 在线使用我们的模板。使用 Overleaf 的好处是无需安装 \TeX{} Live 2020,可以随时随地访问自己的文件。查找模板,请在 Overleaf 模板库里面搜索 \lstinline{elegantlatex} 即可,你也可以直接访问\href{https://www.overleaf.com/latex/templates?addsearch=elegantlatex}{搜索结果}。选择适当的模板之后,将其 \lstinline{Open as Template},即可把模板存到自己账户下,然后可以自由编辑以及与别人一起协作。更多关于 Overleaf 的介绍和使用,请参考 Overleaf 的\href{https://www.overleaf.com/learn}{官方文档}。
+
+\begin{remark}
+Overleaf 上,中文需要使用 \hologo{XeLaTeX} 进行编译,英文建议使用 \hologo{pdfLaTeX} 编译。
+\end{remark}
+
+\subsection{本地免安装使用}
+
+\textbf{免安装}使用方法如下,从 GitHub 或者 CTAN 下载最新版,严格意义上只需要类文件 \lstinline{elegantbook.cls}。然后将模板文件放在你的工作目录下即可使用。这样使用的好处是,无需安装,简便;缺点是,当模板更新之后,你需要手动替换 \lstinline{cls} 文件。
+
+\subsection{发行版安装使用}
+
+本模板测试环境为 Win10 和 TeX Live 2021,如果你刚安装 \TeX{} Live 2021 用户,安装后建议升级全部宏包,升级方法:使用 cmd 运行 \lstinline{tlmgr update --all},如果 tlmgr 需要更新,请使用 cmd 运行 \lstinline{tlmgr update --self},如果更新过程中出现了中断,请改用 \lstinline{tlmgr update --self --all --reinstall-forcibly-removed} 更新。
+
+\subsection{更新问题}
+
+如果使用 \lstinline{tlshell} 无法更新模板,请使用命令行全部更新全部宏包或者使用免安装的方法使用本模板。
+
+通过命令行(管理员权限)输入下面的命令对 tlmgr 自身和全部宏包进行更新。
+
+\begin{lstlisting}
+ tlmgr update --self
+ tlmgr update --all
+\end{lstlisting}
+
+更多的内容请参考 \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my \TeX{} distribution?}
+
+\subsection{其他发行版本}
+
+由于宏包版本问题,本模板不支持 C\TeX{} 套装,请务必安装 TeX Live。更多关于 \TeX{} Live 的安装使用以及 C\TeX{} 与 \TeX{} Live 的兼容、系统路径问题,请参考官方文档以及啸行的\href{https://github.com/OsbertWang/install_latex/releases}{一份简短的安装 \LaTeX{} 的介绍}。
+
+
+\section{关于提交}
+
+出于某些因素的考虑,Elegant\LaTeX{} 项目自 2019 年 5 月 20 日开始,\textbf{不再接受任何非作者预约性质的提交}(pull request)!如果你想改进模板,你可以给我们提交 issues,或者可以在遵循协议(LPPL-1.3c)的情况下,克隆到自己仓库下进行修改。
+
+
+\chapter{ElegantBook 设置说明}
+
+本模板基于基础的 book 文类,所以 book 的选项对于本模板也是有效的(纸张无效,因为模板有设备选项)。默认编码为 UTF-8,推荐使用 \TeX{} Live 编译。本文编写环境为 Win10 (64bit) + \TeX{} Live 2021,英文支持 \hologo{pdfLaTeX},中文仅支持 \hologo{XeLaTeX} 编译。
+
+\section{语言模式}
+本模板内含两套基础语言环境 \lstinline{lang=cn}、\lstinline{lang=en}。改变语言环境会改变图表标题的引导词(图,表),文章结构词(比如目录,参考文献等),以及定理环境中的引导词(比如定理,引理等)。不同语言模式的启用如下:
+\begin{lstlisting}
+\documentclass[cn]{elegantbook}
+\documentclass[lang=cn]{elegantbook}
+\end{lstlisting}
+
+除模板自带的两套语言设定之外,由网友提供的其他语言环境设置如下:
+\begin{itemize}
+ \item 由 \href{https://github.com/VincentMVV}{VincentMVV} 提供的意大利语翻译 \lstinline{lang=it},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/85}{Italian translation};
+ \item 由 \href{https://github.com/abfek66}{abfek66} 提供的法语翻译 \lstinline{lang=fr},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/85}{Italian translation};
+ % \item 由 \href{https://github.com/stultus}{stultus} 提供的马拉雅拉姆语翻译 \lstinline{lang=},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/90}{Malayalam translation};
+ \item 由 \href{https://github.com/inktvis75}{inktvis75} 提供的荷兰语翻译 \lstinline{lang=nl},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/108}{Dutch Translation};
+ \item 由 \href{https://github.com/palkotamas}{palkotamas} 提供的匈牙利语翻译 \lstinline{lang=hu},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/111}{Hungarian translation};
+ \item 由 Lisa 提供的德语翻译 \lstinline{lang=de},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/113}{Deutsch translation};
+ \item 由 Gustavo A. Corradi 提供的西班牙语的翻译 \lstinline{lang=es},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/133}{Spanish translation};
+ \item 由 \href{https://github.com/Altantsooj}{Altantsooj} 提供的蒙古语的翻译 \lstinline{lang=mn},相关讨论见 \href{https://github.com/ElegantLaTeX/ElegantBook/issues/137}{Mongolian translation}。
+\end{itemize}
+
+
+
+\begin{remark}
+以上各个语言的设定均为网友设定,我们未对上述翻译进行过校对,如果有问题,请在对应的 issue 下评论。并且,只有中文环境(\lstinline{lang=cn})才可以输入中文。
+\end{remark}
+
+\section{设备选项}
+最早我们在 ElegantNote 模板中加入了设备选项(\lstinline{device}),后来,我们觉得这个设备选项的设置可以应用到 ElegantBook 中\footnote{不过因为 ElegantBook 模板封面图片的存在,在修改页面设计时,需要对图片进行裁剪。},而且 Book 一般内容比较多,如果在 iPad 上看无需切边,放大,那用户的阅读体验将会得到巨大提升。你可以使用下面的选项将版面设置为 iPad 设备模式\footnote{默认为 normal 模式,也即 A4 纸张大小。}
+\begin{lstlisting}
+\documentclass[pad]{elegantbook} %or
+\documentclass[device=pad]{elegantbook}
+\end{lstlisting}
+
+\section{颜色主题}
+
+本模板内置 5 组颜色主题,分别为 \textcolor{structure1}{\lstinline{green}}\footnote{为原先默认主题。}、\textcolor{structure2}{\lstinline{cyan}}、\textcolor{structure3}{\lstinline{blue}}(默认)、\textcolor{structure4}{\lstinline{gray}}、\textcolor{structure5}{\lstinline{black}}。另外还有一个自定义的选项 \lstinline{nocolor}。调用颜色主题 \lstinline{green} 的方法为
+\begin{lstlisting}
+\documentclass[green]{elegantbook} %or
+\documentclass[color=green]{elegantbook}
+\end{lstlisting}
+
+\begin{table}[htbp]
+ \caption{ElegantBook 模板中的颜色主题\label{tab:color thm}}
+ \centering
+ \begin{tabular}{ccccccc}
+ \toprule
+ & \textcolor{structure1}{green}
+ & \textcolor{structure2}{cyan}
+ & \textcolor{structure3}{blue}
+ & \textcolor{structure4}{gray}
+ & \textcolor{structure5}{black}
+ & 主要使用的环境\\
+ \midrule
+ structure & \ccr{structure1}
+ & \ccr{structure2}
+ & \ccr{structure3}
+ & \ccr{structure4}
+ & \ccr{structure5}
+ & chapter \ section \ subsection \\
+ main & \ccr{main1}
+ & \ccr{main2}
+ & \ccr{main3}
+ & \ccr{main4}
+ & \ccr{main5}
+ & definition \ exercise \ problem \\
+ second & \ccr{second1}
+ & \ccr{second2}
+ & \ccr{second3}
+ & \ccr{second4}
+ & \ccr{second5}
+ & theorem \ lemma \ corollary\\
+ third & \ccr{third1}
+ & \ccr{third2}
+ & \ccr{third3}
+ & \ccr{third4}
+ & \ccr{third5}
+ & proposition\\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+如果需要自定义颜色的话请选择 \lstinline{nocolor} 选项或者使用 \lstinline{color=none},然后在导言区定义 structurecolor、main、second、third 颜色,具体方法如下:
+\begin{lstlisting}[tabsize=4]]
+\definecolor{structurecolor}{RGB}{0,0,0}
+\definecolor{main}{RGB}{70,70,70}
+\definecolor{second}{RGB}{115,45,2}
+\definecolor{third}{RGB}{0,80,80}
+\end{lstlisting}
+
+\section{封面}
+
+\subsection{封面个性化}
+
+从 3.10 版本开始,封面更加弹性化,用户可以自行选择输出的内容,包括 \lstinline{\title} 在内的所有封面元素都可为空。目前封面的元素有
+
+\begin{table}[htbp]
+ \centering
+ \caption{封面元素信息}
+ \begin{tabular}{p{0.07\textwidth}p{0.15\textwidth}|p{0.07\textwidth}p{0.15\textwidth}|p{0.07\textwidth}p{0.15\textwidth}}
+ \toprule
+ 信息 & 命令 & 信息 & 命令 & 信息 & 命令 \\
+ \midrule
+ 标题 & \lstinline|\title| & 副标题 & \lstinline|\subtitle| & 作者 & \lstinline|\author| \\
+ 机构 & \lstinline|\institute| & 日期 & \lstinline|\date| & 版本 & \lstinline|\version| \\
+ 箴言 & \lstinline|\extrainfo| & 封面图 & \lstinline|\cover| & 徽标 & \lstinline|\logo| \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+另外,额外增加一个 \lstinline{\bioinfo} 命令,有两个选项,分别是信息标题以及信息内容。比如需要显示{\kaishu User Name:111520},则可以使用
+\begin{lstlisting}
+\bioinfo{User Name}{115520}
+\end{lstlisting}
+
+封面中间位置的色块的颜色可以使用下面命令进行修改:
+\begin{lstlisting}
+ \definecolor{customcolor}{RGB}{32,178,170}
+ \colorlet{coverlinecolor}{customcolor}
+\end{lstlisting}
+
+\subsection{封面图}
+
+本模板使用的封面图片来源于 \href{https://pixabay.com/en/tea-time-poetry-coffee-reading-3240766/}{pixabay.com}\footnote{感谢 China\TeX{} 提供免费图源网站,另外还推荐 \href{https://www.pexels.com/}{pexels.com}。},图片完全免费,可用于任何场景。封面图片的尺寸为 $1280 \times 1024$, 更换图片的时候请\textbf{严格}按照封面图片尺寸进行裁剪。推荐一个免费的在线图片裁剪网站 \href{https://www.fotor.com/cn}{fotor.com}。用户 QQ 群内有一些合适尺寸的封面,欢迎取用。
+
+\subsection{徽标}
+
+本文用到的 Logo 比例为 1:1,也即正方形图片,在更换图片的时候请选择合适的图片进行替换。
+
+\subsection{自定义封面}
+
+另外,如果使用自定义的封面,比如 Adobe illustrator 或者其他软件制作的 A4 PDF 文档,请把 \lstinline{\maketitle} 注释掉,然后借助 \lstinline{pdfpages} 宏包将自制封面插入即可。如果使用 \lstinline{titlepage} 环境,也是类似。如果需要 2.x 版本的封面,请参考 \href{https://github.com/EthanDeng/etitlepage}{etitlepage}。
+
+\section{章标标题}
+
+本模板内置 2 套\textit{章标题显示风格},包含 \lstinline{hang}(默认)与 \lstinline{display} 两种风格,区别在于章标题单行显示(\lstinline{hang})与双行显示(\lstinline{display}),本说明使用了 \lstinline{hang}。调用方式为
+\begin{lstlisting}
+\documentclass[hang]{elegantbook} %or
+\documentclass[titlestyle=hang]{elegantbook}
+\end{lstlisting}
+
+在章标题内,章节编号默认是以数字显示,也即{\kaishu 第 1 章},{\kaishu 第 2 章}等等,如果想要把数字改为中文,可以使用
+\begin{lstlisting}
+\documentclass[chinese]{elegantbook} %or
+\documentclass[scheme=chinese]{elegantbook}
+\end{lstlisting}
+
+\section{数学环境简介}
+
+在我们这个模板中,我们定义了两种不同的定理模式 \lstinline{mode},包括简单模式(\lstinline{simple})和炫彩模式(\lstinline{fancy}),默认为 \lstinline{fancy} 模式,不同模式的选择为
+\begin{lstlisting}
+\documentclass[simple]{elegantbook} %or
+\documentclass[mode=simple]{elegantbook}
+\end{lstlisting}
+
+本模板定义了四大类环境
+
+\begin{itemize}
+ \item \textit{定理类环境},包含标题和内容两部分,全部定理类环境的编号均以章节编号。根据格式的不同分为 3 种
+ \begin{itemize}
+ \item \textcolor{main}{\textbf{definition}} 环境,颜色为 \textcolor{main}{main};
+ \item \textcolor{second}{\textbf{theorem、lemma、corollary}} 环境,颜色为 \textcolor{second} {second};
+ \item \textcolor{third}{\textbf{proposition}} 环境,颜色为 \textcolor{third}{third}。
+ \end{itemize}
+ \item \textit{示例类环境},有 \textbf{example、problem、exercise} 环境(对应于例、例题、练习),自动编号,编号以章节为单位,其中 \textbf{exercise} 有提示符。
+ \item \textit{提示类环境},有 \textbf{note} 环境,特点是:无编号,有引导符。
+ \item \textit{结论类环境},有 \textbf{conclusion、assumption、property、remark、solution} 环境\footnote{本模板还添加了一个 result 选项,用于隐藏 \lstinline{solution} 和 \lstinline{proof} 环境,默认为显示(\lstinline{result=answer}),隐藏使用 \lstinline{result=noanswer}。},三者均以粗体的引导词为开头,和普通段落格式一致。
+\end{itemize}
+
+\subsection{定理类环境的使用}
+
+由于本模板使用了 \lstinline{tcolorbox} 宏包来定制定理类环境,所以和普通的定理环境的使用有些许区别,定理的使用方法如下:
+\begin{lstlisting}
+\begin{theorem}{theorem name}{label}
+ The content of theorem.
+\end{theorem}
+\end{lstlisting}
+
+第一个必选项 \lstinline{theorem name} 是定理的名字,第二个必选项 \lstinline{label} 是交叉引用时所用到的标签,交叉引用的方法为 \verb|\ref{thm:label}|。请注意,交叉引用时必须加上前缀 \lstinline{thm:}。
+
+在用户多次反馈下,4.x 之后,引入了原生定理的支持方式,也就是使用可选项方式:
+
+\begin{lstlisting}
+\begin{theorem}[theorem name] \label{thm:theorem-label}
+ The content of theorem.
+\end{theorem}
+% or
+\begin{theorem} \label{thm:theorem-withou-name}
+ The content of theorem without name.
+\end{theorem}
+\end{lstlisting}
+
+其他相同用法的定理类环境有:
+
+\begin{table}[htbp]
+ \centering
+ \caption{定理类环境}
+ \begin{tabular}{llll}
+ \toprule
+ 环境名 & 标签名 & 前缀 & 交叉引用 \\
+ \midrule
+ definition & label & def & \lstinline|\ref{def:label}| \\
+ theorem & label & thm & \lstinline|\ref{thm:label}| \\
+ lemma & label & lem & \lstinline|\ref{lem:label}| \\
+ corollary & label & cor & \lstinline|\ref{cor:label}| \\
+ proposition & label & pro & \lstinline|\ref{pro:label}| \\
+ \bottomrule
+ \end{tabular}%
+ \label{tab:theorem-class}%
+ \end{table}%
+
+% \subsection{算法环境}
+
+
+% \begin{algorithm}\label{alg:test}
+% \Input{A bitmap $I$ of size $w \times l$}
+% \Output{A partition of the bitmap}
+% \BlankLine
+% \emph{special treatment of the first line}\;
+% \For{$i \leftarrow 2$ \KwTo $l$}{
+% \emph{special treatment of the first element of line $i$}\;
+% \For{$j \leftarrow 2$ \KwTo $w$}{\label{forins}
+% $\Left \leftarrow \FindCompress{$I[i,j-1]$}$\;
+% $\Up \leftarrow \FindCompress{$I[i-1,]$}$\;
+% $\This \leftarrow \FindCompress{$I[i,j]$}$\;
+% \If(\tcp*[h]{O(\Left,\This)==1}){\Left compatible with \This}{\label{lt}
+% \lIf{$\Left < \This$}{$\Union{\Left,\This}$}
+% \lElse{$\Union{\This,\Left}$}
+% }
+% \If(\tcp*[f]{O(\Up,\This)==1}){\Up compatible with \This}{\label{ut}
+% \lIf{$\Up < \This$}{$\Union{\Up,\This}$}
+% \tcp{\This is put under \Up to keep tree as flat as possible}\label{cmt}
+% \lElse{$\Union{\This,\Up}$}\tcp*[r]{\This{} linked to \Up}\label{lelse}
+% }
+% }
+% \lForEach{element $e$ of the line $i$}{\FindCompress{p}}
+% }
+% \caption{disjoint decomposition}\label{algo_disjdecomp}
+% \end{algorithm}
+
+\subsection{其他环境的使用}
+
+其他三种环境没有选项,可以直接使用,比如 \lstinline{example} 环境的使用方法与效果:
+\begin{lstlisting}
+\begin{example}
+ This is the content of example environment.
+\end{example}
+\end{lstlisting}
+
+这几个都是同一类环境,区别在于
+
+\begin{itemize}
+ \item 示例环境(example)、练习(exercise)与例题(problem)章节自动编号;
+ \item 注意(note),练习(exercise)环境有提醒引导符;
+ \item 结论(conclusion)等环境都是普通段落环境,引导词加粗。
+\end{itemize}
+
+\section{列表环境}
+本模板借助于 \lstinline{tikz} 定制了 \lstinline{itemize} 和 \lstinline{enumerate} 环境,其中 \lstinline{itemize} 环境修改了 3 层嵌套,而 \lstinline{enumerate} 环境修改了 4 层嵌套(仅改变颜色)。示例如下\\[2ex]
+\begin{minipage}[b]{0.49\textwidth}
+ \begin{itemize}
+ \item first item of nesti;
+ \item second item of nesti;
+ \begin{itemize}
+ \item first item of nestii;
+ \item second item of nestii;
+ \begin{itemize}
+ \item first item of nestiii;
+ \item second item of nestiii.
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{minipage}
+\begin{minipage}[b]{0.49\textwidth}
+ \begin{enumerate}
+ \item first item of nesti;
+ \item second item of nesti;
+ \begin{enumerate}
+ \item first item of nestii;
+ \item second item of nestii;
+ \begin{enumerate}
+ \item first item of nestiii;
+ \item second item of nestiii.
+ \end{enumerate}
+ \end{enumerate}
+ \end{enumerate}
+\end{minipage}
+
+\section{参考文献}
+
+此模板使用了 \hologo{biber} 来生成参考文献,也即使用 \lstinline{biblatex} 宏包,在中文示例中,使用了 \lstinline{gbt7714} 宏包。参考文献示例:\cite{cn1,en2,en3} 使用了中国一个大型的 P2P 平台(人人贷)的数据来检验男性投资者和女性投资者在投资表现上是否有显著差异。
+
+你可以在谷歌学术,Mendeley,Endnote 中获得文献条目(bib item),然后把它们添加到 \lstinline{reference.bib} 中。在文中引用的时候,引用它们的键值(bib key)即可。注意需要在编译的过程中添加 \hologo{biber} 编译。
+
+为了方便文献样式修改,模板引入了 \lstinline{bibstyle} 和 \lstinline{citestyle} 选项,默认均为数字格式(numeric),如果需要设置为国标 GB7714-2015,需要使用:
+\begin{lstlisting}
+ \documentclass[citestyle=gb7714-2015, bibstyle=gb7714-2015]{elegantbook}
+\end{lstlisting}
+
+如果需要添加排序方式,可以在导言区加入
+\begin{lstlisting}
+ \ExecuteBibliographyOptions{sorting=ynt}
+\end{lstlisting}
+
+启用国标之后,可以加入 \lstinline{sorting=gb7714-2015}。
+
+\section{添加序章}
+
+如果你想在第一章前面添序章,不改变原本章节序号,可以在第一章内容前面使用
+\begin{lstlisting}
+\chapter*{Introduction}
+\markboth{Introduction}{Introduction}
+The content of introduction.
+\end{lstlisting}
+
+\section{目录选项与深度}
+本模板添加了一个目录选项 \lstinline{toc},可以设置目录为单栏(\lstinline{onecol})和双栏(\lstinline{twocol})显示,比如双栏显示可以使用
+\begin{lstlisting}
+\documentclass[twocol]{elegantbook}
+\documentclass[toc=twocol]{elegantbook}
+\end{lstlisting}
+
+默认本模板目录深度为 1,你可以在导言区使用
+\begin{lstlisting}
+\setcounter{tocdepth}{2}
+\end{lstlisting}
+将其修改为 2 级目录(章与节)显示。
+
+
+\section{章节摘要}
+模板新增了一个章节摘要环境(introduction),使用示例
+\begin{lstlisting}
+\begin{introduction}
+ \item Definition of Theorem
+ \item Ask for help
+ \item Optimization Problem
+ \item Property of Cauchy Series
+ \item Angle of Corner
+\end{introduction}
+\end{lstlisting}
+效果如下:
+\begin{introduction}
+ \item Definition of Theorem
+ \item Ask for help
+ \item Optimization Problem
+ \item Property of Cauchy Series
+ \item Angle of Corner
+\end{introduction}
+
+环境的标题文字可以通过这个环境的可选参数进行修改,修改方法为:
+\begin{lstlisting}
+\begin{introduction}[Brief Introduction]
+...
+\end{introduction}
+\end{lstlisting}
+
+\section{章后习题}
+前面我们介绍了例题和练习两个环境,这里我们再加一个,章后习题(\lstinline{problemset})环境,用于在每一章结尾,显示本章的练习。使用方法如下
+
+\begin{lstlisting}
+\begin{problemset}
+ \item exercise 1
+ \item exercise 2
+ \item exercise 3
+\end{problemset}
+\end{lstlisting}
+
+
+效果如下:
+\begin{problemset}
+ \item exercise 1
+ \item exercise 2
+ \item exercise 3
+ \item 测试数学公式
+ \begin{equation}
+ a^2+b^2=c_{2_{i}} (1,2) [1,23]
+ \end{equation}
+\end{problemset}
+
+\begin{remark}
+如果你想把 \lstinline{problemset} 环境的标题改为其他文字,你可以类似于 introduction 环境修改 problemset 的可选参数。另外,目前这个环境会自动出现在目录中,但是不会出现在页眉页脚信息中(待解决)。
+\end{remark}
+
+\begin{solution}
+如果你想把 \lstinline{problemset} 环境的标题改为其他文字,你可以类似于 introduction 环境修改 problemset 的可选参数。另外,目前这个环境会自动出现在目录中,但是不会出现在页眉页脚信息中(待解决)。
+\end{solution}
+
+\section{旁注}
+
+在 3.08 版本中,我们引入了 旁注设置选项 \lstinline{marginpar=margintrue} 以及测试命令 \lstinline{\elegantpar} ,但是由此带来一堆问题。我们决定在 3.09 版本中将其删除,并且,在旁注命令得到大幅度优化之前,不会将此命令再次引入书籍模板中。对此造成各位用户的不方便,非常抱歉!不过我们保留了 \lstinline{marginpar} 这个选项,你可以使用 \lstinline{marginpar=margintrue} 获得保留右侧旁注的版面设计。然后使用系统自带的 \lstinline{\marginpar} 或者 \lstinline{marginnote} 宏包的 \lstinline{\marginnote} 命令。
+
+\begin{remark}
+在使用旁注的时候,需要注意的是,文本和公式可以直接在旁注中使用。
+
+\begin{lstlisting}
+% text
+\marginpar{margin paragraph text}
+
+% equation
+\marginpar{
+ \begin{equation}
+ a^2 + b^2 = c^2
+ \end{equation}
+}
+\end{lstlisting}
+
+但是浮动体(表格、图片)需要注意,不能用浮动体环境,需要使用直接插图命令或者表格命令环境。然后使用 \lstinline{\captionof} 为其设置标题。为了得到居中的图表,可以使用 \lstinline{\centerline} 命令或者 \lstinline{center} 环境。更多详情请参考:\href{https://tex.stackexchange.com/questions/5583/caption-of-figure-in-marginpar-and-caption-of-wrapfigure-in-margin}{Caption of Figure in Marginpar}。
+
+\begin{lstlisting}
+% graph with centerline command
+\marginpar{
+ \centerline{
+ \includegraphics[width=0.2\textwidth]{logo.png}
+ }
+ \captionof{figure}{your figure caption}
+}
+
+% graph with center environment
+\marginpar{
+ \begin{center}
+ \includegraphics[width=0.2\textwidth]{logo.png}
+ \captionof{figure}{your figure caption}
+ \end{center}
+}
+\end{lstlisting}
+
+\end{remark}
+
+\chapter{字体选项}
+字体选项独立成章的原因是,我们希望本模板的用户关心模板使用的字体,知晓自己使用的字体以及遇到字体相关的问题能更加便捷地找到答案。
+
+\textcolor{red}{\bfseries 重要提示}:从 3.10 版本更新之后,沿用至今的 newtx 系列字体被重新更改为 cm 字体。并且新增中文字体(\lstinline{chinesefont})选项。
+
+\section{数学字体选项}
+
+本模板定义了一个数学字体选项(\lstinline{math}),可选项有三个:
+\begin{enumerate}
+ \item \lstinline{math=cm}(默认),使用 \LaTeX{} 默认数学字体(推荐,无需声明);
+ \item \lstinline{math=newtx},使用 \lstinline{newtxmath} 设置数学字体(潜在问题比较多)。
+ \item \lstinline{math=mtpro2},使用 \lstinline{mtpro2} 宏包设置数学字体,要求用户已经成功安装此宏包。
+\end{enumerate}
+
+\section{使用 newtx 系列字体}
+
+如果需要使用原先版本的 \lstinline{newtx} 系列字体,可以通过显示声明数学字体:
+
+\begin{lstlisting}
+\documentclass[math=newtx]{elegantbook}
+\end{lstlisting}
+
+\subsection{连字符}
+
+如果使用 \lstinline{newtx} 系列字体宏包,需要注意下连字符的问题。
+\begin{equation}
+ \int_{R^q} f(x,y) dy.\emph{of\kern0pt f}
+\end{equation}
+的代码为
+\begin{lstlisting}
+\begin{equation}
+ \int_{R^q} f(x,y) dy.\emph{of \kern0pt f}
+\end{equation}
+\end{lstlisting}
+
+\subsection{宏包冲突}
+
+另外在 3.08 版本中,有用户反馈模板在和 \lstinline{yhmath} 以及 \lstinline{esvect} 等宏包搭配使用的时候会出现报错:
+\begin{lstlisting}
+LaTeX Error:
+ Too many symbol fonts declared.
+\end{lstlisting}
+
+原因是在使用 \lstinline{newtxmath} 宏包时,重新定义了数学字体用于大型操作符,达到了 {\heiti 最多 16 个数学字体} 的上限,在调用其他宏包的时候,无法新增数学字体。为了减少调用非常用宏包,在此给出如何调用 \lstinline{yhmath} 以及 \lstinline{esvect} 宏包的方法。
+
+请在 \lstinline{elegantbook.cls} 内搜索 \lstinline{yhmath} 或者 \lstinline{esvect},将你所需要的宏包加载语句\textit{取消注释}即可。
+\begin{lstlisting}
+%%% use yhmath pkg, uncomment following code
+% \let\oldwidering\widering
+% \let\widering\undefined
+% \RequirePackage{yhmath}
+% \let\widering\oldwidering
+
+%%% use esvect pkg, uncomment following code
+% \RequirePackage{esvect}
+\end{lstlisting}
+
+\section{中文字体选项}
+模板从 3.10 版本提供中文字体选项 \lstinline{chinesefont},可选项有
+\begin{enumerate}
+\item \lstinline{ctexfont}:默认选项,使用 \lstinline{ctex} 宏包根据系统自行选择字体,可能存在字体缺失的问题,更多内容参考 \lstinline{ctex} 宏包\href{https://ctan.org/pkg/ctex}{官方文档}\footnote{可以使用命令提示符,输入 \lstinline{texdoc ctex} 调出本地 \lstinline{ctex} 宏包文档}。
+\item \lstinline{founder}:方正字体选项,调用 \lstinline{ctex} 宏包并且使用 \lstinline{fontset=none} 选项,然后设置字体为方正四款免费字体,方正字体下载注意事项见后文。
+\item \lstinline{nofont}:调用 \lstinline{ctex} 宏包并且使用 \lstinline{fontset=none} 选项,不设定中文字体,用户可以自行设置中文字体,具体见后文。
+\end{enumerate}
+
+\begin{remark}
+ 使用 \lstinline{founder} 选项或者 \lstinline{nofont} 时,必须使用 \hologo{XeLaTeX} 进行编译。
+\end{remark}
+
+\subsection{方正字体选项}
+由于使用 \lstinline{ctex} 宏包默认调用系统已有的字体,部分系统字体缺失严重,因此,用户希望能够使用其它字体,我们推荐使用方正字体。方正的{\songti 方正书宋}、{\heiti 方正黑体}、{\kaishu 方正楷体}、{\fangsong 方正仿宋}四款字体均可免费试用,且可用于商业用途。用户可以自行从\href{http://www.foundertype.com/}{方正字体官网}下载此四款字体,在下载的时候请\textbf{务必}注意选择 GBK 字符集,也可以使用 \href{https://www.latexstudio.net/}{\LaTeX{} 工作室}提供的\href{https://pan.baidu.com/s/1BgbQM7LoinY7m8yeP25Y7Q}{方正字体,提取码为:njy9} 进行安装。安装时,{\kaishu Win 10 用户请右键选择为全部用户安装,否则会找不到字体。}
+
+\begin{figure}[!htb]
+\centering
+\includegraphics[width=0.9\textwidth]{founder.png}
+\end{figure}
+
+\subsection{其他中文字体}
+如果你想完全自定义字体\footnote{这里仍然以方正字体为例。},你可以选择 \lstinline{chinesefont=nofont},然后在导言区设置
+\begin{lstlisting}
+\setCJKmainfont[BoldFont={FZHei-B01},ItalicFont={FZKai-Z03}]{FZShuSong-Z01}
+\setCJKsansfont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZHei-B01}
+\setCJKmonofont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZFangSong-Z02}
+\setCJKfamilyfont{zhsong}{FZShuSong-Z01}
+\setCJKfamilyfont{zhhei}{FZHei-B01}
+\setCJKfamilyfont{zhkai}{FZKai-Z03}
+\setCJKfamilyfont{zhfs}{FZFangSong-Z02}
+\newcommand*{\songti}{\CJKfamily{zhsong}}
+\newcommand*{\heiti}{\CJKfamily{zhhei}}
+\newcommand*{\kaishu}{\CJKfamily{zhkai}}
+\newcommand*{\fangsong}{\CJKfamily{zhfs}}
+\end{lstlisting}
+
+\chapter{ElegantBook 写作示例}
+
+\begin{introduction}
+ \item 积分定义~\ref{def:int}
+ \item Fubini 定理~\ref{thm:fubi}
+ \item 最优性原理~\ref{pro:max}
+ \item 柯西列性质~\ref{property:cauchy}
+ \item 韦达定理
+\end{introduction}
+
+\section{Lebesgue 积分}
+在前面各章做了必要的准备后,本章开始介绍新的积分。在 Lebesgue 测度理论的基础上建立了 Lebesgue 积分,其被积函数和积分域更一般,可以对有界函数和无界函数统一处理。正是由于 Lebesgue 积分的这些特点,使得 Lebesgue 积分比 Riemann 积分具有在更一般条件下的极限定理和累次积分交换积分顺序的定理,这使得 Lebesgue 积分不仅在理论上更完善,而且在计算上更灵活有效。
+
+Lebesgue 积分有几种不同的定义方式。我们将采用逐步定义非负简单函数,非负可测函数和一般可测函数积分的方式。
+
+由于现代数学的许多分支如概率论、泛函分析、调和分析等常常用到一般空间上的测度与积分理论,在本章最后一节将介绍一般的测度空间上的积分。
+
+\subsection{积分的定义}
+
+我们将通过三个步骤定义可测函数的积分。首先定义非负简单函数的积分。以下设 $E$ 是 $\mathcal{R}^n$ 中的可测集。
+
+\begin{definition}[可积性] \label{def:int}
+设 $ f(x)=\sum\limits_{i=1}^{k} a_i \chi_{A_i}(x)$ 是 $E$ 上的非负简单函数,其中 $\{A_1,A_2,\ldots,A_k\}$ 是 $E$ 上的一个可测分割,$a_1,a_2,\ldots,a_k$ 是非负实数。定义 $f$ 在 $E$ 上的积分为 $\int_{a}^b f(x)$
+\begin{equation}
+ \label{inter}
+ \int_{E} f dx = \sum_{i=1}^k a_i m(A_i) \pi \alpha\beta\sigma\gamma\nu\xi\epsilon\varepsilon. \oint_{a}^b\ointop_{a}^b\prod_{i=1}^n
+\end{equation}
+一般情况下 $0 \leq \int_{E} f dx \leq \infty$。若 $\int_{E} f dx < \infty$,则称 $f$ 在 $E$ 上可积。
+\end{definition}
+
+一个自然的问题是,Lebesgue 积分与我们所熟悉的 Riemann 积分有什么联系和区别?在 4.4 在我们将详细讨论 Riemann 积分与 Lebesgue 积分的关系。这里只看一个简单的例子。设 $D(x)$ 是区间 $[0,1]$ 上的 Dirichlet 函数。即 $D(x)=\chi_{Q_0}(x)$,其中 $Q_0$ 表示 $[0,1]$ 中的有理数的全体。根据非负简单函数积分的定义,$D(x)$ 在 $[0,1]$ 上的 Lebesgue 积分为
+\begin{equation}
+ \label{inter2}
+ \int_0^1 D(x)dx = \int_0^1 \chi_{Q_0} (x) dx = m(Q_0) = 0
+\end{equation}
+即 $D(x)$ 在 $[0,1]$ 上是 Lebesgue 可积的并且积分值为零。但 $D(x)$ 在 $[0,1]$ 上不是 Riemann 可积的。
+
+
+有界变差函数是与单调函数有密切联系的一类函数。有界变差函数可以表示为两个单调递增函数之差。与单调函数一样,有界变差函数几乎处处可导。与单调函数不同,有界变差函数类对线性运算是封闭的,它们构成一线空间。练习题 \ref{exer:43} 是一个性质的证明。
+
+\begin{exercise}\label{exer:43}
+设 $f \notin\in L(\mathcal{R}^1)$,$g$ 是 $\mathcal{R}^1$ 上的有界可测函数。证明函数
+\begin{equation}
+ \label{ex:1}
+ I(t) = \int_{\mathcal{R}^1} f(x+t)g(x)dx \quad t \in \mathcal{R}^1
+\end{equation}
+是 $\mathcal{R}^1$ 上的连续函数。
+\end{exercise}
+
+\begin{solution}
+即 $D(x)$ 在 $[0,1]$ 上是 Lebesgue 可积的并且积分值为零。但 $D(x)$ 在 $[0,1]$ 上不是 Riemann 可积的。
+\end{solution}
+
+\begin{proof}
+即 $D(x)$ 在 $[0,1]$ 上是 Lebesgue 可积的并且积分值为零。但 $D(x)$ 在 $[0,1]$ 上不是 Riemann 可积的。
+\end{proof}
+
+\begin{theorem}[Fubini 定理] \label{thm:fubi}
+(1)若 $f(x,y)$ 是 $\mathcal{R}^p\times\mathcal{R}^q$ 上的非负可测函数,则对几乎处处的 $x\in \mathcal{R}^p$,$f(x,y)$ 作为 $y$ 的函数是 $\mathcal{R}^q$ 上的非负可测函数,$g(x)=\int_{\mathcal{R}^q}f(x,y) dy$ 是 $\mathcal{R}^p$ 上的非负可测函数。并且
+\begin{equation}
+ \label{eq:461}
+ \int_{\mathcal{R}^p\times\mathcal{R}^q} f(x,y) dxdy=\int_{\mathcal{R}^p}\left(\int_{\mathcal{R}^q}f(x,y)dy\right)dx.
+\end{equation}
+
+(2)若 $f(x,y)$ 是 $\mathcal{R}^p\times\mathcal{R}^q$ 上的可积函数,则对几乎处处的 $x\in\mathcal{R}^p$,$f(x,y)$ 作为 $y$ 的函数是 $\mathcal{R}^q$ 上的可积函数,并且 $g(x)=\int_{\mathcal{R}^q}f(x,y) dy$ 是 $\mathcal{R}^p$ 上的可积函数。而且~\ref{eq:461} 成立。
+\end{theorem}
+
+\ref{thm:fubi}
+
+\begin{note}
+在本模板中,引理(lemma),推论(corollary)的样式和定理~\ref{thm:fubi} 的样式一致,包括颜色,仅仅只有计数器的设置不一样。
+\end{note}
+
+我们说一个实变或者复变量的实值或者复值函数是在区间上平方可积的,如果其绝对值的平方在该区间上的积分是有限的。所有在勒贝格积分意义下平方可积的可测函数构成一个希尔伯特空间,也就是所谓的 $L^2$ 空间,几乎处处相等的函数归为同一等价类。形式上,$L^2$ 是平方可积函数的空间和几乎处处为 0 的函数空间的商空间。
+
+\begin{proposition}[最优性原理] \label{pro:max}
+如果 $u^*$ 在 $[s,T]$ 上为最优解,则 $u^*$ 在 $[s, T]$ 任意子区间都是最优解,假设区间为 $[t_0, t_1]$ 的最优解为 $u^*$ ,则 $u(t_0)=u^{*}(t_0)$,即初始条件必须还是在 $u^*$ 上。
+\end{proposition}
+
+我们知道最小二乘法可以用来处理一组数据,可以从一组测定的数据中寻求变量之间的依赖关系,这种函数关系称为经验公式。本课题将介绍最小二乘法的精确定义及如何寻求点与点之间近似成线性关系时的经验公式。假定实验测得变量之间的 $n$ 个数据,则在平面上,可以得到 $n$ 个点,这种图形称为 “散点图”,从图中可以粗略看出这些点大致散落在某直线近旁, 我们认为其近似为一线性函数,下面介绍求解步骤。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{scatter.jpg}
+ \caption{散点图示例 $\hat{y}=a+bx$ \label{fig:scatter}}
+\end{figure}
+
+以最简单的一元线性模型来解释最小二乘法。什么是一元线性模型呢?监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归。回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面。
+
+\begin{property}\label{property:cauchy}
+柯西列的性质
+\begin{enumerate}
+\item $\{x_k\}$ 是柯西列,则其子列 $\{x_k^i\}$ 也是柯西列。
+\item $x_k\in \mathcal{R}^n$,$\rho(x,y)$ 是欧几里得空间,则柯西列收敛,$(\mathcal{R}^n,\rho)$ 空间是完备的。
+\end{enumerate}
+\end{property}
+
+\begin{conclusion}
+回归分析(regression analysis) 是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
+\end{conclusion}
+
+\begin{problemset}
+\item 设 $A$ 为数域 $K$ 上的 $n$ 级矩阵。证明:如果 $K^n$ 中任意非零列向量都是 $A$ 的特征向量,则 $A$ 一定是数量矩阵。
+\item 证明:不为零矩阵的幂零矩阵不能对角化。
+\item 设 $A = (a_{ij})$ 是数域 $K$ 上的一个 $n$ 级上三角矩阵,证明:如果 $a_{11} = a_{22} = \cdots = a_{nn}$,并且至少有一个 $a_{kl} \not = 0 (k < l)$,则 $A$ 一定不能对角化。
+\end{problemset}
+
+\chapter{常见问题集}
+
+我们根据用户社区反馈整理了下面一些常见的问题,用户在遇到问题时,应当首先查阅本手册和本部分的常见的问题。
+
+\begin{enumerate}[itemsep=1.5ex]
+ \item \question{有没有办法章节用“第一章,第一节,(一)”这种?}
+ 见前文介绍,可以使用 \lstinline{scheme=chinese} 设置。
+ \item \question{大佬,我想把正文字体改为亮色,背景色改为黑灰色。}
+ 页面颜色可以使用 \lstinline{\pagecolor} 命令设置,文本命令可以参考\href{https://tex.stackexchange.com/questions/278544/xcolor-what-is-the-equivalent-of-default-text-color}{这里}进行设置。
+ \item \question{\lstinline[breaklines]{Package ctex Error: CTeX fontset `Mac' is unavailable.}}
+ 在 Mac 系统下,中文编译请使用 \hologo{XeLaTeX}。
+ \item \question{\lstinline{! LaTeX Error: Unknown option `scheme=plain' for package `ctex'.}}
+ 你用的 C\TeX{} 套装吧?这个里面的 \lstinline{ctex} 宏包已经是已经是 10 年前的了,与本模板使用的 \lstinline{ctex} 宏集有很大区别。不建议 C\TeX{} 套装了,请卸载并安装 \TeX{} Live 2021。
+ \item \question{我该使用什么版本?}
+ 请务必使用\href{https://github.com/ElegantLaTeX/ElegantBook/releases}{最新正式发行版},发行版间不定期可能会有更新(修复 bug 或者改进之类),如果你在使用过程中没有遇到问题,不需要每次更新\href{https://github.com/ElegantLaTeX/ElegantBook/archive/master.zip}{最新版},但是在发行版更新之后,请尽可能使用最新版(发行版)!最新发行版可以在 GitHub 或者 \TeX{} Live 2021 内获取。
+ \item \question{我该使用什么编辑器?}
+ 你可以使用 \TeX{} Live 2021 自带的编辑器 \TeX{}works 或者使用 \TeX{}studio,\TeX works 的自动补全,你可以参考我们的总结 \href{https://github.com/EthanDeng/texworks-autocomplete}{\TeX works 自动补全}。推荐使用 \TeX{} Live 2021 + \TeX{}studio。我自己用 VS Code 和 Sublime Text,相关的配置说明,请参考 \href{https://github.com/EthanDeng/vscode-latex}{\LaTeX{} 编译环境配置:Visual Studio Code 配置简介} 和 \href{https://github.com/EthanDeng/sublime-text-latex}{Sublime Text 搭建 \LaTeX{} 编写环境}。
+ \item \question{您好,我们想用您的 ElegantBook 模板写一本书。关于机器学习的教材,希望获得您的授权,谢谢您的宝贵时间。}
+ 模板的使用修改都是自由的,你们声明模板来源以及模板地址(GitHub 地址)即可,其他未尽事宜按照开源协议 LPPL-1.3c。做好之后,如果方便的话,可以给我们一个链接,我把你们的教材放在 Elegant\LaTeX{} 用户作品集里。
+ \item \question{请问交叉引用是什么?}
+ 本群和本模板适合有一定 \LaTeX{} 基础的用户使用,新手请先学习 \LaTeX{} 的基础,理解各种概念,否则你将寸步难行。
+ \item \question{定义等环境中无法使用加粗命令么?}
+ 是这样的,默认中文并没加粗命令,如果你想在定义等环境中使用加粗命令,请使用 \lstinline{\heiti} 等字体命令,而不要使用 \lstinline{\textbf}。或者,你可以将 \lstinline|\textbf| 重新定义为 \lstinline|\heiti|。英文模式不存在这个问题。
+ \item \question{代码高亮环境能用其他语言吗?}
+ 可以的,ElegantBook 模板用的是 \lstinline{listings} 宏包,你可以在环境(\lstinline{lstlisting})之后加上语言(比如 Python 使用 \lstinline{language=Python} 选项),全局语言修改请使用 \lstinline{lsset} 命令,更多信息请参考宏包文档。
+ \item \question{群主,什么时候出 Beamer 的模板(主题),ElegantSlide 或者 ElegantBeamer?}
+ 由于 Beamer 中有一个很优秀的主题 \href{https://github.com/matze/mtheme}{Metropolis}。后续确定不会再出任何主题/模板,请大家根据需要修改已有主题。
+\end{enumerate}
+
+\chapter{版本更新历史}
+
+根据用户的反馈,我们不断修正和完善模板。截止到此次更新,ElegantBook 模板在 GitHub 上有将近 100 次提交,正式发行版本(release)有 17 次。由于 3.00 之前版本与现在版本差异非常大,在此不列出 3.00 之前的更新内容。
+
+
+\datechange{2021/05/02}{版本 4.1 正式发布。}
+
+\begin{change}
+ \item \textbf{重要改动}:由原先的 \hologo{BibTeX} 改为 biblatex 编译方式(后端为 \lstinline{biber}),请注意两者之间的差异;
+ \item \textbf{重要改进}:修改对于定理写法兼容方式,提高数学公式代码的兼容性;
+ \item 页面设置改动,默认页面更宽;方便书写和阅读;
+ \item 支持目录文字以及页码跳转;
+ \item 不再维护 \hologo{pdfLaTeX} 中文支持方式,请务必使用 \hologo{XeLaTeX} 编译中文文稿。
+ \item 增加多个语言选项,法语 \lstinline{lang=fr}、荷兰语 \lstinline{lang=nl}、匈牙利语 \lstinline{lang=hu}、西班牙语 \lstinline{lang=es}、蒙古语 \lstinline{lang=mn} 等。
+\end{change}
+
+
+\datechange{2020/04/12}{版本 3.11 正式发布,\textcolor{red}{此版本为 3.x 最后版本。}}
+
+\begin{change}
+ \item \textbf{重要修正}:修复因为 \lstinline{gbt7714} 宏包更新导致的 \lstinline{natbib option clash} 错误;
+ \item 由于 \lstinline{pgfornament} 宏包未被 \TeX{} Live 2020 收录,因此删除 base 相关的内容;
+ \item 修复部分环境的空格问题;
+ \item 增加了意大利语言选项 \lstinline{lang=it}。
+\end{change}
+
+
+\datechange{2020/02/10}{版本 3.10 正式发布}
+
+\begin{change}
+ \item 增加数学字体选项 \lstinline{math},可选项为 \lstinline{newtx} 和 \lstinline{cm}。\\
+ \textbf{重要提示}:原先通过 \lstinline{newtxmath} 宏包设置的数学字体改为 \LaTeX{} 默认数学字体,如果需要保持原来的字体,需要显式声明数学字体(\lstinline{math=newtx});
+ \item 新增中文字体选项 \lstinline{chinesefont},可选项为 \lstinline{ctexfont}、\lstinline{founder} 和 \lstinline{nofont}。
+ \item 将封面作者信息设置为可选,并且增加自定义信息命令 \lstinline{\bioinfo};
+ \item 在说明文档中增加版本历史,新增 \lstinline{\datechange} 命令和 \lstinline{change} 环境;
+ \item 增加汉化章节选项 \lstinline{scheme},可选项为汉化 \lstinline{chinese};
+ \item 由于 \lstinline{\lvert} 问题已经修复,重新调整 \lstinline{ctex} 宏包和 \lstinline{amsmath} 宏包位置。
+ \item 修改页眉设置,去除了 \lstinline{\lastpage} 以避免 page anchor 问题,加入 \lstinline{\frontmatter}。
+ \item 修改参考文献选项 \lstinline{cite},可选项为数字 \lstinline{numbers}、 作者-年份 \lstinline{authoryear} 以及上标 \lstinline{super}。
+ \item 新增参考文献样式选项 \lstinline{bibstyle},并将英文模式下参考文献样式 \lstinline{apalike} 设置为默认值,中文仍然使用 \lstinline{gbt7714} 宏包设置。
+\end{change}
+
+\datechange{2019/08/18}{版本 3.09 正式发布}
+
+\begin{change}
+ \item \lstinline{\elegantpar} 存在 bug,删除 \lstinline{\elegantpar} 命令,建议用户改用 \lstinline{\marginnote} 和 \lstinline{\marginpar} 旁注命令。
+ \item 积分操作符统一更改为 \lstinline{esint} 宏包设置;
+ \item 新增目录选项 \lstinline{toc},可选项为单栏 \lstinline{onecol} 和双栏 \lstinline{twocol};
+ \item 手动增加参考文献选项 \lstinline{cite},可选项为上标形式 \lstinline{super};
+ \item 修正章节习题(\lstinline{problemset})环境。
+\end{change}
+
+\datechange{2019/05/28}{版本 3.08 正式发布}
+
+\begin{change}
+ \item 修复 \lstinline{\part} 命令。
+ \item 引入 Note 模板中的 \lstinline{pad} 选项 \lstinline{device=pad}。
+ \item 数学字体加入 \lstinline{mtpro2} 可选项 \lstinline{math=mtpro2},使用免费的 \lstinline{lite} 子集。
+ \item 将参考文献默认显示方式 \lstinline{authoyear} 改为 \lstinline{numbers}。
+ \item 引入旁注命令 \lstinline{\marginpar}(测试)。
+ \item 新增章节摘要环境 \lstinline{introduction}。
+ \item 新增章节习题环境 \lstinline{problemset}。
+ \item 将 \lstinline{\equote} 重命名为 \lstinline{\extrainfo}。
+ \item 完善说明文档,增加致谢部分。
+\end{change}
+
+\datechange{2019/04/15}{版本 3.07 正式发布}
+
+\begin{change}
+ \item 删除中英文自定义字体总设置。
+ \item 新增颜色主题,并将原绿色默认主题设置为蓝色 \lstinline{color=blue}。
+ \item 引入隐藏装饰图案选项 \lstinline{base},可选项有显示 \lstinline{show} 和隐藏 \lstinline{hide}。
+ \item 新增定理模式 \lstinline{mode},可选项有简单模式 \lstinline{simple} 和炫彩模式 \lstinline{fancy}。
+ \item 新增隐藏证明、答案等环境的选项 \lstinline{result=noanswer}。
+\end{change}
+
+\datechange{2019/02/25}{版本 3.06 正式发布}
+
+\begin{change}
+ \item 删除水印。
+ \item 新封面,新装饰图案。
+ \item 添加引言使用说明。
+ \item 修复双面 \lstinline{twoside}。
+ \item 美化列表环境。
+ \item 增加 \lstinline{\subsubsection} 的设置。
+ \item 将模板拆分成中英文语言模式。
+ \item 使用 \lstinline{lstlisting} 添加代码高亮。
+ \item 增加定理类环境使用说明。
+\end{change}
+
+\datechange{2019/01/22}{版本 3.05 正式发布}
+
+\begin{change}
+ \item 添加 \lstinline{xeCJK} 宏包中文支持方案。
+ \item 修复模板之前对 Ti\textit{k}Z 单位的改动。
+ \item 更新 logo 图。
+\end{change}
+
+\datechange{2019/01/15}{版本 3.04 正式发布}
+
+\begin{change}
+ \item 格式化模板代码。
+ \item 增加 \lstinline{\equote} 命令。
+ \item 修改 \lstinline{\date}。
+\end{change}
+
+\datechange{2019/01/08}{版本 3.03 正式发布}
+
+\begin{change}
+ \item 修复附录章节显示问题。
+ \item 小幅优化封面代码。
+\end{change}
+
+\datechange{2018/12/31}{版本 3.02 正式发布}
+
+\begin{change}
+ \item 修复名字系列命令自定义格式时出现的空格问题,比如 \lstinline{\listfigurename}。
+ \item 英文定理类名字改为中文名。
+ \item 英文结构名改为中文。
+\end{change}
+
+\datechange{2018/12/16}{版本 3.01 正式发布}
+
+\begin{change}
+ \item 调整 \lstinline{ctex} 宏包。
+ \item 说明文档增加更新内容。
+\end{change}
+
+\datechange{2018/12/06}{版本 3.00 正式发布}
+
+\begin{change}
+ \item 删除 \lstinline{mathpazo} 数学字体选项。
+ \item 添加邮箱命令 \lstinline{\mailto}。
+ \item 修改英文字体为 \lstinline{newtx} 系列,另外大型操作符号维持 cm 字体。
+ \item 中文字体改用 \lstinline{ctex} 宏包自动设置。
+ \item 删除 \lstinline{xeCJK} 字体设置,原因是不同系统字体不方便统一。
+ \item 定理换用 \lstinline{tcolobox} 宏包定义,并基本维持原有的定理样式,优化显示效果,支持跨页;定理类名字重命名,如 etheorem 改为 theorem 等等。
+ \item 删去自定义的缩进命令 \lstinline{\Eindent}。
+ \item 添加参考文献宏包 \lstinline{natbib}。
+ \item 颜色名字重命名。
+\end{change}
+
+\nocite{*}
+\printbibliography
+\appendix
+
+\chapter{基本数学工具}
+
+
+本附录包括了计量经济学中用到的一些基本数学,我们扼要论述了求和算子的各种性质,研究了线性和某些非线性方程的性质,并复习了比例和百分数。我们还介绍了一些在应用计量经济学中常见的特殊函数,包括二次函数和自然对数,前 4 节只要求基本的代数技巧,第 5 节则对微分学进行了简要回顾;虽然要理解本书的大部分内容,微积分并非必需,但在一些章末附录和第 3 篇某些高深专题中,我们还是用到了微积分。
+
+\section{求和算子与描述统计量}
+
+\textbf{求和算子} 是用以表达多个数求和运算的一个缩略符号,它在统计学和计量经济学分析中扮演着重要作用。如果 $\{x_i: i=1, 2, \ldots, n\}$ 表示 $n$ 个数的一个序列,那么我们就把这 $n$ 个数的和写为:
+
+\begin{equation}
+\sum_{i=1}^n x_i \equiv x_1 + x_2 +\cdots + x_n
+\end{equation}
+
+
+
+\end{document}
diff --git a/elegantbook-cn.toc b/elegantbook-cn.toc
new file mode 100644
index 0000000..6802669
--- /dev/null
+++ b/elegantbook-cn.toc
@@ -0,0 +1,93 @@
+\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {1}Elegant\LaTeX {} 系列模板介绍}{1}{chapter.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.1}ElegantBook 更新说明}{1}{section.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.2}模板安装与更新}{1}{section.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.2.1}在线使用模板}{1}{subsection.1.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.2.2}本地免安装使用}{2}{subsection.1.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.2.3}发行版安装使用}{2}{subsection.1.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.2.4}更新问题}{2}{subsection.1.2.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.2.5}其他发行版本}{2}{subsection.1.2.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.3}关于提交}{2}{section.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {2}ElegantBook 设置说明}{3}{chapter.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.1}语言模式}{3}{section.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.2}设备选项}{3}{section.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.3}颜色主题}{3}{section.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.4}封面}{4}{section.2.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.4.1}封面个性化}{4}{subsection.2.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.4.2}封面图}{4}{subsection.2.4.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.4.3}徽标}{5}{subsection.2.4.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.4.4}自定义封面}{5}{subsection.2.4.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.5}章标标题}{5}{section.2.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.6}数学环境简介}{5}{section.2.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.6.1}定理类环境的使用}{6}{subsection.2.6.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.6.2}其他环境的使用}{6}{subsection.2.6.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.7}列表环境}{6}{section.2.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.8}参考文献}{7}{section.2.8}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.9}添加序章}{7}{section.2.9}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.10}目录选项与深度}{7}{section.2.10}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.11}章节摘要}{8}{section.2.11}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.12}章后习题}{8}{section.2.12}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{第 2{} 章\tmspace +\thickmuskip {.2777em}练习}{8}{section*.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.13}旁注}{9}{section.2.13}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {3}字体选项}{10}{chapter.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.1}数学字体选项}{10}{section.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.2}使用 newtx 系列字体}{10}{section.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.2.1}连字符}{10}{subsection.3.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.2.2}宏包冲突}{10}{subsection.3.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.3}中文字体选项}{11}{section.3.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.3.1}方正字体选项}{11}{subsection.3.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.3.2}其他中文字体}{11}{subsection.3.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {4}ElegantBook 写作示例}{13}{chapter.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {4.1}Lebesgue 积分}{13}{section.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.1}积分的定义}{13}{subsection.4.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{第 4{} 章\tmspace +\thickmuskip {.2777em}练习}{15}{section*.9}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {5}常见问题集}{16}{chapter.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {6}版本更新历史}{17}{chapter.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {A}基本数学工具}{20}{appendix.A}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {A.1}求和算子与描述统计量}{20}{section.A.1}%
diff --git a/elegantbook-en.tex b/elegantbook-en.tex
new file mode 100644
index 0000000..739a92f
--- /dev/null
+++ b/elegantbook-en.tex
@@ -0,0 +1,709 @@
+\documentclass[11pt,fancy]{elegantbook}
+
+\title{An Elegant \LaTeX{} Template for Books}
+\subtitle{Classic Elegant\LaTeX{} Template}
+
+\author{Ethan Deng \& Liam Huang}
+\institute{Elegant\LaTeX{} Program}
+\date{May. 2, 2021}
+\version{4.1}
+\bioinfo{Bio}{Information}
+
+\extrainfo{Victory won\rq t come to us unless we go to it. }
+
+\logo{logo-blue.png}
+\cover{cover.jpg}
+
+\definecolor{customcolor}{RGB}{32,178,170}
+\colorlet{coverlinecolor}{customcolor}
+
+
+\begin{document}
+
+\maketitle
+
+\frontmatter
+\tableofcontents
+
+\mainmatter
+
+\chapter{Elegant\LaTeX{} Templates}
+Elegant\LaTeX{} Program developers are intended to provide you beautiful, elegant, user-friendly templates. Currently, the Elegant\LaTeX{} is composed of \href{https://github.com/ElegantLaTeX/ElegantNote}{ElegantNote}, \href{https://github.com/ElegantLaTeX/ElegantBook}{ElegantBook}, \href{https://github.com/ElegantLaTeX/ElegantPaper}{ElegantPaper}, designed for typesetting notes, books, and working papers respectively. Latest releases are strongly recommended! This guide is aimed at briefly introducing the 101 of this template. For any other question, suggestion or comment, feel free to contact us on GitHub \href{https://github.com/ElegantLaTeX/ElegantBook/issues}{issues} or email us at \email{elegantlatex2e@gmail.com}.
+
+Contact Infos:
+\begin{itemize}
+ \item Homepage: \href{https://elegantlatex.org/}{https://elegantlatex.org/}
+ \item GitHub: \href{https://github.com/ElegantLaTeX/}{https://github.com/ElegantLaTeX/}
+ \item CTAN: \href{https://ctan.org/pkg/elegantbook}{https://ctan.org/pkg/elegantbook}
+ \item Wiki: \href{https://github.com/ElegantLaTeX/ElegantBook/wiki}{https://github.com/ElegantLaTeX/ElegantBook/wiki}
+ \item Download: \href{https://github.com/ElegantLaTeX/ElegantBook/releases}{release}, \href{https://github.com/ElegantLaTeX/ElegantBook/archive/master.zip}{latest version}
+ \item Weibo: Elegant\LaTeX{}
+ \item Wechat: Elegant\LaTeX{}
+ \item QQ: 692108391
+ \item Email: \email{elegantlatex2e@gmail.com}
+\end{itemize}
+
+
+
+\section{ElegantBook Updates}
+
+Version 4.1 is the first version of 3.x, we add support for biblatex, theorem, and multilingual translation. What\rq s new in this version:
+
+\begin{enumerate}
+ \item \textbf{! Big Change}: Change the bibliography method from \hologo{BibTeX} to biblatex(with backend \lstinline{biber});
+ \item \textbf{! Big Change}: Add support for the default theorem writing method (with optional name and label);
+ \item Add left and right space;
+ \item Support hyperlink from the text of TOC;
+ \item Remove the \hologo{pdfLaTeX} compatiblity check for Chinese.
+ \item Add multilingual support, for french \lstinline{lang=fr}, dutch \lstinline{lang=nl}, Hungarian \lstinline{lang=hu}, Spanish \lstinline{lang=es}, Mongolian \lstinline{lang=mn} etc.
+\end{enumerate}
+
+\section{Installation and Update}
+Both portable version and installation package are available, online usage is optional as well.
+
+\subsection{To Use Templates Online}
+Visit \href{https://www.overleaf.com/}{Overleaf} to use our template online anywhere and anytime without local installation. To find our template, search \lstinline{elegantlatex} in the \lstinline{templates} or simply visit \href{https://www.overleaf.com/latex/templates?addsearch=elegantlatex}{search result}, choose the template you prefer and \lstinline{Open as Template} to own a copy yourself to edit freely. To learn more about Overleaf, please refer to \href{https://www.overleaf.com/learn}{Documentation}.
+
+\begin{remark}
+ On Overleaf, please use \hologo{XeLaTeX} to compile articles in Chinese and \hologo{pdfLaTeX} to compile articles in English.
+\end{remark}
+
+\subsection{To Use Portable Version}
+For portable version, simply download lastest ElegantBook-master from GitHub or CTAN (to be more accurate, download \lstinline{elegantbook.cls}) and save the file(s) under your working directory. This way of installation is simple and convenient, but you have to manually update \lstinline{cls} now and then.
+
+
+\subsection{Update Templates}
+If you fail to update templates using \lstinline{tlshell}, please use cmd to update all the packages or switch to portable version instead.
+
+Use the following commands(administrator privileges) to update:
+\begin{lstlisting}
+tlmgr update --self
+tlmgr update --all
+\end{lstlisting}
+
+To learn more, please refer to \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my \TeX{} distribution?}
+
+\subsection{Other Release Versions}
+If you are a \TeX{} Live 2018/2019/2020 user and would like to update, the official solution is to uninstall the previous version. If you want to save the bother of uninstallation and re-installation, please copy \lstinline{elegantbook.cls} to the installation directory of \TeX{} Live 2021 (default: \lstinline|C:\texlive\2021\texmf-dist\tex\latex\elegantbook| ), run \lstinline{texhash} in cmd.
+
+\section{About Pull Request}
+For some reasons, pull requests will NOT by accepted since May 20, 2019. For those who want to help improve the templates, submit issues or clone to your own repository to modify under LPPL-1.3c.
+
+
+\chapter{ElegantBook Settings}
+
+This template is based on the Standard \LaTeX{} book class, so the options of book class work as well (Note that the option of papersize has no effect due to \lstinline{device} option). The default encoding is UTF-8 while \TeX{} Live is recommended. The test environment is Win10 + \TeX{} Live 2021, either \hologo{pdfLaTeX} or \hologo{XeLaTeX} works fine. \hologo{XeLaTeX} is preferred for Chinese articles.
+
+\section{Languages}
+We defined one option named \lstinline{lang} which has two basic values, \lstinline{lang=en} (default) , \lstinline{lang=cn}. Different values will alter the captions of figure/table, abstract name, refname, etc. You can use this option as
+\begin{lstlisting}
+\documentclass[en]{elegantbook}
+\documentclass[lang=en]{elegantbook}
+\end{lstlisting}
+
+Besides the two basic language translation, our user provide more options, here is a short brief introduction to these translation. Since I am not familiar with these languages, I can't guarantee that the translations are correct, please comment on GitHub if you have some questions.
+
+\begin{itemize}
+ \item Italian translation \lstinline{lang=it}, provided by \href{https://github.com/VincentMVV}{VincentMVV} , please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/85}{Italian translation};
+ \item French translation \lstinline{lang=fr}, provided by \href{https://github.com/abfek66}{abfek66} , please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/85}{Italian translation};
+ \item Dutch Translation \lstinline{lang=nl}, provided by \href{https://github.com/inktvis75}{inktvis75} , please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/108}{Dutch Translation};
+ \item Hungarian translation \lstinline{lang=hu}, provided by \href{https://github.com/palkotamas}{palkotamas}, please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/111}{Hungarian translation};
+ \item Deutsch translation \lstinline{lang=de}, provided by Lisa, please refer to\href{https://github.com/ElegantLaTeX/ElegantBook/issues/113}{Deutsch translation};
+ \item Spanish translation \lstinline{lang=es}, provided by Gustavo A. Corradi, please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/133}{Spanish translation};
+ \item Mongolian translation \lstinline{lang=mn}, provided by \href{https://github.com/Altantsooj}{Altantsooj}, please refer to \href{https://github.com/ElegantLaTeX/ElegantBook/issues/137}{Mongolian translation}.
+\end{itemize}
+
+\begin{remark}
+Chinese Characters are acceptable \textbf{ONLY} in \lstinline{lang=cn}.
+\end{remark}
+
+\section{Device Mode Option}
+The option for device (\lstinline{device}) was originally used in ElegantNote, now we include this option in ElegantBook\footnote{Pictures have to be modified accordingly.} as well. Activate iPad mode in the following way\footnote{Default size: normal, A4 paper.}:
+\begin{lstlisting}
+\documentclass[pad]{elegantbook} %or
+\documentclass[device=pad]{elegantbook}
+\end{lstlisting}
+
+\section{Color Themes}
+This template contains 5 color themes, i.e. \textcolor{structure1}{\lstinline{green}}\footnote{Original default theme.}, \textcolor{structure2}{\lstinline{cyan}}, \textcolor{structure3}{\lstinline{blue}}(default), \textcolor{structure4}{\lstinline{gray}}, \textcolor{structure5}{\lstinline{black}}. You can choose \lstinline{green} with
+\begin{lstlisting}
+\documentclass[green]{elegantbook} %or
+\documentclass[color=green]{elegantbook}
+\end{lstlisting}
+
+
+\begin{table}[htbp]
+\caption{ElegantBook Themes\label{tab:color thm}}
+\centering
+\begin{tabular}{ccccccc}
+\toprule
+ & \textcolor{structure1}{green}
+ & \textcolor{structure2}{cyan}
+ & \textcolor{structure3}{blue}
+ & \textcolor{structure4}{gray}
+ & \textcolor{structure5}{black}
+ & Main Environments\\
+\midrule
+structure & \makecell{{\color{structure1}\rule{1cm}{1cm}}}
+ & \makecell{{\color{structure2}\rule{1cm}{1cm}}}
+ & \makecell{{\color{structure3}\rule{1cm}{1cm}}}
+ & \makecell{{\color{structure4}\rule{1cm}{1cm}}}
+ & \makecell{{\color{structure5}\rule{1cm}{1cm}}}
+ & chapter section subsection \\
+main & \makecell{{\color{main1}\rule{1cm}{1cm}}}
+ & \makecell{{\color{main2}\rule{1cm}{1cm}}}
+ & \makecell{{\color{main3}\rule{1cm}{1cm}}}
+ & \makecell{{\color{main4}\rule{1cm}{1cm}}}
+ & \makecell{{\color{main5}\rule{1cm}{1cm}}}
+ & definition exercise problem \\
+second & \makecell{{\color{second1}\rule{1cm}{1cm}}}
+ & \makecell{{\color{second2}\rule{1cm}{1cm}}}
+ & \makecell{{\color{second3}\rule{1cm}{1cm}}}
+ & \makecell{{\color{second4}\rule{1cm}{1cm}}}
+ & \makecell{{\color{second5}\rule{1cm}{1cm}}}
+ & theorem lemma corollary\\
+third & \makecell{{\color{third1}\rule{1cm}{1cm}}}
+ & \makecell{{\color{third2}\rule{1cm}{1cm}}}
+ & \makecell{{\color{third3}\rule{1cm}{1cm}}}
+ & \makecell{{\color{third4}\rule{1cm}{1cm}}}
+ & \makecell{{\color{third5}\rule{1cm}{1cm}}}
+ & proposition\\
+\bottomrule
+\end{tabular}
+\end{table}
+
+If you want to customize the colors, please select \lstinline{nocolor} or use \lstinline{color=none} and declare the main, second, and third colors in the preamble section as follows:
+\begin{lstlisting}[frame=single]
+\definecolor{structurecolor}{RGB}{60,113,183}
+\definecolor{main}{RGB}{0,166,82}%
+\definecolor{second}{RGB}{255,134,24}%
+\definecolor{third}{RGB}{0,174,247}%
+\end{lstlisting}
+
+\section{Cover}
+\subsection{Customized Cover}
+From v3.10, customized cover is allowed, you can choose or hide any element as you prefer. Current optional elements are:
+\begin{itemize}
+ \item title: \lstinline{\title}
+ \item subtitle: \lstinline{\subtitle}
+ \item author: \lstinline{\author}
+ \item institute: \lstinline{\institute}
+ \item date: \lstinline{\date}
+ \item version: \lstinline{\version}
+ \item extra information: \lstinline{\extrainfo}
+ \item cover image: \lstinline{\cover}
+ \item logo: \lstinline{\logo}
+\end{itemize}
+
+Besides, an extra command \lstinline{\bioinfo} is provided with two options--caption and content. For instance, if you want to display \lstinline{Username: 111520}, just type in
+
+\begin{lstlisting}
+\bioinfo{Username}{115520}
+\end{lstlisting}
+
+You can change the color of the horizontal bar of the cover by
+\begin{lstlisting}
+ \definecolor{customcolor}{RGB}{32,178,170}
+ \colorlet{coverlinecolor}{customcolor}
+\end{lstlisting}
+
+\subsection{Cover Image}
+The cover image used in this template is from \href{https://pixabay.com/en/tea-time-poetry-coffee-reading-3240766/}{pixabay.com}. The image is completely free and can be used under any circumstance. The cover image size is $1280 \times 1024$. If you would like to change the cover, please crop it according to the size of the cover picture strictly. One free online image clipping site: \href{https://www.fotor.com/cn}{fotor.com}. Feel free to join our QQ Group to get more elegant covers.
+
+\subsection{Logo}
+Aspect ratio of the logo is 1:1 in this guide, i.e. a square picture. To replace the logo, do remember to choose the appropriate picture.
+
+\subsection{Stylized Cover}
+Want to use stylized cover?(For instance, A4-sized PDF designed by Adobe Illustrator) Please comment out \lstinline{\maketitle} and use \lstinline{pdfpages} to insert the cover. Similar for using \lstinline{titlepage}. If you would like to use the cover in version 2.x, please refer to \href{https://github.com/EthanDeng/etitlepage}{etitlepage}.
+
+\section{Chapter Title Display Styles}
+
+This template contains 2 sets of \textit{title display styles},\lstinline{hang}(default) and \lstinline{display} style. For the former, chapter title is displayed on a single line (\lstinline{hang}). For the latter, chapter title is displayed on a double line (\lstinline{display}).In this guide, we use \lstinline{hang} . To change display style, use:
+\begin{lstlisting}
+\documentclass[hang]{elegantbook} %or
+\documentclass[titlestyle=hang]{elegantbook}
+\end{lstlisting}
+
+
+\section{Introduction of Math Environments}
+We defined two sets of theorem modes, \lstinline{simple} style and \lstinline{fancy} style (default). You may change to \lstinline{simple} mode by
+
+\begin{lstlisting}
+\documentclass[simple]{elegantbook} %or
+\documentclass[mode=simple]{elegantbook}
+\end{lstlisting}
+
+In this template, we defined four different theorem class environments
+
+\begin{itemize}
+\item \textit{Theorem Environment}, including title and content, numbering corresponding to chapter. Three types depending on the format:
+ \begin{itemize}
+ \item \textcolor{main}{\textbf{definition}} environment, the color is \textcolor{main}{main};
+ \item \textcolor{second}{\textbf{theorem, lemma, corollary}} environment, the color is \textcolor{second} {second};
+ \item \textcolor{third}{\textbf{proposition}} environment, the color is \textcolor{third}{third}.
+ \end{itemize}
+\item \textit{Example Environments}, including \textbf{example, exercise, problem} environment, auto numbering corresponding to chapter.
+\item \textit{Proof Environment}, including \textbf{proof, note} environment containing introductory symbol (\textbf{note} environment) or ending symbol (\textbf{proof} environment).
+\item \textit{Conclusion Environments}, including \textbf{conclusion, assumption, property, remark and solution}\footnote{We also define an option \lstinline{result}, which can hide the \lstinline{solution} and \lstinline{proof} environments. You can switch between \lstinline{result=answer} and \lstinline{result=noanswer}.} environments, all of which begin with boldfaced words, with format consistent with normal paragraphs.
+\end{itemize}
+
+\subsection{Theorem Class Environments}
+Since the template uses the \lstinline{tcolorbox} package to customize the theorem class environments, it is slightly different from the normal theorem environments. The usage is as follows:
+\begin{lstlisting}
+\begin{theorem}{theorem name}{label text}
+The content of theorem.
+\end{theorem}
+\end{lstlisting}
+
+The first parameter \lstinline{} represents the name of the theorem, and the second parameter \lstinline{label} represents the label used in cross-reference with \verb|ref{thm:label}|. Note that cross-references must be prefixed with \lstinline{thm:}.
+
+From version 4.1, you can write your theorem environments as follows:
+\begin{lstlisting}
+\begin{theorem}[theorem name]\label{thm:label text}
+ The content of theorem.
+\end{theorem}
+% or
+\begin{theorem}
+ The content of theorem.
+\end{theorem}
+\end{lstlisting}
+
+Other theorem class environments with the same usage includes:
+
+\begin{table}[htbp]
+ \centering
+ \caption{Theorem Class Environments}
+ \begin{tabular}{llll}
+ \toprule
+ Environment & Label text & Prefix & Cross-reference \\
+ \midrule
+ definition & label & def & \lstinline|\ref{def:label}| \\
+ theorem & label & thm & \lstinline|\ref{thm:label}| \\
+ lemma & label & lem & \lstinline|\ref{lem:label}| \\
+ corrlary & label & cor & \lstinline|\ref{cor:label}| \\
+ proposition & label & pro & \lstinline|\ref{pro:label}| \\
+ \bottomrule
+ \end{tabular}%
+ \label{tab:theorem-class}%
+ \end{table}%
+
+
+\subsection{Other Customized Environments}
+The other three math environments can be called directly since there are no additional option for them, e.g. \lstinline{example}:
+\begin{lstlisting}
+\begin{example}
+This is the content of example environment.
+\end{example}
+\end{lstlisting}
+
+The effect is as follows:
+
+\begin{example}
+This is the content of example environment.
+\end{example}
+
+These are all similar environments with slight differences lies in:
+
+\begin{itemize}
+ \item Example, exercise, problem environments number within chapter;
+ \item Note begins with introductory symbol and proof ends with ending symbol;
+ \item Conclusion and other environments are normal paragraph environments with boldfaced introductory words.
+\end{itemize}
+
+
+\section{List Environments}
+This template uses \lstinline{tikz} to customize the list environments, with \lstinline{itemize} environment customized to the third depth and \lstinline{enumerate} environment customized to fourth depth. The effect is as follows\\[2ex]
+\begin{minipage}[b]{0.49\textwidth}
+\begin{itemize}
+ \item first item of nesti;
+ \item second item of nesti;
+ \begin{itemize}
+ \item first item of nestii;
+ \item second item of nestii;
+ \begin{itemize}
+ \item first item of nestiii;
+ \item second item of nestiii.
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+\end{minipage}
+\begin{minipage}[b]{0.49\textwidth}
+\begin{enumerate}
+ \item first item of nesti;
+ \item second item of nesti;
+ \begin{enumerate}
+ \item first item of nestii;
+ \item second item of nestii;
+ \begin{enumerate}
+ \item first item of nestiii;
+ \item second item of nestiii.
+ \end{enumerate}
+ \end{enumerate}
+\end{enumerate}
+\end{minipage}
+
+
+\section{Fonts}
+\textcolor{red}{\bfseries Alert} After v3.10, newtx is reset to cm, together with other two options, the \lstinline{math} font option offers:
+\begin{enumerate}
+ \item \lstinline{math=cm}(default), use \LaTeX{} default math font (recommended).
+ \item \lstinline{math=newtx}, use \lstinline{newtxmath} math font (may bring about bugs).
+ \item \lstinline{math=mtpro2}, use \lstinline{mtpro2} package to set math font.
+\end{enumerate}
+
+If you use \lstinline{newtx} fonts, type in:
+\begin{lstlisting}
+\documentclass[math=newtx]{elegantbook}
+\end{lstlisting}
+
+When you are using \lstinline{newtx}, please pay attention to the hyphens. For instance,
+\begin{equation}
+\int_{R^q} f(x,y) dy.\emph{of\kern0pt f}
+\end{equation}
+
+The corresponding code is:
+\begin{lstlisting}
+\begin{equation}
+ \int_{R^q} f(x,y) dy.\emph{of \kern0pt f}
+\end{equation}
+\end{lstlisting}
+
+\subsection{Symbol Fonts}
+Feedback from some 3.08 users claims that error occurs when using our templates with \lstinline{yhmath}, \lstinline{esvect} and other packages.
+\begin{lstlisting}
+LaTeX Error:
+Too many symbol fonts declared.
+\end{lstlisting}
+
+The reason is that the template redefines font for math so that no new math font is allowed to be added. To use \lstinline{yhmath} and/or \lstinline{esvect}, please locate \lstinline{yhmath} or \lstinline{esvect} in \lstinline{elegantbook.cls}, uncomment corresponding related code.
+
+\begin{lstlisting}
+%%% use yhmath pkg, uncomment following code
+% \let\oldwidering\widering
+% \let\widering\undefined
+% \RequirePackage{yhmath}
+% \let\widering\oldwidering
+
+%%% use esvect pkg, uncomment following code
+% \RequirePackage{esvect}
+\end{lstlisting}
+
+\section{Bibliography}
+
+This template uses biblatex to generate the bibliography, the default citestyle and bibliography style are both \lstinline{numeric}. Let's take a glance at the citation effect. ~\cite{en1} use data from a major peer-to-peer lending \cite{en3} marketplace in China to study whether female and male investors evaluate loan performance differently \parencite{en2}.
+
+If you want to use biblatex, you must create a file named \lstinline{reference.bib}, add bib items (from Google Scholar, Mendeley, EndNote, and etc.) to \lstinline{reference.bib} file, then cite the bibkey in the \lstinline{tex} file. The biber will automatically generate the bibliography for the reference you cited.
+
+
+To change the bibliography style, this version introduces \lstinline{citestyle} and \lstinline{bibstyle}, please refer to \href{https://ctan.org/pkg/biblatex}{CTAN:biblatex} for more detail about these options. You can change your bibliography style as
+\begin{lstlisting}
+\documentclass[citestyle=numeric-comp, bibstyle=authoryear]{elegantbook}
+\end{lstlisting}
+
+\section{Preface}
+
+If you want to add a preface before the first chapter with the number of chapter unchanged, please add the preface in the following way:
+\begin{lstlisting}
+\chapter*{Introduction}
+\markboth{Introduction}{Introduction}
+The content of introduction.
+\end{lstlisting}
+
+\section{Content Option and Depth}
+Option for content \lstinline{toc}, you can choose either one column(\lstinline{onecol}) or two columns(\lstinline{twocol}). For two columns:
+\begin{lstlisting}
+\documentclass[twocol]{elegantbook}
+\documentclass[toc=twocol]{elegantbook}
+\end{lstlisting}
+
+Default content depth is 1, use to use \lstinline|\setcounter{tocdepth}{2}|.
+
+\section{Introduction Environment}
+We create a introduction environment to display the structure of chapter. The basic useage is as follows:
+\begin{lstlisting}
+\begin{introduction}
+ \item Definition of Theorem
+ \item Ask for help
+ \item Optimization Problem
+ \item Property of Cauchy Series
+ \item Angle of Corner
+\end{introduction}
+\end{lstlisting}
+And you will get:
+\begin{introduction}
+ \item Definition of Theorem
+ \item Ask for help
+ \item Optimization Problem
+ \item Property of Cauchy Series
+ \item Angle of Corner
+\end{introduction}
+
+You can change the title of this environment by modifying the optional argument of this environment:
+\begin{lstlisting}
+\begin{introduction}[Brief Introduction]
+...
+\end{introduction}
+\end{lstlisting}
+
+%\section{Problem Set}
+The environment \lstinline{problemset} is used at the end of each chapter to display corresponding exercises. Just type in the following sentences:
+\begin{lstlisting}
+\begin{problemset}
+ \item exercise 1
+ \item exercise 2
+ \item exercise 3
+\end{problemset}
+\end{lstlisting}
+And you will get:
+\begin{problemset}
+ \item exercise 1
+ \item exercise 2
+ \item exercise 3
+ \item math equation test:
+ \begin{equation}
+ a^2+b^2=c_{2_{i}} (1,2) [1,23]
+ \end{equation}
+\end{problemset}
+\begin{remark}
+If you want to customize the title of \lstinline{problemset}, please change the optional argument like in introduction environment. In this version the \lstinline{problemset} environment automatically appears in the table of contents but not in the header or footer(to be fixed).
+\end{remark}
+
+\begin{solution}
+ If you want to customize the title of \lstinline{problemset}, please change the optional argument like in introduction environment. In this version the \lstinline{problemset} environment automatically appears in the table of contents but not in the header or footer(to be fixed).
+\end{solution}
+
+\section{Margin Notes}
+In 3.08, we introduced \lstinline{marginpar=margintrue} and \lstinline{\elegantpar} (Beta) with piles of bugs. Hence we decide to remove them in 3.09 and will suspend the options till revolutionary optimization. Sorry for all the bugs! However, we retain the option \lstinline{marginpar} for users to get margin motes by activating \lstinline{marginpar=margintrue} and using \lstinline{\marginpar} or \lstinline{marginnote} packages.
+
+\begin{remark}
+Note that text and equation are both available in the margin notes.
+\begin{lstlisting}
+% text
+\marginpar{margin paragraph text}
+
+% equation
+\marginpar{
+\begin{equation}
+ a^2 + b^2 = c^2
+\end{equation}
+}
+\end{lstlisting}
+
+For tables and figures, note that floating environment is not allowed. You have to use \lstinline{includegraphics} or \lstinline{table} and use \lstinline{\captionof} to name it. To get centralized figures or tables, use \lstinline{\centerline} or \lstinline{center}. To learn more, please refer to \href{https://tex.stackexchange.com/questions/5583/caption-of-figure-in-marginpar-and-caption-of-wrapfigure-in-margin}{Caption of Figure in Marginpar}.
+
+\begin{lstlisting}
+% graph with centerline command
+\marginpar{
+ \centerline{
+ \includegraphics[width=0.2\textwidth]{logo.png}
+ }
+ \captionof{figure}{your figure caption}
+}
+
+% graph with center environment
+\marginpar{
+ \begin{center}
+ \includegraphics[width=0.2\textwidth]{logo.png}
+ \captionof{figure}{your figure caption}
+ \end{center}
+}
+\end{lstlisting}
+
+\end{remark}
+
+
+
+\chapter{ElegantBook Writing Sample}
+
+\begin{introduction}
+\item Theorem Class Envrionments
+\item Cross Reference
+\item Math Environments
+\item List Environments
+\item Logo and Base
+\item $a^2+b^2=c^2$
+\end{introduction}
+
+
+\lipsum[1]
+% source: https://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/Theorems.html
+
+\section{Writing Sample}
+
+We will define the integral of a measurable function in three steps. First, we define the integral of a nonnegative simple function. Let $E$ be the measurable set in $\mathcal{R}^N$.
+
+\begin{definition}[Left Coset]
+Let $H$ be a subgroup of a group~$G$. A \emph{left coset} of $H$ in $G$ is a subset of $G$ that is of the form $xH$, where $x \in G$ and $xH = \{ xh : h \in H \}$. Similarly a \emph{right coset} of $H$ in $G$ is a subset of $G$ that is of the form $Hx$, where $Hx = \{ hx : h \in H \}$ $\hbar$
+\end{definition}
+
+\begin{note}
+Note that a subgroup~$H$ of a group $G$ is itself a left coset of $H$ in $G$.
+\end{note}
+
+\lipsum[2]
+
+\begin{theorem}[Lagrange's Theorem] \label{thm:lg}
+Let $G$ be a finite group, and let $H$ be a subgroup of $G$. Then the order of $H$ divides the order of $G$.
+\end{theorem}
+
+\ref{thm:lg}
+\lipsum[3]
+
+
+\begin{proposition}[Size of Left Coset]
+Let $H$ be a finite subgroup of a group $G$. Then each left coset of $H$ in $G$ has the same number of elements as $H$.
+\end{proposition}
+
+\begin{proof}
+Let $z$ be some element of $xH \cap yH$. Then $z = xa$ for some $a \in H$, and $z = yb$ for some $b \in H$. If $h$ is any element of $H$ then $ah \in H$ and $a^{-1}h \in H$, since $H$ is a subgroup of $G$. But $zh = x(ah)$ and $xh = z(a^{-1}h)$ for all $h \in H$. Therefore $zH \subset xH$ and $xH \subset zH$, and thus $xH = zH$. Similarly $yH = zH$, and thus $xH = yH$, as required.
+\end{proof}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{scatter.jpg}
+ \caption{Matplotlib: Scatter Plot Example\label{fig:scatter}}
+\end{figure}
+
+Regression analysis is a powerful statistical method that allows you to examine the relationship between two or more variables of interest. While there are many types of regression analysis, at their core they all examine the influence of one or more independent variables on a dependent variable. The process of performing a regression allows you to confidently determine which factors matter most, which factors can be ignored, and how these factors influence each other.
+
+Let's continue using our application training example. In this case, we'd want to measure the historical levels of satisfaction with the events from the past three years or so, as well as any information possible in regards to the independent variables.
+
+\section{Second section}
+This second section\index{S!section} may include some special word,
+and expand the ones already used\index{keywords!used}.
+
+
+\begin{table}[htbp]
+ \small
+ \centering
+ \caption{Auto MPG and Price \label{tab:reg}}
+ \begin{tabular}{lcc}
+ \toprule
+ & (1) & (2) \\
+ \midrule
+ mpg & -238.90*** & -49.51 \\
+ & (53.08) & (86.16) \\
+ weight & & 1.75*** \\
+ & & (0.641) \\
+ constant & 11,253*** & 1,946 \\
+ & (1,171) & (3,597) \\
+ obs & 74 & 74 \\
+ $R^2$ & 0.220 & 0.293 \\
+ \bottomrule
+ \multicolumn{3}{l}{\scriptsize Standard errors in parentheses} \\
+ \multicolumn{3}{l}{\scriptsize *** p<0.01, ** p<0.05, * p<0.1} \\
+ \end{tabular}%
+\end{table}%
+
+\lipsum[1-2]
+
+\begin{itemize}
+ \item Routing and resource discovery;
+ \begin{itemize}
+ \item Language Models
+ \item Vector Space Models
+ \end{itemize}
+ \item Resilient and scalable computer networks;
+ \item Distributed storage and search.
+\end{itemize}
+
+%\problemset
+\begin{problemset}
+ \item Solve the equation $5(- 3x - 2) - (x - 3) = -4(4x + 5) + 13$.
+ \item Find the distance between the points $(-4 , -5)$ and $(-1 , -1)$.
+ \item Find the slope of the line $5x - 5y = 7$.
+\end{problemset}
+
+
+\chapter{FAQ}
+We list some FAQs for users to refer to:
+\begin{enumerate}
+ \item \question{Why option numbers for natbib fail to take effect in v3.07?}
+ In v3.07, when \lstinline{gbt7714} is introduced, option \lstinline{authoryear} is incompatible with \lstinline{natbib}. In v3.08 and 3.09, \lstinline{numbers}, \lstinline{numbers}, \lstinline{super} and \lstinline{authoryear} are introduced.
+ \item \question{I want to customize font and background color.}
+ Please use \lstinline{pagecolor} to change background color, refer to \href{https://tex.stackexchange.com/questions/278544/xcolor-what-is-the-equivalent-of-default-text-color}{this} to customize font.
+ \item \question{Which version should I choose?}
+ Please use \href{https://github.com/ElegantLaTeX/ElegantBook/releases}{Latest Release} via GitHub or \TeX{} Live 2021.
+ \item \question{Which editor should I choose?}
+ You can use \TeX{} Live 2021 built-in \TeX works or \TeX Studio. You may refer to \href{https://github.com/EthanDeng/texworks-autocomplete}{\TeX{}works autocomplete}. \TeX{} Live 2021 + \TeX{}studio is strongly recommended. I myself use VS Code and Sublime Text. Related configurations can be found at \href{https://github.com/EthanDeng/vscode-latex}{vscode-latex} and \href{https://github.com/EthanDeng/sublime-text-latex}{sublime-text-latex}.
+ \item \question{Hello, we want to use ElegantBook to write a book about machine learning and would like your authorization.}
+ Feel free to use our templates by pointing out our copyright. For other issues, please refer to LPPL-1.3c. If you want to show us your work, share the URL with us afterwards.
+ \item \question{What is cross reference?}
+ This template is aimed at who are not a complete beginner for \LaTeX{}. Please learn more about \LaTeX{} before using this template.
+ \item \question{Is the language for code highlighting optional?}
+ Yes, \lstinline{listings} package is used in ElegantBook, hence language is optional(e.g. \lstinline{language=Python}). For global setting, use \lstinline{lstset}. For more information, please refer to package documentations.
+ \item \question{When will Beamer template (ElegantSlide or ElegantBeamer) forthcoming?}
+ Since there is an excellent theme \href{https://github.com/matze/mtheme}{Metropolis}, no plan for Beamer theme.
+\end{enumerate}
+
+\chapter{Version History}
+We revised our templates now and then. This section shows the version story of ElegantBook. We have nearly 100 submits and 17 releases on GitHub since uploaded.
+
+
+\datechange{2021/05/02}{release of v4.1.}
+
+\begin{change}
+ \item \textbf{! Big Change}: Change the bibliography method from \hologo{BibTeX} to biblatex(with backend \lstinline{biber});
+ \item \textbf{! Big Change}: Add support for the default theorem writing method (with optional name and label);
+ \item Add left and right space;
+ \item Support hyperlink from the text of TOC;
+ \item Remove the \hologo{pdfLaTeX} compatiblity check for Chinese.
+ \item Add multilingual support, for french \lstinline{lang=fr}, dutch \lstinline{lang=nl}, Hungarian \lstinline{lang=hu}, Spanish \lstinline{lang=es}, Mongolian \lstinline{lang=mn} etc.
+\end{change}
+
+\datechange{2020/04/12}{release of v3.11, \textcolor{red}{\textbf{LAST} version of 3.x}.}
+
+
+\begin{change}
+ \item \textbf{! Fix}: Fix \lstinline{natbib option clash} problems caused by \lstinline{gbt7714} updates.
+ \item Remove \lstinline{base} decorations and its options since \lstinline{pgfornament} package is not included in \TeX{} Live 2020.
+ \item Fix spacing problem in some environments.
+ \item Introduce language option for Italian, \lstinline{lang=it}.
+\end{change}
+
+
+\datechange{2020/02/10}{release of v3.10}
+
+\begin{change}
+ \item Introduce \lstinline{math} for math font, optional styles are \lstinline{newtx} and \lstinline{cm}.\\
+ \textbf{Notice}: The math font \lstinline{newtxmath} in previous versions is reset to default \LaTeX{} math font, to keep previous math font, please declare \lstinline{math=newtx}.
+ \item Introduce \lstinline{chinesefont} option, with \lstinline{founder}, \lstinline{ctexfont} and \lstinline{nofont} available.
+ \item Turn author information on the cover optional and add customized command \lstinline{\bioinfo}.
+ \item Add version history with command \lstinline{\datechange} and environment \lstinline{change}.
+ \item Add Chinese chapter style \lstinline{scheme} with option \lstinline{chinese}.
+ \item Since the bug raised by \lstinline{\lvert} is fixed, exchange package positions of \lstinline{ctex} and \lstinline{amsmath}.
+ \item Drop \lstinline{\lastpage} from header to avoid page anchor bug and adding \lstinline{\frontmatter}.
+ \item Revise bibliography option \lstinline{cite} with optional styles \lstinline{numbers},\lstinline{authoryear} and \lstinline{super}.
+ \item Introduce bibliography style option \lstinline{bibstyle}, with default bib style \lstinline{apalike} for English mode and \lstinline{gbt7714} package for Chinese mode.
+\end{change}
+
+\datechange{2019/08/18}{release of v3.09}
+
+\begin{change}
+ \item Remove \lstinline{\elegantpar} temporary and remind users to use \lstinline{\marginnote} and \lstinline{\marginpar} instead.
+ \item Use \lstinline{esint} to display integral operator.
+ \item Add new command \lstinline{toc}, with options \lstinline{onecol} and \lstinline{twocol}.
+ \item Add new option \lstinline{cite} \lstinline{super} for superscript-displayed citation.
+ \item Revise \lstinline{problemset}.
+\end{change}
+
+\nocite{en2,en3}
+\printbibliography
+
+\appendix
+% \renewcommand\chaptername{\eappendix \thechapter}
+
+\chapter{Mathematical Tools}
+
+This appendix covers some of the basic mathematics used in econometrics. We briefly discuss the properties of summation operators, study the properties of linear and some nonlinear equations, and review the ratios and percentages. We also introduce some special functions that are common in econometrics applications, including quadratic functions and natural logarithms. The first four sections require only basic algebraic techniques. The fifth section briefly reviews differential Calculus Although Calculus is not necessary to understand much of this book, it is used in some of the end-of-chapter appendices and in some of the more advanced topics in part 3.
+
+\section{Summation Operator and Description Statistics}
+
+\textbf{Summation Operator} is an abbreviation used to express the summation of numbers, it plays an important role in statistics and econometrics analysis. If $\{x_i: i=1, 2, \ldots, n\}$ is a sequence of $n$ numbers, the summation of the $n$ numbers is:
+
+\begin{equation}
+\sum_{i=1}^n x_i \equiv x_1 + x_2 +\cdots + x_n
+\end{equation}
+
+
+\end{document}
\ No newline at end of file
diff --git a/elegantbook.cls b/elegantbook.cls
new file mode 100644
index 0000000..4861ec9
--- /dev/null
+++ b/elegantbook.cls
@@ -0,0 +1,1147 @@
+%%%%%%%%%%%%%%%%%%%%%%
+%% start of file `elegantbook.cls'.
+%% Copyright 2013-2021 ElegantLaTeX (elegantlatex2e@gmail.com)
+%%
+%% This work may be distributed and/or modified freely
+%% available at https://github.com/ElegantLaTeX/ElegantBook
+%
+%%%%%%%%%%%%%%%%%%%%%
+% % !Mode:: "TeX:UTF-8"
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{elegantbook}[2021/05/02 v4.1 ElegantBook document class]
+
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{family=ELEGANT, prefix=ELEGANT@, setkeys=\kvsetkeys}
+\newcommand{\ekv}[1]{\kvsetkeys{ELEGANT}{#1}}
+
+% ----- Colors -----
+\DeclareStringOption[blue]{color}
+\DeclareStringOption[en]{lang}
+\DeclareStringOption[answer]{result}
+\DeclareStringOption[fancy]{mode}
+\DeclareStringOption[normal]{device}
+\DeclareStringOption[cm]{math}
+\DeclareStringOption[marginfalse]{marginpar}
+\DeclareStringOption[onecol]{toc}
+\DeclareStringOption{scheme}
+% ----- backward compatibility
+\DeclareVoidOption{green}{\ekv{color=green}}
+\DeclareVoidOption{cyan}{\ekv{color=cyan}}
+\DeclareVoidOption{blue}{\ekv{color=blue}}
+\DeclareVoidOption{gray}{\ekv{color=gray}}
+\DeclareVoidOption{black}{\ekv{color=black}}
+\DeclareVoidOption{nocolor}{\ekv{color=none}}
+\DeclareStringOption[ctexfont]{chinesefont}
+
+\DeclareVoidOption{chinese}{\ekv{scheme=chinese}}
+
+\DeclareVoidOption{ctexfont}{\ekv{chinesefont=ctexfont}}
+\DeclareVoidOption{founder}{\ekv{chinesefont=founder}}
+\DeclareVoidOption{nofont}{\ekv{chinesefont=nofont}}
+
+\DeclareVoidOption{en}{\ekv{lang=en}}
+\DeclareVoidOption{cn}{\ekv{lang=cn}}
+\DeclareVoidOption{it}{\ekv{lang=it}}
+
+\DeclareVoidOption{fancy}{\ekv{mode=fancy}}
+\DeclareVoidOption{simple}{\ekv{mode=simple}}
+
+\DeclareVoidOption{answer}{\ekv{result=answer}}
+\DeclareVoidOption{noanswer}{\ekv{result=noanswer}}
+
+\DeclareVoidOption{normal}{\ekv{device=normal}}
+\DeclareVoidOption{pad}{\ekv{device=pad}}
+
+\DeclareStringOption[numeric-comp]{citestyle}
+\DeclareStringOption[numeric]{bibstyle}
+
+
+\DeclareVoidOption{newtx}{\ekv{math=newtx}}
+\DeclareVoidOption{mtpro2}{\ekv{math=mtpro2}}
+\DeclareVoidOption{cm}{\ekv{math=cm}}
+
+\DeclareVoidOption{margintrue}{\ekv{marginpar=margintrue}}
+\DeclareVoidOption{marginfalse}{\ekv{marginpar=marginfalse}}
+
+
+\DeclareVoidOption{onecol}{\ekv{toc=onecol}}
+\DeclareVoidOption{twocol}{\ekv{toc=twocol}}
+
+
+% ----- Math option -----
+\newcommand\mailto[1]{\href{mailto:#1}{\nolinkurl{#1}}}
+
+% ----- Title Style -----
+\DeclareStringOption[hang]{titlestyle}[hang]
+% ----- backward compatibility
+\DeclareVoidOption{hang}{\ekv{titlestyle=hang}}
+\DeclareVoidOption{display}{\ekv{titlestyle=display}}
+% ----- Default Options -----
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
+
+\ProcessKeyvalOptions*\relax
+% \ProcessOptions*\relax
+\LoadClass[a4paper,oneside]{book}
+
+\RequirePackage{setspace}
+
+\RequirePackage{csquotes}
+
+
+\RequirePackage{hyperref}
+\hypersetup{
+ breaklinks,
+ unicode,
+ linktoc=all,
+ bookmarksnumbered=true,
+ bookmarksopen=true,
+ pdfkeywords={ElegantBook},
+ colorlinks,
+ linkcolor=winered,
+ citecolor=winered,
+ urlcolor=winered,
+ plainpages=false,
+ pdfstartview=FitH,
+ pdfborder={0 0 0},
+ linktocpage
+}
+
+%% device settings
+\RequirePackage{geometry}
+\ifdefstring{\ELEGANT@device}{normal}{
+ \geometry{
+ a4paper,
+ top=25.4mm, bottom=25.4mm,
+ left=20mm, right=20mm,
+ headheight=2.17cm,
+ headsep=4mm,
+ footskip=12mm
+ }
+ \ifdefstring{\ELEGANT@marginpar}{margintrue}{
+ \geometry{
+ marginparwidth=5cm, marginparsep=5mm,
+ left=2cm,right=7cm}}{\relax}}{
+ \relax}
+
+\ifdefstring{\ELEGANT@device}{pad}{
+\geometry{
+ paperwidth=7.5in,
+ paperheight=10in,
+ margin=16mm,
+ headheight=2.17cm,
+ footskip=4mm
+}}{\relax}
+
+\RequirePackage{indentfirst,comment}
+% fontsetting
+\ifdefstring{\ELEGANT@math}{mtpro2}{
+ \let\Bbbk\relax
+ \RequirePackage[lite]{mtpro2}
+}{\relax}
+
+\setcounter{tocdepth}{1}
+\renewcommand{\baselinestretch}{1.2}
+
+\PassOptionsToPackage{no-math}{fontspec}
+\RequirePackage{iftex}
+\ifdefstring{\ELEGANT@lang}{cn}{
+ \ifXeTeX
+ \ifdefstring{\ELEGANT@chinesefont}{founder}{
+ \RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}
+ \setCJKmainfont[BoldFont={FZHei-B01},ItalicFont={FZKai-Z03}]{FZShuSong-Z01}
+ \setCJKsansfont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZHei-B01}
+ \setCJKmonofont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZFangSong-Z02}
+ \setCJKfamilyfont{zhsong}{FZShuSong-Z01}
+ \setCJKfamilyfont{zhhei}{FZHei-B01}
+ \setCJKfamilyfont{zhkai}{FZKai-Z03}
+ \setCJKfamilyfont{zhfs}{FZFangSong-Z02}
+ \newcommand*{\songti}{\CJKfamily{zhsong}}
+ \newcommand*{\heiti}{\CJKfamily{zhhei}}
+ \newcommand*{\kaishu}{\CJKfamily{zhkai}}
+ \newcommand*{\fangsong}{\CJKfamily{zhfs}}}{\relax}
+
+ \ifdefstring{\ELEGANT@chinesefont}{nofont}{
+ \RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}}{\relax}
+
+ \ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
+ \RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
+ \else
+ \ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
+ \RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
+ \fi
+ \AfterEndPreamble{
+ % \renewcommand{\itshape}{\kaishu}
+ \setlength\parindent{2\ccwd}}
+}{\relax}
+
+\ifcsname heiti\endcsname
+ \newcommand{\cbfseries}{\heiti}
+\else
+ \newcommand{\cbfseries}{\bfseries}
+\fi
+
+
+\ifcsname kaishu\endcsname
+ \newcommand{\citshape}{\kaishu}
+\else
+ \newcommand{\citshape}{\itshape}
+\fi
+\ifcsname kaishu\endcsname
+ \newcommand{\cnormal}{\kaishu}
+\else
+ \newcommand{\cnormal}{\normalfont}
+\fi
+
+\ifcsname fangsong\endcsname
+ \newcommand{\cfs}{\fangsong}
+\else
+ \newcommand{\cfs}{\normalfont}
+\fi
+
+\RequirePackage{newtxtext}
+\RequirePackage{anyfontsize}
+\ifdefstring{\ELEGANT@math}{newtx}{
+ \RequirePackage{newtxmath}
+ \let\Bbbk\relax
+ \RequirePackage{esint}
+ %%% use yhmath pkg, uncomment following code
+ % \let\oldwidering\widering
+ % \let\widering\undefined
+ % \RequirePackage{yhmath}
+ % \let\widering\oldwidering
+
+ %%% use esvect pkg, uncomment following code
+ % \RequirePackage{esvect}
+
+ \DeclareSymbolFont{CMlargesymbols}{OMX}{cmex}{m}{n}
+ \let\sumop\relax\let\prodop\relax
+ \DeclareMathSymbol{\sumop}{\mathop}{CMlargesymbols}{"50}
+ \DeclareMathSymbol{\prodop}{\mathop}{CMlargesymbols}{"51}
+}{\relax}
+
+% ----- Handle Colors -----
+%% 章节以及页脚图形
+
+\RequirePackage[table]{xcolor}
+\ifdefstring{\ELEGANT@color}{green}{
+ \definecolor{structurecolor}{RGB}{0,120,2}%
+ \definecolor{main}{RGB}{0,120,2}%
+ \definecolor{second}{RGB}{230,90,7}%
+ \definecolor{third}{RGB}{0,160,152}%
+}{\relax}
+\ifdefstring{\ELEGANT@color}{cyan}{
+ \definecolor{structurecolor}{RGB}{31,186,190}%
+ \definecolor{main}{RGB}{59,180,5}%
+ \definecolor{second}{RGB}{175,153,8}%
+ \definecolor{third}{RGB}{244,105,102}%
+}{\relax}
+\ifdefstring{\ELEGANT@color}{blue}{
+ \definecolor{structurecolor}{RGB}{60,113,183}
+ \definecolor{main}{RGB}{0,166,82}%
+ \definecolor{second}{RGB}{255,134,24}%
+ \definecolor{third}{RGB}{0,174,247}%
+}{\relax}
+\ifdefstring{\ELEGANT@color}{gray}{
+ \definecolor{structurecolor}{RGB}{150,150,150}
+ \definecolor{main}{RGB}{150,150,150}%
+ \definecolor{second}{RGB}{150,150,150}%
+ \definecolor{third}{RGB}{150,150,150}%
+}{\relax}
+\ifdefstring{\ELEGANT@color}{black}{
+ \definecolor{structurecolor}{RGB}{0,0,0}
+ \definecolor{main}{RGB}{0,0,0}%
+ \definecolor{second}{RGB}{0,0,0}%
+ \definecolor{third}{RGB}{0,0,0}%
+}{\relax}
+
+%green color
+\definecolor{structure1}{RGB}{0,120,2}%
+\definecolor{main1}{RGB}{0,120,2}%
+\definecolor{second1}{RGB}{230,90,7}%
+\definecolor{third1}{RGB}{0,160,152}%
+%cyan color
+\definecolor{structure2}{RGB}{31,186,190}%
+\definecolor{main2}{RGB}{59,180,5}%
+\definecolor{second2}{RGB}{175,153,8}%
+\definecolor{third2}{RGB}{244,105,102}%
+%blue color
+\definecolor{structure3}{RGB}{60,113,183}
+\definecolor{main3}{RGB}{0,166,82}%
+\definecolor{second3}{RGB}{255,134,24}%
+\definecolor{third3}{RGB}{0,174,247}%
+% gray color
+\definecolor{structure4}{RGB}{150,150,150}
+\definecolor{main4}{RGB}{150,150,150}%
+\definecolor{second4}{RGB}{150,150,150}%
+\definecolor{third4}{RGB}{150,150,150}%
+% black color
+\definecolor{structure5}{RGB}{0,0,0}
+\definecolor{main5}{RGB}{0,0,0}%
+\definecolor{second5}{RGB}{0,0,0}%
+\definecolor{third5}{RGB}{0,0,0}%
+
+% corlor definition
+\definecolor{winered}{rgb}{0.5,0,0}
+\definecolor{bule}{RGB}{18,29,57}
+\colorlet{coverlinecolor}{second}
+
+
+% ----- Title Style -----
+\ifdefstring{\ELEGANT@titlestyle}{hang}{\def\style{hang}}{\relax}
+\ifdefstring{\ELEGANT@titlestyle}{display}{\def\style{display}}{\relax}
+
+% reference:
+% https://tex.stackexchange.com/questions/58506/how-to-make-a-new-command-similar-to-author
+% https://pastebin.com/C8W4axzV
+\newcommand\email[1]{\href{mailto:#1}{\nolinkurl{#1}}}
+
+\global\let\@title\@empty
+\global\let\@author\@empty
+\global\let\@date\@empty
+\newcommand{\subtitle}[1]{\gdef\@subtitle{#1}}
+\newcommand{\institute}[1]{\gdef\@institute{#1}}
+\newcommand{\version}[1]{\gdef\@version{#1}}
+\newcommand{\extrainfo}[1]{\gdef\@extrainfo{#1}}
+
+\RequirePackage{mwe}
+\newcommand{\logo}[1]{\gdef\@logo{#1}}
+\newcommand{\cover}[1]{\gdef\@cover{#1}}
+
+\newcommand{\question}[1]{{\par\citshape #1}\\[0.2ex]}
+
+\RequirePackage{enumerate}
+% list/itemize/enumerate setting
+\RequirePackage[shortlabels,inline]{enumitem}
+\setlist{nolistsep}
+
+\RequirePackage[labelfont={bf,color=structurecolor}]{caption}
+\captionsetup[table]{skip=3pt}
+\captionsetup[figure]{skip=3pt}
+
+\AtBeginDocument{
+ \setlength{\abovedisplayskip}{3pt}
+ \setlength{\belowdisplayskip}{3pt}
+ \RequirePackage[flushmargin,stable]{footmisc}
+ \setlength{\footnotesep}{12pt}
+}
+
+
+
+\RequirePackage{graphicx}
+%\RequirePackage{enumerate}
+\RequirePackage{amsmath,mathrsfs,amsfonts,amssymb}
+% \providecommand\qed{}
+% \renewcommand{\qed}{\hfill\ensuremath{\square}}
+\RequirePackage{booktabs}
+\RequirePackage{multicol,multirow}
+
+\RequirePackage{fancyvrb}
+\RequirePackage{makecell,lipsum,hologo}
+%%中文结构名字
+
+\RequirePackage[
+ backend=biber,
+ citestyle=\ELEGANT@citestyle,
+ bibstyle=\ELEGANT@bibstyle]{biblatex}
+
+
+
+%% 章节设置
+
+\RequirePackage{appendix}
+
+\ifdefstring{\ELEGANT@lang}{cn}{
+ \renewcommand{\baselinestretch}{1.3}
+ \renewcommand{\contentsname}{目录}
+ \renewcommand{\figurename}{图}
+ \renewcommand{\tablename}{表}
+ \renewcommand{\partname}{\color{structurecolor}}
+ \renewcommand{\thepart}{第\zhnumber{\arabic{part}}部分}
+ \renewcommand{\listfigurename}{插图目录}
+ \renewcommand{\listtablename}{表格目录}
+ \renewcommand{\bibname}{参考文献}
+ \renewcommand{\appendixname}{附录}
+ \renewcommand{\indexname}{索\hspace{2em}引}
+ \newcommand\figref[1]{\textbf{图}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{表}~\ref{#1}}
+ \ifdefstring{\ELEGANT@scheme}{chinese}{
+ \renewcommand{\chaptername}{第\zhnumber{\arabic{chapter}}章}}{
+ \renewcommand{\chaptername}{第 \thechapter{} 章}}
+ \newcommand{\authorname}{\citshape 作者:}
+ \newcommand{\institutename}{\citshape 组织:}
+ \newcommand{\datename}{\citshape 时间:}
+ \newcommand{\versionname}{\citshape 版本:}
+ \newcommand{\notename}{笔记}
+ \renewcommand*{\proofname}{证明}
+ \newcommand{\definitionname}{定义}
+ \newcommand{\theoremname}{定理}
+ \newcommand{\axiomname}{公理}
+ \newcommand{\postulatename}{公设}
+ \newcommand{\lemmaname}{引理}
+ \newcommand{\propositionname}{命题}
+ \newcommand{\corollaryname}{推论}
+ \newcommand{\examplename}{例题} %
+ \newcommand{\instancename}{示例} %
+ \newcommand{\problemname}{问题} % 问题
+ \newcommand{\exercisename}{练习} % 练习=习题
+ \newcommand{\remarkname}{注}
+ \newcommand{\assumptionname}{假设}
+ \newcommand{\conclusionname}{结论}
+ \newcommand{\solutionname}{解}
+ \newcommand{\propertyname}{性质}
+ \newcommand{\introductionname}{内容提要}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{{\citshape #1}:#2}}
+ \newcommand{\updatename}{更新:}
+ \newcommand{\historyname}{版本更新历史}
+ }{\relax}
+\ifdefstring{\ELEGANT@lang}{en}{
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\textbf{Figure}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Table}~\ref{#1}}
+ \renewcommand{\chaptername}{Chapter \thechapter}
+ \renewcommand{\partname}{\color{structurecolor} Part}
+ \newcommand{\authorname}{\textbf{Author: }}
+ \newcommand{\institutename}{\textbf{Institute: }}
+ \newcommand{\datename}{\textbf{Date: }}
+ \newcommand{\versionname}{\textbf{Version: }}
+ \newcommand{\notename}{Note}
+ \newcommand{\proofname}{Proof}
+ \newcommand{\problemname}{Problem}
+ \newcommand{\definitionname}{Definition}
+ \newcommand{\theoremname}{Theorem}
+ \newcommand{\axiomname}{Axiom}
+ \newcommand{\postulatename}{Postulate}
+ \newcommand{\lemmaname}{Lemma}
+ \newcommand{\propositionname}{Proposition}
+ \newcommand{\corollaryname}{Corollary}
+ \newcommand{\examplename}{Example}
+ \newcommand{\exercisename}{Exercise}
+ \newcommand{\remarkname}{Remark}
+ \newcommand{\assumptionname}{Assumption}
+ \newcommand{\conclusionname}{Conclusion}
+ \newcommand{\solutionname}{Solution}
+ \newcommand{\propertyname}{Property}
+ \newcommand{\introductionname}{Introduction}
+ \renewcommand{\appendixname}{Appendix}
+ % \newcommand{\problemsetname}{Exercise}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Updates:}
+ \newcommand{\historyname}{Version History}
+}{\relax}
+
+\ifdefstring{\ELEGANT@lang}{it}{
+ % \RequirePackage[utf8]{inputenc}
+ \RequirePackage[italian]{babel}
+ % \RequirePackage[T1]{fontenc}
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\textbf{Figura}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Tabella}~\ref{#1}}
+ \renewcommand{\chaptername}{Chapter \thechapter}
+ \newcommand{\authorname}{\textbf{Autore: }}
+ \newcommand{\institutename}{\textbf{Istituto: }}
+ \newcommand{\datename}{\textbf{Data: }}
+ \newcommand{\versionname}{\textbf{Versione: }}
+ \newcommand{\notename}{Nota}
+ \newcommand{\proofname}{Dimostrazione}
+ \newcommand{\problemname}{Problema}
+ \newcommand{\definitionname}{Definizione}
+ \newcommand{\theoremname}{Teorema}
+ \newcommand{\axiomname}{Assioma}
+ \newcommand{\postulatename}{Postulato}
+ \newcommand{\lemmaname}{Lemma}
+ \newcommand{\propositionname}{Proposizione}
+ \newcommand{\corollaryname}{Corollario}
+ \newcommand{\examplename}{Esempio}
+ \newcommand{\exercisename}{Esercizio}
+ \newcommand{\remarkname}{Commento}
+ \newcommand{\assumptionname}{Assunto}
+ \newcommand{\conclusionname}{Conclusione}
+ \newcommand{\solutionname}{Soluzione}
+ \newcommand{\propertyname}{Proprietà}
+ \newcommand{\introductionname}{Introduzione}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Aggiornamenti:}
+ \newcommand{\historyname}{Cronologia delle versioni}
+}{\relax}
+
+\ifdefstring{\ELEGANT@lang}{fr}{
+ \RequirePackage[utf8]{inputenc}
+ \RequirePackage[T1]{fontenc}
+ \RequirePackage[french]{babel}
+ \setlength\parindent{2em}
+ \renewcommand\figref[1]{\textbf{Figure}\ref{#1}}
+ \renewcommand\tabref[1]{\textbf{Tableau}\ref{#1}}
+ \renewcommand{\chaptername}{Chapitre \thechapter}
+ \renewcommand{\authorname}{\textbf{Auteur: }}
+ \renewcommand{\institutename}{\textbf{Institut: }}
+ \renewcommand{\datename}{\textbf{Date: }}
+ \renewcommand{\versionname}{\textbf{Version: }}
+ \renewcommand{\notename}{Note}
+ \renewcommand{\proofname}{Démonstration}
+ \renewcommand{\problemname}{Problème}
+ \renewcommand{\definitionname}{Définition}
+ \renewcommand{\theoremname}{Théorème}
+ \renewcommand{\axiomname}{Axiôme}
+ \renewcommand{\postulatename}{Postulat}
+ \renewcommand{\lemmaname}{Lemme}
+ \renewcommand{\propositionname}{Proposition}
+ \renewcommand{\corollaryname}{Corollaire}
+ \renewcommand{\examplename}{Exemple}
+ \renewcommand{\exercisename}{Exercice}
+ \renewcommand{\remarkname}{Remarque}
+ \renewcommand{\assumptionname}{Supposition}
+ \renewcommand{\conclusionname}{Conclusion}
+ \renewcommand{\solutionname}{Solution}
+ \renewcommand{\propertyname}{Propriété}
+ \renewcommand{\introductionname}{Introduction}
+ \renewcommand{\problemsetname}{Exercice}
+ \renewcommand{\updatename}{Mises à jour:}
+ \renewcommand{\historyname}{Historique des versions}
+}{\relax}
+
+
+\ifdefstring{\ELEGANT@lang}{nl}{
+ \RequirePackage[dutch]{babel}
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\textbf{Figuur}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Tabel}~\ref{#1}}
+ \renewcommand{\chaptername}{Hoofdstuk \arabic{chapter}}
+ \newcommand{\authorname}{\textbf{Auteur: }}
+ \newcommand{\institutename}{\textbf{Instituut: }}
+ \newcommand{\datename}{\textbf{Datum: }}
+ \newcommand{\versionname}{\textbf{Versie: }}
+ \newcommand{\notename}{Opmerking}
+ \newcommand{\proofname}{Bewijs}
+ \newcommand{\problemname}{Probleem}
+ \newcommand{\definitionname}{Definitie}
+ \newcommand{\theoremname}{Stelling}
+ \newcommand{\axiomname}{Uitgangspunt}
+ \newcommand{\postulatename}{Hypothese}
+ \newcommand{\lemmaname}{Lemma}
+ \newcommand{\propositionname}{Voorstel}
+ \newcommand{\corollaryname}{Gevolgtrekking}
+ \newcommand{\examplename}{Voorbeeld}
+ \newcommand{\exercisename}{Oefening}
+ \newcommand{\remarkname}{Commentaar}
+ \newcommand{\assumptionname}{Veronderstelling}
+ \newcommand{\conclusionname}{Besluit}
+ \newcommand{\solutionname}{Oplossing}
+ \newcommand{\propertyname}{Eigenschap}
+ \newcommand{\introductionname}{Introductie}
+ \newcommand{\problemsetname}{Probleemcomplex}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Update:}
+ \newcommand{\historyname}{Versie Geschiedenis}
+}{\relax}
+
+
+\ifdefstring{\ELEGANT@lang}{hu}{
+ \RequirePackage[magyar]{babel}
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\ref{#1}~\textbf{Ábra}}
+ \newcommand\tabref[1]{\ref{#1}~\textbf{Táblázat}}
+ \renewcommand{\chaptername}{\thechapter ~ fejezet}
+ \newcommand{\authorname}{\textbf{Szerző: }}
+ \newcommand{\institutename}{\textbf{Intézmény: }}
+ \newcommand{\datename}{\textbf{Dátum: }}
+ \newcommand{\versionname}{\textbf{Verziószám: }}
+ \newcommand{\notename}{Jegyzet}
+ \newcommand{\proofname}{Bizonyítás}
+ \newcommand{\problemname}{Probléma}
+ \newcommand{\definitionname}{Definíció}
+ \newcommand{\theoremname}{Tétel}
+ \newcommand{\axiomname}{Axióma}
+ \newcommand{\postulatename}{Követelmény}
+ \newcommand{\lemmaname}{Lemma}
+ \newcommand{\propositionname}{Előzmény}
+ \newcommand{\corollaryname}{Következmény}
+ \newcommand{\examplename}{Példa}
+ \newcommand{\exercisename}{Feladat}
+ \newcommand{\remarkname}{Megjegyzés}
+ \newcommand{\assumptionname}{Sejtés}
+ \newcommand{\conclusionname}{Összefoglalás}
+ \newcommand{\solutionname}{Megoldás}
+ \newcommand{\propertyname}{Tulajdonság}
+ \newcommand{\introductionname}{Bevezetés}
+ \newcommand{\problemsetname}{Feladatok}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Frissítve:}
+ \newcommand{\historyname}{Korábbi verziók}
+}{\relax}
+
+\ifdefstring{\ELEGANT@lang}{de}{
+ \setlength\parindent{2em}
+ \renewcommand{\contentsname}{Inhaltsverzeichnis}
+ \newcommand\figref[1]{\textbf{Figur}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Tabelle}~\ref{#1}}
+ \renewcommand{\partname}{\color{structurecolor} Teil}
+ \renewcommand{\listfigurename}{Abbildungsverzeichnis}
+ \renewcommand{\listtablename}{Tabellenverzeichnis}
+ \renewcommand{\bibname}{Bibliographie}
+ \renewcommand{\appendixname}{Anhang}
+ \renewcommand{\chaptername}{Kapitel \thechapter}
+ \newcommand{\authorname}{\textbf{Autor: }}
+ \newcommand{\institutename}{\textbf{Institut: }}
+ \newcommand{\datename}{\textbf{Datum: }}
+ \newcommand{\versionname}{\textbf{Version: }}
+ \newcommand{\notename}{Notiz}
+ \newcommand{\proofname}{Beweis}
+ \newcommand{\problemname}{Problem}
+ \newcommand{\definitionname}{Definition}
+ \newcommand{\theoremname}{Theorem}
+ \newcommand{\axiomname}{Axiom}
+ \newcommand{\postulatename}{Postulat}
+ \newcommand{\lemmaname}{Lemma}
+ \newcommand{\propositionname}{Behauptung}
+ \newcommand{\corollaryname}{Corollary}
+ \newcommand{\examplename}{Beispiel}
+ \newcommand{\instancename}{Beispiel} %
+ \newcommand{\exercisename}{\"{U}bung}
+ \newcommand{\remarkname}{Anmerkung}
+ \newcommand{\assumptionname}{Annahme}
+ \newcommand{\conclusionname}{Abschluss}
+ \newcommand{\solutionname}{Aufl\"{o}sung}
+ \newcommand{\propertyname}{Property}
+ \newcommand{\introductionname}{Einleitung}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Updates:}
+ \newcommand{\historyname}{Version der Geschichte}
+}{\relax}
+
+\ifdefstring{\ELEGANT@lang}{es}{
+ \RequirePackage[spanish]{babel}
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\textbf{Figura}~\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Tabla}~\ref{#1}}
+ \renewcommand{\spanishchaptername}{Capítulo \thechapter}
+ \newcommand{\authorname}{\textbf{Autor: }}
+ \newcommand{\institutename}{\textbf{Instituto: }}
+ \newcommand{\datename}{\textbf{Fecha: }}
+ \newcommand{\versionname}{\textbf{Versión: }}
+ \newcommand{\notename}{Nota}
+ \newcommand{\proofname}{Demostración}
+ \newcommand{\problemname}{Problema}
+ \newcommand{\definitionname}{Definición}
+ \newcommand{\theoremname}{Teorema}
+ \newcommand{\axiomname}{Axioma}
+ \newcommand{\postulatename}{Postulado}
+ \newcommand{\lemmaname}{Lema}
+ \newcommand{\propositionname}{Proposición}
+ \newcommand{\corollaryname}{Corolario}
+ \newcommand{\examplename}{Ejemplo}
+ \newcommand{\exercisename}{Ejercicio}
+ \newcommand{\remarkname}{Comentario}
+ \newcommand{\assumptionname}{Asunto}
+ \newcommand{\conclusionname}{Conclusión}
+ \newcommand{\solutionname}{Solución}
+ \newcommand{\propertyname}{Propiedad}
+ \newcommand{\introductionname}{Introducción}
+ \newcommand{\problemsetname}{Ejercicio}
+ \newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Actualización:}
+ \newcommand{\historyname}{Historial de versiones}
+}{\relax}
+
+\ifdefstring{\ELEGANT@lang}{mn}{
+ \RequirePackage[mongolian]{babel}
+ \RequirePackage[utf8]{inputenc}
+ \RequirePackage[T2A]{fontenc}
+ \setlength\parindent{2em}
+ \newcommand\figref[1]{\textbf{Зураг}\ref{#1}}
+ \newcommand\tabref[1]{\textbf{Хүснэгт}\ref{#1}}
+ \renewcommand{\chaptername}{Бүлэг \thechapter}
+ \newcommand{\authorname}{\textbf{Зохиогч: }}
+ \newcommand{\institutename}{\textbf{Сургууль: }}
+ \newcommand{\datename}{\textbf{Огноо: }}
+ \newcommand{\versionname}{\textbf{Хувилбар: }}
+ \newcommand{\notename}{Тэмдэглэл}
+ \newcommand{\proofname}{Баталгаа}
+ \newcommand{\problemname}{Бодлого}
+ \newcommand{\definitionname}{Тодорхойлолт}
+ \newcommand{\theoremname}{Томьёо}
+ \newcommand{\axiomname}{Аксиом}
+ \newcommand{\postulatename}{Постулат}
+ \newcommand{\lemmaname}{Лемма}
+ \newcommand{\propositionname}{Таамаглал}
+ \newcommand{\corollaryname}{Үр дүн}
+ \newcommand{\examplename}{Жишээ}
+ \newcommand{\exercisename}{Дасгал}
+ \newcommand{\remarkname}{Тайлбар}
+ \newcommand{\assumptionname}{Урьдчилсан нөхцөл}
+ \newcommand{\conclusionname}{Дүгнэлт}
+ \newcommand{\solutionname}{Хариулт}
+ \newcommand{\propertyname}{Шинж чанар}
+ \newcommand{\introductionname}{Удиртгал}
+ \newcommand{\problemsetname}{Бодлогууд}
+ \newcommand\bioinfo[2]{\gdef@bioinfo{\textbf{#1}: #2}}
+ \newcommand{\updatename}{Шинэчлэлтүүд:}
+ \newcommand{\historyname}{Хувилбарын түүх}
+}{\relax}
+
+\graphicspath{{./figure/}{./figures/}{./image/}{./images/}{./graphics/}{./graphic/}{./pictures/}{./picture/}}
+
+\RequirePackage{tikz} %% load tikz without tikz
+\usetikzlibrary{backgrounds,calc,shadows,positioning,fit}
+\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
+ \node[shape=circle,draw,inner sep=1pt] (char) {#1};}}
+% https://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers
+
+\newcommand*{\eitemi}{\tikz \draw [baseline, ball color=structurecolor,draw=none] circle (2pt);}
+\newcommand*{\eitemii}{\tikz \draw [baseline, fill=structurecolor,draw=none,circular drop shadow] circle (2pt);}
+\newcommand*{\eitemiii}{\tikz \draw [baseline, fill=structurecolor,draw=none] circle (2pt);}
+\setlist[enumerate,1]{label=\color{structurecolor}\arabic*.}
+\setlist[enumerate,2]{label=\color{structurecolor}(\alph*).}
+\setlist[enumerate,3]{label=\color{structurecolor}\Roman*.}
+\setlist[enumerate,4]{label=\color{structurecolor}\Alph*.}
+\setlist[itemize,1]{label={\eitemi}}
+\setlist[itemize,2]{label={\eitemii}}
+\setlist[itemize,3]{label={\eitemiii}}
+
+
+\RequirePackage[center,pagestyles]{titlesec}
+\RequirePackage{apptools}
+\setcounter{secnumdepth}{5}
+\titleformat{\chapter}[\style]{\bfseries}{
+ \filcenter\LARGE\enspace\bfseries{\color{structurecolor} \IfAppendix{\appendixname\;\thechapter}{\chaptername}\;}}{1pt}{
+ \LARGE\bfseries\color{structurecolor}\filcenter}[]
+\titleformat{\section}[hang]{\bfseries}{
+ \Large\bfseries{\color{structurecolor}\thesection}\enspace}{1pt}{%
+ \color{structurecolor}\Large\bfseries\filright}
+\titleformat{\subsection}[hang]{\bfseries}{
+ \large\bfseries\color{structurecolor}\thesubsection\enspace}{1pt}{%
+ \color{structurecolor}\large\bfseries\filright}
+\titleformat{\subsubsection}[hang]{\bfseries}{
+ \large\bfseries\color{structurecolor}\thesubsubsection\enspace}{1pt}{%
+ \color{structurecolor}\large\bfseries\filright}
+
+\titlespacing{\chapter}{0pt}{-20pt}{1.3\baselineskip}
+%\titlespacing{\subsection}{0pt}{0.5\baselineskip}{-\baselineskip}
+
+
+
+
+%%define the note and proof environment
+\RequirePackage{pifont,manfnt,bbding}
+\RequirePackage[many]{tcolorbox}
+% \newlength{\normalparindent}
+% \setlength{\normalparindent}{\parindent}
+\ifdefstring{\ELEGANT@mode}{fancy}{
+ \tcbset{
+ common/.style={
+ fontupper=\citshape,
+ lower separated=false,
+ % before upper={\setlength{\parindent}{\normalparindent}},
+ coltitle=white,
+ colback=gray!5,
+ boxrule=0.5pt,
+ fonttitle=\bfseries,
+ enhanced,
+ breakable,
+ top=8pt,
+ before skip=8pt,
+ attach boxed title to top left={
+ yshift=-0.11in,
+ xshift=0.15in},
+ boxed title style={
+ boxrule=0pt,
+ colframe=white,
+ arc=0pt,
+ outer arc=0pt},
+ separator sign={.},},
+ defstyle/.style={
+ common,
+ colframe=main,
+ colback=main!5,
+ colbacktitle=main,
+ overlay unbroken and last={
+ \node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
+ \textcolor{main}{$\clubsuit$}};}},
+ thmstyle/.style={
+ common,
+ colframe=second,
+ colback=second!5,
+ colbacktitle=second,
+ overlay unbroken and last={
+ \node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
+ \textcolor{second}{$\heartsuit$}};}},
+ propstyle/.style={
+ common,
+ colframe=third,
+ colback=third!5,
+ colbacktitle=third,
+ overlay unbroken and last={
+ \node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
+ \textcolor{third}{$\spadesuit$}};}},}
+ % \newtcbtheorem[auto counter,number within=chapter]{definition}{\definitionname}{defstyle}{def}
+ \DeclareTColorBox[auto counter,number within=chapter]{definition}{ o t\label g }{
+ common,defstyle,
+ IfValueTF={#1}{title={\definitionname~\thetcbcounter\ (#1)}}{title=\definitionname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{theorem}{\theoremname}{thmstyle}{thm}
+ \DeclareTColorBox[auto counter,number within=chapter]{theorem}{ o t\label g }{
+ common,thmstyle,
+ IfValueTF={#1}{title={\theoremname~\thetcbcounter\ (#1)}}{title=\theoremname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{postulate}{\postulatename}{thmstyle}{pos}
+ \DeclareTColorBox[auto counter,number within=chapter]{postulate}{ o t\label g }{
+ common,thmstyle,
+ IfValueTF={#1}{title={\postulatename~\thetcbcounter\ (#1)}}{title=\postulatename~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{axiom}{\axiomname}{thmstyle}{axi}
+ \DeclareTColorBox[auto counter,number within=chapter]{axiom}{ o t\label g }{
+ common,thmstyle,
+ IfValueTF={#1}{title={\axiomname~\thetcbcounter\ (#1)}}{title=\axiomname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{corollary}{\corollaryname}{thmstyle}{cor}
+ \DeclareTColorBox[auto counter,number within=chapter]{corollary}{ o t\label g }{
+ common,thmstyle,
+ IfValueTF={#1}{title={\corollaryname~\thetcbcounter\ (#1)}}{title=\corollaryname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{lemma}{\lemmaname}{thmstyle}{lem}
+ \DeclareTColorBox[auto counter,number within=chapter]{lemma}{ o t\label g }{
+ common,thmstyle,
+ IfValueTF={#1}{title={\lemmaname~\thetcbcounter\ (#1)}}{title=\lemmaname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}
+ % \newtcbtheorem[auto counter,number within=chapter]{proposition}{\propositionname}{propstyle}{pro}
+ \DeclareTColorBox[auto counter,number within=chapter]{proposition}{ o t\label g }{
+ common,propstyle,
+ IfValueTF={#1}{title={\propositionname~\thetcbcounter\ (#1)}}{title=\propositionname~\thetcbcounter},
+ IfBooleanTF={#2}{label=#3}{}}}{\relax}
+
+
+\ifdefstring{\ELEGANT@mode}{simple}{
+ \let\openbox\relax
+ \RequirePackage{amsthm}
+ \let\proof\relax
+ % \let\proofname\relax
+ \let\endproof\relax
+
+ % declare a new theorem style
+ \newtheoremstyle{defstyle}{3pt}{3pt}{\citshape}{-3pt}{
+ \bfseries\color{main}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}
+ \newtheoremstyle{thmstyle}{3pt}{3pt}{\citshape}{-3pt}{
+ \bfseries\color{second}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}
+ \newtheoremstyle{prostyle}{3pt}{3pt}{\citshape}{-3pt}{
+ \bfseries\color{third}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}
+
+
+ \theoremstyle{defstyle} % definition style
+ \newtheorem{definition}{\definitionname}[chapter]
+
+ \theoremstyle{thmstyle} %theorem style
+ \newtheorem{theorem}{\theoremname}[chapter]
+ \newtheorem{lemma}{\lemmaname}[chapter]
+ \newtheorem{corollary}{\corollaryname}[chapter]
+ \newtheorem{postulate}{\postulatename}[chapter]
+ \newtheorem{axiom}{\axiomname}[chapter]
+
+ \theoremstyle{prostyle} % proposition style
+ \newtheorem{proposition}{\propositionname}[chapter]
+}{\relax}
+
+% main(green-def): example exercise problem solution
+% second(orange-thm): proof note remark
+% third(blue-prop): assumptions property conclusion custom
+
+%% Example with counter
+\newcounter{exam}[chapter]
+\setcounter{exam}{0}
+\renewcommand{\theexam}{\thechapter.\arabic{exam}}
+\newenvironment{example}[1][]{
+ \refstepcounter{exam}
+ \par\noindent\textbf{\color{main}{\examplename} \theexam #1 }\rmfamily}{
+ \par\ignorespacesafterend}
+
+%% Exercise with counter
+\newcounter{exer}[chapter]
+\setcounter{exer}{0}
+\renewcommand{\theexer}{\thechapter.\arabic{exer}}
+\newenvironment{exercise}[1][]{
+ \refstepcounter{exer}
+ \par\noindent\makebox[-3pt][r]{
+ \scriptsize\color{red!90}\HandPencilLeft\quad}
+ \textbf{\color{main}{\exercisename} \theexer #1 }\rmfamily}{
+ \par\ignorespacesafterend}
+
+%% Problem with counter
+\newcounter{prob}[chapter]
+\setcounter{prob}{0}
+\renewcommand{\theprob}{\thechapter.\arabic{prob}}
+\newenvironment{problem}[1][]{
+ \refstepcounter{prob}
+ \par\noindent\textbf{\color{main}{\problemname} \theprob #1 }\rmfamily}{
+ \par\ignorespacesafterend}
+
+\newenvironment{note}{
+ \par\noindent\makebox[-3pt][r]{
+ \scriptsize\color{red!90}\textdbend\quad}
+ \textbf{\color{second}\notename} \citshape}{\par}
+
+\newenvironment{proof}{
+ \par\noindent\textbf{\color{second}\proofname\;}
+ \color{black!90}\cfs}{
+ % \hfill$\Box$\quad
+ \par}
+
+\newenvironment{solution}{\par\noindent\textbf{\color{main}\solutionname} \citshape}{\par}
+\newenvironment{remark}{\noindent\textbf{\color{second}\remarkname}}{\par}
+\newenvironment{assumption}{\par\noindent\textbf{\color{third}\assumptionname} \citshape}{\par}
+\newenvironment{conclusion}{\par\noindent\textbf{\color{third}\conclusionname} \citshape}{\par}
+\newenvironment{property}{\par\noindent\textbf{\color{third}\propertyname} \citshape}{\par}
+\newenvironment{custom}[1]{\par\noindent\textbf{\color{third} #1} \citshape}{\par}
+
+\RequirePackage{multicol}
+\tcbset{
+ introductionsty/.style={
+ enhanced,
+ breakable,
+ colback=structurecolor!10,
+ colframe=structurecolor,
+ fonttitle=\bfseries,
+ colbacktitle=structurecolor,
+ fontupper=\citshape,
+ attach boxed title to top center={yshift=-3mm,yshifttext=-1mm},
+ boxrule=0pt,
+ toprule=0.5pt,
+ bottomrule=0.5pt,
+ top=8pt,
+ before skip=8pt,
+ sharp corners
+ },
+}
+
+\newenvironment{introduction}[1][\introductionname]{
+ \begin{tcolorbox}[introductionsty,title={#1}]
+ \begin{multicols}{2}
+ \begin{itemize}[label=\textcolor{structurecolor}{\upshape\scriptsize\SquareShadowBottomRight}]}{
+ \end{itemize}
+ \end{multicols}
+ \end{tcolorbox}}
+
+\RequirePackage{adforn}
+
+\newenvironment{problemset}[1][\chaptername~\;\exercisename]{
+ \begin{center}
+ \phantomsection\addcontentsline{toc}{section}{\texorpdfstring{\chaptername\;\exercisename}{\exercisename}}
+ % \markboth{#1}{\rightmark}
+ \markright{#1}
+ \textcolor{structurecolor}{\Large\bfseries\adftripleflourishleft~#1~\adftripleflourishright}
+ \end{center}
+ \begin{enumerate}}{
+ \end{enumerate}}
+
+\def\relsec{\endgroup start}
+\def\endrelsec{end\begingroup\def \@currenvir {relsec}}
+
+\ifdefstring{\ELEGANT@result}{noanswer}{
+ \AtBeginDocument{
+ \excludecomment{solution}
+ \excludecomment{proof}
+ \excludecomment{inline}
+ }
+}{\relax}
+
+
+%页眉页脚
+\RequirePackage{fancyhdr}
+\fancyhf{}
+
+
+\fancyfoot[c]{\color{structurecolor}\scriptsize\thepage}
+\if@twoside
+ \fancyhead[EL]{\color{structurecolor}\cnormal\leftmark}
+ \fancyhead[OR]{\color{structurecolor}\cnormal\rightmark}
+\else
+ \fancyhead[R]{\color{structurecolor}\cnormal\rightmark}
+\fi
+
+\renewcommand{\headrule}{\color{structurecolor}\hrule width\textwidth}
+\pagestyle{fancy}
+\renewcommand{\headrulewidth}{1pt}
+% \renewcommand{\headrule}{}
+\fancypagestyle{plain}{\renewcommand{\headrulewidth}{0pt}\fancyhf{}\renewcommand{\headrule}{}}
+\renewcommand{\sectionmark}[1]{\markright{\thesection\, #1}{}}
+\renewcommand{\chaptermark}[1]{\markboth{\chaptername\, #1}{}}
+
+
+
+\renewcommand*{\maketitle}{%
+\hypersetup{pageanchor=false}
+\pagenumbering{Alph}
+\begin{titlepage}
+ \newgeometry{margin = 0in}
+ \parindent=0pt
+ \ifdefstring{\ELEGANT@device}{normal}{
+ \ifcsname @cover\endcsname
+ \includegraphics[width=\linewidth]{\@cover}
+ \else
+ \includegraphics[width=\linewidth]{example-image}
+ \fi
+ }{\relax}
+ \ifdefstring{\ELEGANT@device}{pad}{
+ \ifcsname @cover\endcsname
+ \includegraphics[trim=0 26bp 0 26bp,clip=true, width=\linewidth]{\@cover}
+ \else
+ \includegraphics[trim=0 26bp 0 26bp,clip=true, width=\linewidth]{example-image}
+ \fi
+ }{\relax}
+ \setlength{\fboxsep}{0pt}
+ \colorbox{coverlinecolor}{\makebox[\linewidth][c]{\shortstack[c]{\vspace{0.5in}}}}
+ \vfill
+ \vskip-2ex
+ \hspace{2em}
+ \parbox{0.8\textwidth}{
+ \bfseries\Huge
+ \ifcsname @title\endcsname \@title \fi
+ \par}
+ \vfill
+ \vspace{-1.0cm}
+ \setstretch{2.5}
+ \hspace{2.5em}
+ \begin{minipage}[c]{0.67\linewidth}
+ {\color{darkgray}\bfseries\Large
+ \ifcsname @subtitle\endcsname\@subtitle\\[2ex]\fi}
+ \color{gray}\normalsize
+ {\renewcommand{\arraystretch}{0.618}
+ \begin{tabular}{l}
+ % \ifcsname @author\endcsname \authorname \@author\\\fi
+ \ifx\@author\empty\else\authorname\cnormal\@author\\ \fi
+ \ifcsname @institute\endcsname \institutename \cnormal\@institute\\ \fi
+ % \ifcsname @date\endcsname \@date\\\fi
+ \ifx\@date\empty\else\datename\cnormal\@date \\ \fi
+ \ifcsname @version\endcsname \cnormal\versionname\@version\\ \fi
+ \ifcsname @bioinfo\endcsname \cnormal\@bioinfo\\ \fi
+ \end{tabular}}
+ \end{minipage}
+ \begin{minipage}[c]{0.27\linewidth}
+ \begin{tikzpicture}[remember picture,overlay]
+ \begin{pgfonlayer}{background}
+ \node[opacity=0.8,
+ anchor=south east,
+ outer sep=0pt,
+ inner sep=0pt] at ($(current page.south east) +(-0.8in,1.5in)$) {
+ \ifcsname @logo\endcsname\includegraphics[width=4.2cm]{\@logo}\fi};
+ \end{pgfonlayer}
+ \end{tikzpicture}
+ \end{minipage}
+ \vfill
+ \begin{center}
+ \setstretch{1.3}
+ \parbox[t]{0.7\textwidth}{\centering \citshape
+ \ifcsname @extrainfo\endcsname\@extrainfo\fi}
+ \end{center}
+ \vfill
+\end{titlepage}
+\restoregeometry
+\thispagestyle{empty}}
+
+
+\newcommand{\dollar}{\mbox{\textdollar}}
+
+\RequirePackage{listings}
+\renewcommand{\ttdefault}{cmtt}
+\lstdefinestyle{mystyle}{
+ basicstyle=%
+ \ttfamily
+ \lst@ifdisplaystyle\small\fi
+}
+
+% \lstset{basicstyle=\ttfamily,style=mystyle,breaklines=true}
+
+% \definecolor{lightgrey}{rgb}{0.9,0.9,0.9}
+% \definecolor{frenchplum}{RGB}{190,20,83}
+% \lstset{
+% language=Python,
+% numbers=left,
+% numberstyle=\tiny\color{gray},
+% mathescape=false,
+% breaklines=true,
+% keywordstyle=\color{winered},
+% commentstyle=\color{gray},
+% emph={elegantpaper,fontenc,fontspec,xeCJK,citestyle,FiraMono,xunicode,newtxmath,figure,fig,image,img,table,itemize,enumerate,newtxtext,newtxtt,ctex,microtype,description,times,booktabs,tabular,PDFLaTeX,XeLaTeX,type1cm,BibTeX,device,color,mode,lang,amsthm,tcolorbox,titlestyle,cite,ctex,listings,base,math,scheme,toc,esint,chinesefont,amsmath,bibstyle,natbib,pgfornament},
+% emphstyle={\color{frenchplum}},
+% morekeywords={DeclareSymbolFont,SetSymbolFont,toprule,midrule,bottomrule,institute,version,includegraphics,setmainfont,setsansfont,setmonofont ,setCJKmainfont,setCJKsansfont,setCJKmonofont,RequirePackage,figref,tabref,email,maketitle,keywords,definecolor,extrainfo,logo,cover,subtitle,appendix,chapter,hypersetup,mainmatter,frontmatter,tableofcontents,elegantpar,heiti,kaishu,lstset,pagecolor,zhnumber,marginpar,part,equote,marginnote,bioinfo,datechange,listofchange,lvert,lastpage,songti,heiti,fangsong,setCJKfamilyfont,textbf},
+% frame=single,
+% tabsize=2,
+% rulecolor=\color{structurecolor},
+% framerule=0.2pt,
+% columns=flexible
+% % backgroundcolor=\color{lightgrey}
+% }
+
+%language=[LaTeX]TeX,
+% texcsstyle=*\color{winered},
+
+\lstset{basicstyle=\ttfamily,style=mystyle,breaklines=true}
+\lstset{
+ columns=fixed,
+ numbers=left, % 在左侧显示行号
+ numberstyle=\tiny,keywordstyle=\color{blue!70}, % 设定行号格式
+ frame=none, % 不显示背景边框
+ backgroundcolor=\color[RGB]{245,245,244}, % 设定背景颜色
+ keywordstyle=\color[RGB]{40,40,255}, % 设定关键字颜色
+ numberstyle=\footnotesize\color{darkgray},
+ commentstyle=\it\color[RGB]{0,96,96}, % 设置代码注释的格式
+ stringstyle=\rmfamily\slshape\color[RGB]{128,0,0}, % 设置字符串格式
+ showstringspaces=false, % 不显示字符串中的空格
+ language=Python, % 设置语言
+ frame=shadowbox,
+}
+
+\newcommand\bmmax{0}
+\RequirePackage{bm}
+
+% add the list of change history
+\newcommand{\dateinfoline}[2]{
+ \noindent\makebox[0pt][r]{%
+ \makebox[-3em][r]{%
+ \small
+ \textbf{\textcolor{structurecolor}{#1}}}\;\;}%
+ {\citshape\updatename\ignorespaces#2}}
+
+\newcommand{\datechange}[2]{%
+ \noindent{\makebox[\textwidth][r]{\color{structurecolor}\rule{1.15\textwidth}{.4pt}}}
+ \dateinfoline{#1}{#2}
+ \addcontentsline{dates}{section}{#1 -- #2}}
+
+\newcommand{\listofchanges}{%
+ \begingroup
+ \renewcommand{\contentsname}{\historyname}
+ \let\old@starttoc\@starttoc
+ \def\@starttoc##1{
+ \old@starttoc{dates}}
+ \tableofcontents%
+ \endgroup}
+% https://tex.stackexchange.com/questions/472931/list-of-all-dates-in-a-document
+
+\newenvironment{change}{
+ \begin{enumerate}[label=\small\protect\circled{\arabic*}]}{
+ \end{enumerate}}
+
+\addbibresource[location=local]{reference.bib}
+
+\renewcommand\tableofcontents{%
+ \hypersetup{linktoc=all, linkcolor=black}
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse
+ \fi
+ \chapter*{\contentsname
+ \@mkboth{%
+ \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
+ \ifdefstring{\ELEGANT@toc}{twocol}{
+ \setlength{\columnsep}{2em}
+ \begin{multicols}{2}%
+ \@starttoc{toc}
+ \end{multicols}}{
+ \@starttoc{toc}}
+ \if@restonecol\twocolumn\fi}
+
+
+\renewcommand*{\cleardoublepage}{\clearpage\if@twoside \ifodd\c@page\else
+\hbox{}%
+\thispagestyle{empty}%
+\newpage%
+\if@twocolumn\hbox{}\newpage\fi\fi\fi}
diff --git a/figure/cover.jpeg b/figure/cover.jpeg
new file mode 100644
index 0000000..70f7846
Binary files /dev/null and b/figure/cover.jpeg differ
diff --git a/figure/cover_bak.jpg b/figure/cover_bak.jpg
new file mode 100644
index 0000000..ac6395f
Binary files /dev/null and b/figure/cover_bak.jpg differ
diff --git a/figure/cover_bak3.jpeg b/figure/cover_bak3.jpeg
new file mode 100644
index 0000000..c8e62fc
Binary files /dev/null and b/figure/cover_bak3.jpeg differ
diff --git a/figure/logo-blue_bak.png b/figure/logo-blue_bak.png
new file mode 100644
index 0000000..5b6db83
Binary files /dev/null and b/figure/logo-blue_bak.png differ
diff --git a/figure/logo.jpg b/figure/logo.jpg
new file mode 100755
index 0000000..2b12fa7
Binary files /dev/null and b/figure/logo.jpg differ
diff --git a/image/.DS_Store b/image/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/image/.DS_Store differ
diff --git a/image/cert.pdf b/image/cert.pdf
new file mode 100644
index 0000000..0ff3e50
Binary files /dev/null and b/image/cert.pdf differ
diff --git a/image/donate.jpg b/image/donate.jpg
new file mode 100644
index 0000000..60741ef
Binary files /dev/null and b/image/donate.jpg differ
diff --git a/image/fastspeech_arch_paper.png b/image/fastspeech_arch_paper.png
new file mode 100644
index 0000000..34ff3de
Binary files /dev/null and b/image/fastspeech_arch_paper.png differ
diff --git a/image/founder.png b/image/founder.png
new file mode 100644
index 0000000..7f68e73
Binary files /dev/null and b/image/founder.png differ
diff --git a/image/frequency_f0.png b/image/frequency_f0.png
new file mode 100644
index 0000000..dfb977f
Binary files /dev/null and b/image/frequency_f0.png differ
diff --git a/image/frequency_spectrum.jpeg b/image/frequency_spectrum.jpeg
new file mode 100644
index 0000000..f979511
Binary files /dev/null and b/image/frequency_spectrum.jpeg differ
diff --git a/image/frequency_time_fig.png b/image/frequency_time_fig.png
new file mode 100644
index 0000000..110f012
Binary files /dev/null and b/image/frequency_time_fig.png differ
diff --git a/image/human_speech_arch.png b/image/human_speech_arch.png
new file mode 100644
index 0000000..a17e590
Binary files /dev/null and b/image/human_speech_arch.png differ
diff --git a/image/ipa_consant.png b/image/ipa_consant.png
new file mode 100644
index 0000000..0fcc947
Binary files /dev/null and b/image/ipa_consant.png differ
diff --git a/image/ipa_consant_not.png b/image/ipa_consant_not.png
new file mode 100644
index 0000000..431b065
Binary files /dev/null and b/image/ipa_consant_not.png differ
diff --git a/image/loudness_curve.png b/image/loudness_curve.png
new file mode 100644
index 0000000..757cfa4
Binary files /dev/null and b/image/loudness_curve.png differ
diff --git a/image/mel_spectrogram.png b/image/mel_spectrogram.png
new file mode 100644
index 0000000..d42c51c
Binary files /dev/null and b/image/mel_spectrogram.png differ
diff --git a/image/mel_vs_f.png b/image/mel_vs_f.png
new file mode 100644
index 0000000..d506728
Binary files /dev/null and b/image/mel_vs_f.png differ
diff --git a/image/mfcc.png b/image/mfcc.png
new file mode 100644
index 0000000..d890deb
Binary files /dev/null and b/image/mfcc.png differ
diff --git a/image/other_alphabet.png b/image/other_alphabet.png
new file mode 100644
index 0000000..b46d269
Binary files /dev/null and b/image/other_alphabet.png differ
diff --git a/image/sample_praat.png b/image/sample_praat.png
new file mode 100644
index 0000000..5ade905
Binary files /dev/null and b/image/sample_praat.png differ
diff --git a/image/scatter.jpg b/image/scatter.jpg
new file mode 100644
index 0000000..6692f1f
Binary files /dev/null and b/image/scatter.jpg differ
diff --git a/image/tacotron2_arch.png b/image/tacotron2_arch.png
new file mode 100644
index 0000000..af6672f
Binary files /dev/null and b/image/tacotron2_arch.png differ
diff --git a/image/tacotron2_decoder.png b/image/tacotron2_decoder.png
new file mode 100644
index 0000000..624179e
Binary files /dev/null and b/image/tacotron2_decoder.png differ
diff --git "a/image/text_to_speech-\350\257\255\351\237\263\345\220\210\346\210\220\345\267\245\344\275\234\346\265\201.png" "b/image/text_to_speech-\350\257\255\351\237\263\345\220\210\346\210\220\345\267\245\344\275\234\346\265\201.png"
new file mode 100644
index 0000000..005fb86
Binary files /dev/null and "b/image/text_to_speech-\350\257\255\351\237\263\345\220\210\346\210\220\345\267\245\344\275\234\346\265\201.png" differ
diff --git a/image/text_to_speech.drawio b/image/text_to_speech.drawio
new file mode 100644
index 0000000..d3442b1
--- /dev/null
+++ b/image/text_to_speech.drawio
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/image/text_to_speech_acoustic_feature.png b/image/text_to_speech_acoustic_feature.png
new file mode 100644
index 0000000..4fb6a34
Binary files /dev/null and b/image/text_to_speech_acoustic_feature.png differ
diff --git a/image/text_to_speech_arch.png b/image/text_to_speech_arch.png
new file mode 100644
index 0000000..3a5db78
Binary files /dev/null and b/image/text_to_speech_arch.png differ
diff --git a/image/text_to_speech_history.png b/image/text_to_speech_history.png
new file mode 100644
index 0000000..92e59f3
Binary files /dev/null and b/image/text_to_speech_history.png differ
diff --git a/image/text_to_speech_knowledge.png b/image/text_to_speech_knowledge.png
new file mode 100644
index 0000000..46244c3
Binary files /dev/null and b/image/text_to_speech_knowledge.png differ
diff --git a/image/vits_arch.png b/image/vits_arch.png
new file mode 100644
index 0000000..113d3a8
Binary files /dev/null and b/image/vits_arch.png differ
diff --git a/image/vocoder_nhv_arch.png b/image/vocoder_nhv_arch.png
new file mode 100644
index 0000000..b80ccfe
Binary files /dev/null and b/image/vocoder_nhv_arch.png differ
diff --git a/image/vocoder_nhv_harmonic_sample.png b/image/vocoder_nhv_harmonic_sample.png
new file mode 100644
index 0000000..dabace7
Binary files /dev/null and b/image/vocoder_nhv_harmonic_sample.png differ
diff --git a/image/vocoder_nhv_inference.png b/image/vocoder_nhv_inference.png
new file mode 100644
index 0000000..2ba14e4
Binary files /dev/null and b/image/vocoder_nhv_inference.png differ
diff --git a/image/vocoder_nhv_nn_filter_estimator.png b/image/vocoder_nhv_nn_filter_estimator.png
new file mode 100644
index 0000000..eda21cf
Binary files /dev/null and b/image/vocoder_nhv_nn_filter_estimator.png differ
diff --git a/image/vocoder_nhv_source_filter.png b/image/vocoder_nhv_source_filter.png
new file mode 100644
index 0000000..b5a5da9
Binary files /dev/null and b/image/vocoder_nhv_source_filter.png differ
diff --git a/image/vocoder_nhv_source_filter_old.png b/image/vocoder_nhv_source_filter_old.png
new file mode 100644
index 0000000..d12d65d
Binary files /dev/null and b/image/vocoder_nhv_source_filter_old.png differ
diff --git a/image/vocoder_pitch_harmonic.png b/image/vocoder_pitch_harmonic.png
new file mode 100644
index 0000000..6560355
Binary files /dev/null and b/image/vocoder_pitch_harmonic.png differ
diff --git a/image/vocoder_world_arch.png b/image/vocoder_world_arch.png
new file mode 100644
index 0000000..51a3c43
Binary files /dev/null and b/image/vocoder_world_arch.png differ
diff --git a/image/vocoder_world_dio1.png b/image/vocoder_world_dio1.png
new file mode 100644
index 0000000..d51a0ff
Binary files /dev/null and b/image/vocoder_world_dio1.png differ
diff --git a/image/vocoder_world_sp.png b/image/vocoder_world_sp.png
new file mode 100644
index 0000000..37ccbd1
Binary files /dev/null and b/image/vocoder_world_sp.png differ
diff --git a/image/vocoder_world_synthesis.png b/image/vocoder_world_synthesis.png
new file mode 100644
index 0000000..237878e
Binary files /dev/null and b/image/vocoder_world_synthesis.png differ
diff --git a/image/vowel.png b/image/vowel.png
new file mode 100644
index 0000000..7dc5d11
Binary files /dev/null and b/image/vowel.png differ
diff --git a/image/waveform.png b/image/waveform.png
new file mode 100644
index 0000000..a2e8401
Binary files /dev/null and b/image/waveform.png differ
diff --git a/reference.bib b/reference.bib
new file mode 100644
index 0000000..d5f2115
--- /dev/null
+++ b/reference.bib
@@ -0,0 +1,79 @@
+
+@article{en3,
+ title={{The Mechanism and Effectiveness of Credit Scoring of P2P Lending Platform: Evidence from Renrendai.com}},
+ author={Li, Qiang and Chen, Liwen and Zeng, Yong},
+ journal={China Finance Review International},
+ volume={8},
+ number={3},
+ pages={256--274},
+ year={2018},
+ publisher={Emerald Publishing Limited}
+}
+
+
+@article{en2,
+ author = {Carlstrom, Charles T and Fuerst, Timothy S},
+ title = {{Agency Costs, Net Worth, and Business Fluctuations: A Computable General Equilibrium Analysis}},
+ journal = {The American Economic Review},
+ pages = {893-910},
+ ISSN = {0002-8282},
+ year = {1997},
+ type = {Journal Article}
+}
+
+@article{en1,
+ author = {Quadrini, Vincenzo},
+ title = {{Financial Frictions in Macroeconomic Fluctuations}},
+ journal = {FRB Richmond Economic Quarterly},
+ volume = {97},
+ number = {3},
+ pages = {209-254},
+ year = {2011},
+ type = {Journal Article}
+}
+
+@article{cn1,
+ author = {方军雄},
+ key = {fang1 jun1 xiong2},
+ title = {{所有制、制度环境与信贷资金配置}},
+ journal = {经济研究},
+ number = {12},
+ pages = {82-92},
+ ISSN = {0577-9154},
+ year = {2007},
+ type = {Journal Article}
+}
+
+@article{cn2,
+ author = {刘凤良 and 章潇萌 and 于泽},
+ key = {liu2 feng4 liang2 zhang1 xiao1 meng2 yu2 ze2},
+ title = {{高投资、结构失衡与价格指数二元分化}},
+ journal = {金融研究},
+ number = {02},
+ pages = {54-69},
+ ISSN = {1002-7246},
+ year = {2017},
+ type = {Journal Article}
+}
+
+@article{cn3,
+ author = {吕捷 and 王高望},
+ key = {lv3 jie2 wang2 gao1 wang4},
+ title = {{CPI 与 PPI “背离”的结构性解释}},
+ journal = {经济研究},
+ volume = {50},
+ number = {04},
+ pages = {136-149},
+ ISSN = {0577-9154},
+ year = {2015},
+ type = {Journal Article}
+}
+
+@article{griffinlim1,
+ author = {李飞腾},
+ journal = {https://zhuanlan.zhihu.com/p/25002923},
+ number = {},
+ title = {Build End-To-End TTS Tacotron: Griffin Lim 信号估计算法},
+ volume = {},
+ year = {}
+}
diff --git a/text_to_speech.aux b/text_to_speech.aux
new file mode 100644
index 0000000..ea4b73d
--- /dev/null
+++ b/text_to_speech.aux
@@ -0,0 +1,264 @@
+\relax
+\providecommand\hyper@newdestlabel[2]{}
+\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
+\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
+\global\let\oldcontentsline\contentsline
+\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
+\global\let\oldnewlabel\newlabel
+\gdef\newlabel#1#2{\newlabelxx{#1}#2}
+\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
+\AtEndDocument{\ifx\hyper@anchor\@undefined
+\let\contentsline\oldcontentsline
+\let\newlabel\oldnewlabel
+\fi}
+\fi}
+\global\let\hyper@last\relax
+\gdef\HyperFirstAtBeginDocument#1{#1}
+\providecommand*\HyPL@Entry[1]{}
+\@writefile{toc}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lof}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\@writefile{lot}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
+\abx@aux@refcontext{none/global//global/global}
+\HyPL@Entry{0<>}
+\pgfsyspdfmark {pgfid1}{28202053}{12158662}
+\HyPL@Entry{1<>}
+\HyPL@Entry{6<>}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {1}语音合成概述}{1}{chapter.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.1}背景和概述}{1}{section.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.1}背景介绍}{1}{subsection.1.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.2}语音合成概述}{1}{subsection.1.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.3}语音合成的历史}{1}{subsection.1.1.3}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces 人类发声机理 \relax }}{2}{figure.caption.3}\protected@file@percent }
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:human_speech_arch}{{1.1}{2}{人类发声机理 \relax }{figure.caption.3}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1.2}{\ignorespaces 语音合成系统框图 \relax }}{2}{figure.caption.4}\protected@file@percent }
+\newlabel{fig:text_to_speech_arch}{{1.2}{2}{语音合成系统框图 \relax }{figure.caption.4}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1.3}{\ignorespaces 语音合成发展历史 \relax }}{2}{figure.caption.5}\protected@file@percent }
+\newlabel{fig:text_to_speech_history}{{1.3}{2}{语音合成发展历史 \relax }{figure.caption.5}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.4}当代语音合成框架}{3}{subsection.1.1.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.2}Awesome List}{4}{section.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.3}参考书籍}{4}{section.1.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.4}语音相关的会议、期刊、比赛和公司}{4}{section.1.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.1}会议}{4}{subsection.1.4.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.2}期刊}{5}{subsection.1.4.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.3}最新论文}{5}{subsection.1.4.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.4}比赛}{5}{subsection.1.4.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.5}公司}{5}{subsection.1.4.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.4.6}微信公众号}{5}{subsection.1.4.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.5}开源资料}{6}{section.1.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.1}中文数据集}{6}{subsection.1.5.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.2}英文数据集}{6}{subsection.1.5.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.3}情感数据集}{7}{subsection.1.5.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.4}其它数据集}{7}{subsection.1.5.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.5}开源工具}{7}{subsection.1.5.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.5.6}开源项目}{7}{subsection.1.5.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.6}语音合成评价指标}{8}{section.1.6}\protected@file@percent }
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {1.1}{\ignorespaces 主观意见得分的评估标准\relax }}{8}{table.caption.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1.7}平均意见得分的测评要求与方法}{9}{section.1.7}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.1}实验要求}{9}{subsection.1.7.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.2}实验方法}{9}{subsection.1.7.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.3}实验步骤}{9}{subsection.1.7.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.4}实验设计}{9}{subsection.1.7.4}\protected@file@percent }
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {1.2}{\ignorespaces 语音测评设置\relax }}{9}{table.caption.7}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.5}实验数据处理}{10}{subsection.1.7.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {2}语音信号基础}{11}{chapter.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.1}参考资料}{11}{section.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.2}语音基本概念}{11}{section.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.1}能量}{11}{subsection.2.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.2}短时能量}{11}{subsection.2.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.3}声强和声强级}{11}{subsection.2.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.4}响度}{11}{subsection.2.2.4}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces 等响曲线 \relax }}{12}{figure.caption.8}\protected@file@percent }
+\newlabel{fig:loudness_curve}{{2.1}{12}{等响曲线 \relax }{figure.caption.8}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.5}过零率}{12}{subsection.2.2.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.6}共振峰}{12}{subsection.2.2.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.7}基频和基音周期}{12}{subsection.2.2.7}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces 共振峰 \relax }}{13}{figure.caption.9}\protected@file@percent }
+\newlabel{fig:frequency_f0}{{2.2}{13}{共振峰 \relax }{figure.caption.9}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.8}音高}{13}{subsection.2.2.8}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2.9}MFCC和语谱图}{13}{subsection.2.2.9}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces 频谱图 \relax }}{14}{figure.caption.10}\protected@file@percent }
+\newlabel{fig:frequency_spectrum}{{2.3}{14}{频谱图 \relax }{figure.caption.10}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.4}{\ignorespaces 波形和对应的语谱图 \relax }}{14}{figure.caption.11}\protected@file@percent }
+\newlabel{fig:frequency_time_fig}{{2.4}{14}{波形和对应的语谱图 \relax }{figure.caption.11}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.3}语言学}{14}{section.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}国际音标简介}{15}{subsection.2.3.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}IPA的字母和发音}{15}{subsection.2.3.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.5}{\ignorespaces 肺部气流辅音(59个) \relax }}{15}{figure.caption.12}\protected@file@percent }
+\newlabel{fig:ipa_consant}{{2.5}{15}{肺部气流辅音(59个) \relax }{figure.caption.12}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.6}{\ignorespaces 非肺部气流辅音(10个) \relax }}{16}{figure.caption.13}\protected@file@percent }
+\newlabel{fig:ipa_consant_not}{{2.6}{16}{非肺部气流辅音(10个) \relax }{figure.caption.13}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.7}{\ignorespaces (元音) \relax }}{16}{figure.caption.14}\protected@file@percent }
+\newlabel{fig:vowel}{{2.7}{16}{(元音) \relax }{figure.caption.14}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2.8}{\ignorespaces (其它字母) \relax }}{16}{figure.caption.15}\protected@file@percent }
+\newlabel{fig:other_alphabet}{{2.8}{16}{(其它字母) \relax }{figure.caption.15}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.3}音系学}{17}{subsection.2.3.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.4}参考资料}{17}{subsection.2.3.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.4}音频格式}{18}{section.2.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.5}数字信号处理}{18}{section.2.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}模数转换}{18}{subsection.2.5.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}频谱泄露}{18}{subsection.2.5.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.3}频率分辨率}{18}{subsection.2.5.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2.6}其它概念}{18}{section.2.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {3}语音特征提取}{20}{chapter.3}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.1}预处理}{20}{section.3.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}预加重}{20}{subsection.3.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}分帧}{20}{subsection.3.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}加窗}{20}{subsection.3.1.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.2}短时傅里叶变换}{21}{section.3.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.3}听觉特性}{22}{section.3.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}梅尔滤波}{22}{subsection.3.3.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces mel刻度和频率之间的关系 \relax }}{23}{figure.caption.16}\protected@file@percent }
+\newlabel{fig:mel_vs_f}{{3.1}{23}{mel刻度和频率之间的关系 \relax }{figure.caption.16}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}Bark滤波}{23}{subsection.3.3.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.4}倒谱分析}{23}{section.3.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.5}常见的声学特征}{24}{section.3.5}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces 常用的声学特征 \relax }}{24}{figure.caption.17}\protected@file@percent }
+\newlabel{fig:acoustic_feature}{{3.2}{24}{常用的声学特征 \relax }{figure.caption.17}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.5.1}FBank}{24}{subsection.3.5.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.5.2}MFCC}{25}{subsection.3.5.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3.6}具体操作}{25}{section.3.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.1}利用librosa读取音频}{25}{subsection.3.6.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces 波形图 \relax }}{26}{figure.caption.18}\protected@file@percent }
+\newlabel{fig:waveform}{{3.3}{26}{波形图 \relax }{figure.caption.18}{}}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces SoX音频个数\relax }}{26}{table.caption.19}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.2}提取梅尔频谱}{26}{subsection.3.6.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces 梅尔频谱 \relax }}{27}{figure.caption.20}\protected@file@percent }
+\newlabel{fig:mel_spectrogram}{{3.4}{27}{梅尔频谱 \relax }{figure.caption.20}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6.3}提取MFCC}{27}{subsection.3.6.3}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces MFCC \relax }}{28}{figure.caption.21}\protected@file@percent }
+\newlabel{fig:mfcc}{{3.5}{28}{MFCC \relax }{figure.caption.21}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {4}音库制作和文本前端}{29}{chapter.4}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4.1}音库制作}{29}{section.4.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}音库制作概述}{29}{subsection.4.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}发音人选型}{29}{subsection.4.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.3}录音文本收集}{29}{subsection.4.1.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.4}音频录制}{29}{subsection.4.1.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.5}语料整理}{30}{subsection.4.1.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.6}标注}{30}{subsection.4.1.6}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces 利用Praat标注歌唱合成的语料 \relax }}{30}{figure.caption.22}\protected@file@percent }
+\newlabel{fig:sample_praat}{{4.1}{30}{利用Praat标注歌唱合成的语料 \relax }{figure.caption.22}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4.2}文本前端}{31}{section.4.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}文本前端在语音合成中扮演的角色}{31}{subsection.4.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}文本前端的主要组成}{31}{subsection.4.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}Unicode调研和文本预处理}{31}{subsection.4.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}文本规范化}{32}{subsection.4.2.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}分词}{32}{subsection.4.2.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}文本转音素}{33}{subsection.4.2.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.7}韵律分析}{33}{subsection.4.2.7}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.8}文本前端的工程实现}{33}{subsection.4.2.8}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4.3}总结}{34}{section.4.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {5}声学模型}{35}{chapter.5}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5.1}{\ignorespaces 神经网络TTS的三个主要部件 \relax }}{35}{figure.caption.23}\protected@file@percent }
+\newlabel{fig:main_components_in_tts}{{5.1}{35}{神经网络TTS的三个主要部件 \relax }{figure.caption.23}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5.1}Tacotron}{35}{section.5.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.1}Tacotron-2简介}{35}{subsection.5.1.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces Tacotron-2模型结构 \relax }}{35}{figure.caption.24}\protected@file@percent }
+\newlabel{fig:tacotron2_arch}{{5.2}{35}{Tacotron-2模型结构 \relax }{figure.caption.24}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.2}声学特征建模网络}{36}{subsection.5.1.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces Tacotron2解码过程 \relax }}{36}{figure.caption.25}\protected@file@percent }
+\newlabel{fig:tacotron2_decoder}{{5.3}{36}{Tacotron2解码过程 \relax }{figure.caption.25}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1.3}损失函数}{37}{subsection.5.1.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5.2}FastSpeech}{37}{section.5.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.1}模型结构}{37}{subsection.5.2.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces FastSpeech 2整体结构 \relax }}{38}{figure.caption.26}\protected@file@percent }
+\newlabel{fig:fastspeech_arch_paper}{{5.4}{38}{FastSpeech 2整体结构 \relax }{figure.caption.26}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.2}损失函数}{42}{subsection.5.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2.3}小结}{42}{subsection.5.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5.3}VITS}{42}{section.5.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.1}模型整体结构}{43}{subsection.5.3.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5.5}{\ignorespaces VITS整体结构 \relax }}{43}{figure.caption.27}\protected@file@percent }
+\newlabel{fig:vits_arch}{{5.5}{43}{VITS整体结构 \relax }{figure.caption.27}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.2}变分推断}{43}{subsection.5.3.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}对齐估计}{44}{subsection.5.3.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}对抗训练}{44}{subsection.5.3.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.5}总体损失}{45}{subsection.5.3.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.6}总结}{45}{subsection.5.3.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {6}声码器}{46}{chapter.6}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6.1}Griffin-Lim声码器}{46}{section.6.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.1}算法原理}{46}{subsection.6.1.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.2}代码实现}{47}{subsection.6.1.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6.2}STRAIGHT声码器}{47}{section.6.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}概述}{47}{subsection.6.2.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}特征提取}{48}{subsection.6.2.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}语音合成}{48}{subsection.6.2.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6.3}WORLD声码器}{48}{section.6.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.1}声学特征}{48}{subsection.6.3.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.2}WORLD的分析功能}{48}{subsection.6.3.2}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.1}{\ignorespaces WORLD声码器整体结构 \relax }}{49}{figure.caption.28}\protected@file@percent }
+\newlabel{fig:vocoder_world_arch}{{6.1}{49}{WORLD声码器整体结构 \relax }{figure.caption.28}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.3}DIO算法提取基频F0}{49}{subsection.6.3.3}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.2}{\ignorespaces 基频和谐波 \relax }}{49}{figure.caption.29}\protected@file@percent }
+\newlabel{fig:vocoder_pitch_harmonic}{{6.2}{49}{基频和谐波 \relax }{figure.caption.29}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.3}{\ignorespaces 取四个间隔计算候选F0及其置信度 \relax }}{50}{figure.caption.30}\protected@file@percent }
+\newlabel{fig:vocoder_world_dio1}{{6.3}{50}{取四个间隔计算候选F0及其置信度 \relax }{figure.caption.30}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.4}CheapTrick算法提取频谱包络SP}{50}{subsection.6.3.4}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.4}{\ignorespaces 取四个间隔计算候选F0及其置信度 \relax }}{50}{figure.caption.31}\protected@file@percent }
+\newlabel{fig:vocoder_world_sp}{{6.4}{50}{取四个间隔计算候选F0及其置信度 \relax }{figure.caption.31}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.5}PLANTINUM提取非周期信号}{50}{subsection.6.3.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.6}WORLD的合成算法}{51}{subsection.6.3.6}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.5}{\ignorespaces WORLD合成算法 \relax }}{51}{figure.caption.32}\protected@file@percent }
+\newlabel{fig:vocoder_world_synthesis}{{6.5}{51}{WORLD合成算法 \relax }{figure.caption.32}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.7}使用示例}{51}{subsection.6.3.7}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6.4}Neural Homomorphic Vocoder (NHV)}{52}{section.6.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.1}源滤波器合成原理}{52}{subsection.6.4.1}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.6}{\ignorespaces 源-滤波器合成结构框图 \relax }}{53}{figure.caption.33}\protected@file@percent }
+\newlabel{fig:vocoder_nhv_source_filter}{{6.6}{53}{源-滤波器合成结构框图 \relax }{figure.caption.33}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.2}共振峰合成方法}{53}{subsection.6.4.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.3}NHV概述}{53}{subsection.6.4.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.4}整体结构}{53}{subsection.6.4.4}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.7}{\ignorespaces 源-滤波器示意图 \relax }}{54}{figure.caption.34}\protected@file@percent }
+\newlabel{fig:vocoder_nhv_arch}{{6.7}{54}{源-滤波器示意图 \relax }{figure.caption.34}{}}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.8}{\ignorespaces NHV的语音合成过程 \relax }}{54}{figure.caption.35}\protected@file@percent }
+\newlabel{fig:vocoder_nhv_inference}{{6.8}{54}{NHV的语音合成过程 \relax }{figure.caption.35}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.5}脉冲串生成器}{54}{subsection.6.4.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.6}神经网络滤波估计器(Neural Network Filter Estimator)}{54}{subsection.6.4.6}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.9}{\ignorespaces NHV的语音合成过程 \relax }}{55}{figure.caption.36}\protected@file@percent }
+\newlabel{fig:vocoder_nhv_nn_filter_estimator}{{6.9}{55}{NHV的语音合成过程 \relax }{figure.caption.36}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.7}线性时变(LTV)滤波器和可训练的有限冲激响应(FIRs)}{55}{subsection.6.4.7}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6.10}{\ignorespaces 谐波部分的卷积过程 \relax }}{55}{figure.caption.37}\protected@file@percent }
+\newlabel{fig:vocoder_nhv_harmonic_sample}{{6.10}{55}{谐波部分的卷积过程 \relax }{figure.caption.37}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.8}神经网络的训练}{56}{subsection.6.4.8}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.9}小结}{56}{subsection.6.4.9}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6.5}HiFiGAN}{56}{section.6.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.1}HiFiGAN概述}{56}{subsection.6.5.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.2}HiFiGAN生成器简介}{56}{subsection.6.5.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.3}上采样结构}{57}{subsection.6.5.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.4}多感受野融合}{58}{subsection.6.5.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.5}HiFiGAN判别器简介}{60}{subsection.6.5.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.6}多尺度判别器}{60}{subsection.6.5.6}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.7}多周期判别器}{62}{subsection.6.5.7}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.8}损失函数简介}{63}{subsection.6.5.8}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.9}生成对抗损失}{63}{subsection.6.5.9}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.10}梅尔频谱损失}{64}{subsection.6.5.10}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.11}特征匹配损失}{65}{subsection.6.5.11}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.12}整体损失}{65}{subsection.6.5.12}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {chapter}{\numberline {7}语音合成知识结构}{67}{chapter.7}\protected@file@percent }
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\addvspace {10\p@ }}
+\@writefile{lot}{\defcounter {refsection}{0}\relax }\@writefile{lot}{\addvspace {10\p@ }}
+\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {7.1}{\ignorespaces 语音合成知识结构 \relax }}{67}{figure.caption.38}\protected@file@percent }
+\newlabel{fig:text_to_speech_knowledge}{{7.1}{67}{语音合成知识结构 \relax }{figure.caption.38}{}}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7.1}基本组成}{67}{section.7.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7.2}声音转换}{68}{section.7.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7.3}多语种语音合成}{68}{section.7.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {7.4}进阶}{68}{section.7.4}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.1}高表现力语音合成}{69}{subsection.7.4.1}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.2}个性化语音合成}{69}{subsection.7.4.2}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.3}方言迁移}{69}{subsection.7.4.3}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.4}歌唱合成}{69}{subsection.7.4.4}\protected@file@percent }
+\abx@aux@read@bbl@mdfivesum{nobblfile}
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.5}语音合成的稳定性}{70}{subsection.7.4.5}\protected@file@percent }
+\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {7.4.6}语音合成的效率优化}{70}{subsection.7.4.6}\protected@file@percent }
+\gdef \@abspage@last{76}
diff --git a/text_to_speech.bcf b/text_to_speech.bcf
new file mode 100644
index 0000000..30593b0
--- /dev/null
+++ b/text_to_speech.bcf
@@ -0,0 +1,2841 @@
+
+
+
+
+
+ output_encoding
+ utf8
+
+
+ input_encoding
+ utf8
+
+
+ debug
+ 0
+
+
+ mincrossrefs
+ 2
+
+
+ minxrefs
+ 2
+
+
+ sortcase
+ 1
+
+
+ sortupper
+ 1
+
+
+
+
+
+
+ alphaothers
+ +
+
+
+ labelalpha
+ 0
+
+
+ labelnamespec
+ shortauthor
+ author
+ shorteditor
+ editor
+ translator
+
+
+ labeltitle
+ 0
+
+
+ labeltitlespec
+ shorttitle
+ title
+ maintitle
+
+
+ labeltitleyear
+ 0
+
+
+ labeldateparts
+ 0
+
+
+ labeldatespec
+ date
+ year
+ eventdate
+ origdate
+ urldate
+ nodate
+
+
+ julian
+ 0
+
+
+ gregorianstart
+ 1582-10-15
+
+
+ maxalphanames
+ 3
+
+
+ maxbibnames
+ 3
+
+
+ maxcitenames
+ 1
+
+
+ maxsortnames
+ 3
+
+
+ maxitems
+ 1
+
+
+ minalphanames
+ 1
+
+
+ minbibnames
+ 3
+
+
+ mincitenames
+ 1
+
+
+ minsortnames
+ 3
+
+
+ minitems
+ 1
+
+
+ nohashothers
+ 0
+
+
+ noroman
+ 0
+
+
+ nosortothers
+ 0
+
+
+ singletitle
+ 0
+
+
+ skipbib
+ 0
+
+
+ skipbiblist
+ 0
+
+
+ skiplab
+ 0
+
+
+ sortalphaothers
+ +
+
+
+ sortlocale
+ english
+
+
+ sortingtemplatename
+ none
+
+
+ sortsets
+ 0
+
+
+ uniquelist
+ false
+
+
+ uniquename
+ false
+
+
+ uniqueprimaryauthor
+ 0
+
+
+ uniquetitle
+ 0
+
+
+ uniquebaretitle
+ 0
+
+
+ uniquework
+ 0
+
+
+ useprefix
+ 1
+
+
+ useafterword
+ 1
+
+
+ useannotator
+ 1
+
+
+ useauthor
+ 1
+
+
+ usebookauthor
+ 1
+
+
+ usecommentator
+ 1
+
+
+ useeditor
+ 1
+
+
+ useeditora
+ 1
+
+
+ useeditorb
+ 1
+
+
+ useeditorc
+ 1
+
+
+ useforeword
+ 1
+
+
+ useholder
+ 1
+
+
+ useintroduction
+ 1
+
+
+ usenamea
+ 1
+
+
+ usenameb
+ 1
+
+
+ usenamec
+ 1
+
+
+ usetranslator
+ 0
+
+
+ useshortauthor
+ 1
+
+
+ useshorteditor
+ 1
+
+
+
+
+
+ labelalpha
+ 0
+
+
+ labelnamespec
+ shortauthor
+ author
+ shorteditor
+ editor
+ translator
+
+
+ labeltitle
+ 0
+
+
+ labeltitlespec
+ shorttitle
+ title
+ maintitle
+
+
+ labeltitleyear
+ 0
+
+
+ labeldateparts
+ 0
+
+
+ labeldatespec
+ date
+ year
+ eventdate
+ origdate
+ urldate
+ nodate
+
+
+ maxalphanames
+ 3
+
+
+ maxbibnames
+ 3
+
+
+ maxcitenames
+ 1
+
+
+ maxsortnames
+ 3
+
+
+ maxitems
+ 1
+
+
+ minalphanames
+ 1
+
+
+ minbibnames
+ 3
+
+
+ mincitenames
+ 1
+
+
+ minsortnames
+ 3
+
+
+ minitems
+ 1
+
+
+ nohashothers
+ 0
+
+
+ noroman
+ 0
+
+
+ nosortothers
+ 0
+
+
+ singletitle
+ 0
+
+
+ skipbib
+ 0
+
+
+ skiplab
+ 0
+
+
+ skipbiblist
+ 0
+
+
+ uniquelist
+ false
+
+
+ uniquename
+ false
+
+
+ uniqueprimaryauthor
+ 0
+
+
+ uniquetitle
+ 0
+
+
+ uniquebaretitle
+ 0
+
+
+ uniquework
+ 0
+
+
+ useprefix
+ 1
+
+
+ useafterword
+ 1
+
+
+ useannotator
+ 1
+
+
+ useauthor
+ 1
+
+
+ usebookauthor
+ 1
+
+
+ usecommentator
+ 1
+
+
+ useeditor
+ 1
+
+
+ useeditora
+ 1
+
+
+ useeditorb
+ 1
+
+
+ useeditorc
+ 1
+
+
+ useforeword
+ 1
+
+
+ useholder
+ 1
+
+
+ useintroduction
+ 1
+
+
+ usenamea
+ 1
+
+
+ usenameb
+ 1
+
+
+ usenamec
+ 1
+
+
+ usetranslator
+ 0
+
+
+ useshortauthor
+ 1
+
+
+ useshorteditor
+ 1
+
+
+
+
+ datamodel
+ labelalphanametemplate
+ labelalphatemplate
+ inheritance
+ translit
+ uniquenametemplate
+ sortingnamekeytemplate
+ sortingtemplate
+ extradatespec
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ controlversion
+ alphaothers
+ sortalphaothers
+ presort
+ texencoding
+ bibencoding
+ sortingtemplatename
+ sortlocale
+ language
+ autolang
+ langhook
+ indexing
+ hyperref
+ backrefsetstyle
+ block
+ pagetracker
+ citecounter
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ labeldate
+ labeltime
+ dateera
+ date
+ time
+ eventdate
+ eventtime
+ origdate
+ origtime
+ urldate
+ urltime
+ alldatesusetime
+ alldates
+ alltimes
+ gregorianstart
+ autocite
+ notetype
+ uniquelist
+ uniquename
+ refsection
+ refsegment
+ citereset
+ sortlos
+ babel
+ datelabel
+ backrefstyle
+ arxiv
+ gblanorder
+ gbcitelocal
+ gbbiblocal
+ gblocal
+ gbbiblabel
+ gbnamefmt
+ gbalign
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ debug
+ loadfiles
+ safeinputenc
+ sortcase
+ sortupper
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ sortcites
+ sortsets
+ backref
+ backreffloats
+ trackfloats
+ parentracker
+ labeldateusetime
+ datecirca
+ dateuncertain
+ dateusetime
+ eventdateusetime
+ origdateusetime
+ urldateusetime
+ julian
+ datezeros
+ timezeros
+ timezones
+ seconds
+ autopunct
+ punctfont
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ defernumbers
+ locallabelwidth
+ bibwarn
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ defernums
+ firstinits
+ sortfirstinits
+ sortgiveninits
+ labelyear
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ gbmedium
+ gbannote
+ gbfieldtype
+ gbfnperpage
+ gbfootbib
+ gbstyle
+ gbtype
+ gbcodegbk
+ gbstrict
+ gbtitlelink
+ gbctexset
+ gbnoauthor
+ gbfieldstd
+ gbpub
+ gbpunctin
+ subentrycomp
+ bibtexcaseprotection
+ mincrossrefs
+ minxrefs
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+ maxparens
+ dateeraauto
+
+
+ alphaothers
+ sortalphaothers
+ presort
+ indexing
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ skiplos
+ labelyear
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ subentrycomp
+ bibtexcaseprotection
+ labelalphatemplate
+ translit
+ sortexclusion
+ sortinclusion
+ labelnamespec
+ labeltitlespec
+ labeldatespec
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+
+
+ noinherit
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ presort
+ indexing
+ citetracker
+ ibidtracker
+ idemtracker
+ opcittracker
+ loccittracker
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ useafterword
+ useannotator
+ useauthor
+ usebookauthor
+ usecommentator
+ useeditor
+ useeditora
+ useeditorb
+ useeditorc
+ useforeword
+ useholder
+ useintroduction
+ usenamea
+ usenameb
+ usenamec
+ usetranslator
+ useshortauthor
+ useshorteditor
+ terseinits
+ abbreviate
+ dateabbrev
+ clearlang
+ labelnumber
+ labelalpha
+ labeltitle
+ labeltitleyear
+ labeldateparts
+ nohashothers
+ nosortothers
+ noroman
+ singletitle
+ uniquetitle
+ uniquebaretitle
+ uniquework
+ uniqueprimaryauthor
+ useprefix
+ skipbib
+ skipbiblist
+ skiplab
+ dataonly
+ skiplos
+ isbn
+ url
+ doi
+ eprint
+ related
+ subentry
+ subentrycomp
+ bibtexcaseprotection
+ maxnames
+ minnames
+ maxbibnames
+ minbibnames
+ maxcitenames
+ mincitenames
+ maxsortnames
+ minsortnames
+ maxitems
+ minitems
+ maxalphanames
+ minalphanames
+
+
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ uniquelist
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ terseinits
+ nohashothers
+ nosortothers
+ useprefix
+
+
+ nametemplates
+ labelalphanametemplatename
+ uniquenametemplatename
+ sortingnamekeytemplatename
+ uniquename
+ familyinits
+ giveninits
+ prefixinits
+ suffixinits
+ terseinits
+ useprefix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ inbook
+ inproceedings
+ incollection
+ periodical
+
+
+
+ inbook
+ inproceedings
+ incollection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ article
+
+
+
+ periodical
+
+
+
+
+
+
+
+ newspaper
+
+
+
+
+ database
+
+
+
+
+
+ dataset
+
+
+
+
+
+ software
+
+
+
+
+
+ map
+
+
+
+
+
+ archive
+
+
+
+
+
+ misc
+
+
+
+
+ misc
+
+
+
+ book
+ inbook
+
+
+
+
+
+ standard
+
+
+
+
+ patent
+
+
+
+ inproceedings
+ conference
+
+
+
+
+
+ proceedings
+
+
+
+
+
+ incollection
+
+
+
+
+
+ collection
+
+
+
+
+
+ report
+ techreport
+
+
+
+
+
+ thesis
+ mastersthesis
+ phdthesis
+
+
+
+
+
+ online
+ electronic
+ www
+
+
+
+
+
+
+
+ manual
+
+
+
+
+
+
+
+
+
+ unpublished
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ report
+
+
+
+
+
+
+
+ thesis
+
+
+
+
+
+
+ manual
+
+
+
+
+
+
+ unpublished
+
+
+
+
+
+
+ database
+
+
+
+
+
+
+ dataset
+
+
+
+
+
+
+ software
+
+
+
+
+
+
+ map
+
+
+
+
+
+
+ archive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prefix
+ family
+
+
+
+
+ shorthand
+ label
+ labelname
+ labelname
+
+
+ year
+
+
+
+
+
+ labelyear
+ year
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prefix
+ family
+ given
+
+
+
+
+ prefix
+ family
+
+
+ given
+
+
+ suffix
+
+
+ prefix
+
+
+ mm
+
+
+
+ sf,sm,sn,pf,pm,pn,pp
+ family,given,prefix,suffix
+ boolean,integer,string,xml
+ default,transliteration,transcription,translation
+
+
+ article
+ artwork
+ audio
+ bibnote
+ book
+ bookinbook
+ booklet
+ collection
+ commentary
+ customa
+ customb
+ customc
+ customd
+ custome
+ customf
+ dataset
+ inbook
+ incollection
+ inproceedings
+ inreference
+ image
+ jurisdiction
+ legal
+ legislation
+ letter
+ manual
+ misc
+ movie
+ music
+ mvcollection
+ mvreference
+ mvproceedings
+ mvbook
+ online
+ patent
+ performance
+ periodical
+ proceedings
+ reference
+ report
+ review
+ set
+ software
+ standard
+ suppbook
+ suppcollection
+ suppperiodical
+ thesis
+ unpublished
+ video
+ xdata
+ newspaper
+
+
+ sortyear
+ volume
+ volumes
+ abstract
+ addendum
+ annotation
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ edition
+ eid
+ entrysubtype
+ eprintclass
+ eprinttype
+ eventtitle
+ eventtitleaddon
+ gender
+ howpublished
+ indexsorttitle
+ indextitle
+ isan
+ isbn
+ ismn
+ isrn
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ iswc
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ label
+ langid
+ langidopts
+ library
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ nameaddon
+ note
+ number
+ origtitle
+ pagetotal
+ part
+ relatedstring
+ relatedtype
+ reprinttitle
+ series
+ shorthandintro
+ subtitle
+ title
+ titleaddon
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ venue
+ version
+ shorthand
+ shortjournal
+ shortseries
+ shorttitle
+ sorttitle
+ sortshorthand
+ sortkey
+ presort
+ institution
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ location
+ organization
+ origlocation
+ origpublisher
+ publisher
+ afterword
+ annotator
+ author
+ bookauthor
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ foreword
+ holder
+ introduction
+ namea
+ nameb
+ namec
+ translator
+ shortauthor
+ shorteditor
+ sortname
+ authortype
+ editoratype
+ editorbtype
+ editorctype
+ editortype
+ bookpagination
+ nameatype
+ namebtype
+ namectype
+ pagination
+ pubstate
+ type
+ language
+ origlanguage
+ crossref
+ xref
+ date
+ endyear
+ year
+ month
+ day
+ hour
+ minute
+ second
+ timezone
+ season
+ endmonth
+ endday
+ endhour
+ endminute
+ endsecond
+ endtimezone
+ endseason
+ eventdate
+ eventendyear
+ eventyear
+ eventmonth
+ eventday
+ eventhour
+ eventminute
+ eventsecond
+ eventtimezone
+ eventseason
+ eventendmonth
+ eventendday
+ eventendhour
+ eventendminute
+ eventendsecond
+ eventendtimezone
+ eventendseason
+ origdate
+ origendyear
+ origyear
+ origmonth
+ origday
+ orighour
+ origminute
+ origsecond
+ origtimezone
+ origseason
+ origendmonth
+ origendday
+ origendhour
+ origendminute
+ origendsecond
+ origendtimezone
+ origendseason
+ urldate
+ urlendyear
+ urlyear
+ urlmonth
+ urlday
+ urlhour
+ urlminute
+ urlsecond
+ urltimezone
+ urlseason
+ urlendmonth
+ urlendday
+ urlendhour
+ urlendminute
+ urlendsecond
+ urlendtimezone
+ urlendseason
+ doi
+ eprint
+ file
+ verba
+ verbb
+ verbc
+ url
+ xdata
+ ids
+ entryset
+ related
+ keywords
+ options
+ relatedoptions
+ pages
+ execute
+ mark
+ medium
+ nameformat
+ namefmtid
+ shortbooktitle
+ lansortorder
+
+
+ abstract
+ annotation
+ authortype
+ bookpagination
+ crossref
+ day
+ doi
+ eprint
+ eprintclass
+ eprinttype
+ endday
+ endhour
+ endminute
+ endmonth
+ endseason
+ endsecond
+ endtimezone
+ endyear
+ entryset
+ entrysubtype
+ execute
+ file
+ gender
+ hour
+ ids
+ indextitle
+ indexsorttitle
+ isan
+ ismn
+ iswc
+ keywords
+ label
+ langid
+ langidopts
+ library
+ lista
+ listb
+ listc
+ listd
+ liste
+ listf
+ minute
+ month
+ namea
+ nameb
+ namec
+ nameatype
+ namebtype
+ namectype
+ nameaddon
+ options
+ origday
+ origendday
+ origendhour
+ origendminute
+ origendmonth
+ origendseason
+ origendsecond
+ origendtimezone
+ origendyear
+ orighour
+ origminute
+ origmonth
+ origseason
+ origsecond
+ origtimezone
+ origyear
+ origlocation
+ origpublisher
+ origtitle
+ pagination
+ presort
+ related
+ relatedoptions
+ relatedstring
+ relatedtype
+ season
+ second
+ shortauthor
+ shorteditor
+ shorthand
+ shorthandintro
+ shortjournal
+ shortseries
+ shorttitle
+ sortkey
+ sortname
+ sortshorthand
+ sorttitle
+ sortyear
+ timezone
+ url
+ urlday
+ urlendday
+ urlendhour
+ urlendminute
+ urlendmonth
+ urlendsecond
+ urlendtimezone
+ urlendyear
+ urlhour
+ urlminute
+ urlmonth
+ urlsecond
+ urltimezone
+ urlyear
+ usera
+ userb
+ userc
+ userd
+ usere
+ userf
+ verba
+ verbb
+ verbc
+ xdata
+ xref
+ year
+
+
+ set
+ entryset
+
+
+ article
+ addendum
+ annotator
+ author
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ issn
+ issue
+ issuetitle
+ issuesubtitle
+ issuetitleaddon
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ language
+ note
+ number
+ origlanguage
+ pages
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ version
+ volume
+
+
+ bibnote
+ note
+
+
+ book
+ author
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ maintitle
+ maintitleaddon
+ mainsubtitle
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ mvbook
+ addendum
+ afterword
+ annotator
+ author
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ inbook
+ bookinbook
+ suppbook
+ addendum
+ afterword
+ annotator
+ author
+ booktitle
+ bookauthor
+ booksubtitle
+ booktitleaddon
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ part
+ publisher
+ pages
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ booklet
+ addendum
+ author
+ chapter
+ editor
+ editortype
+ eid
+ howpublished
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+
+
+ collection
+ reference
+ addendum
+ afterword
+ annotator
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ mvcollection
+ mvreference
+ addendum
+ afterword
+ annotator
+ author
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ foreword
+ introduction
+ isbn
+ language
+ location
+ note
+ number
+ origlanguage
+ publisher
+ pubstate
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ incollection
+ suppcollection
+ inreference
+ addendum
+ afterword
+ annotator
+ author
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ commentator
+ edition
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ eid
+ foreword
+ introduction
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ origlanguage
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ translator
+ volume
+ volumes
+
+
+ dataset
+ addendum
+ author
+ edition
+ editor
+ editortype
+ language
+ location
+ note
+ number
+ organization
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ manual
+ addendum
+ author
+ chapter
+ edition
+ editor
+ editortype
+ eid
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pages
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ misc
+ software
+ addendum
+ author
+ editor
+ editortype
+ howpublished
+ language
+ location
+ note
+ organization
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ online
+ addendum
+ author
+ editor
+ editortype
+ language
+ note
+ organization
+ pubstate
+ subtitle
+ title
+ titleaddon
+ version
+
+
+ patent
+ addendum
+ author
+ holder
+ location
+ note
+ number
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ periodical
+ addendum
+ editor
+ editora
+ editorb
+ editorc
+ editortype
+ editoratype
+ editorbtype
+ editorctype
+ issn
+ issue
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ language
+ note
+ number
+ pubstate
+ season
+ series
+ subtitle
+ title
+ titleaddon
+ volume
+
+
+ mvproceedings
+ addendum
+ editor
+ editortype
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ note
+ number
+ organization
+ pagetotal
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volumes
+
+
+ proceedings
+ addendum
+ chapter
+ editor
+ editortype
+ eid
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ pagetotal
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volume
+ volumes
+
+
+ inproceedings
+ addendum
+ author
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ editor
+ editortype
+ eid
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ isbn
+ language
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ note
+ number
+ organization
+ pages
+ part
+ publisher
+ pubstate
+ series
+ subtitle
+ title
+ titleaddon
+ venue
+ volume
+ volumes
+
+
+ report
+ addendum
+ author
+ chapter
+ eid
+ institution
+ isrn
+ language
+ location
+ note
+ number
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ version
+
+
+ thesis
+ addendum
+ author
+ chapter
+ eid
+ institution
+ language
+ location
+ note
+ pages
+ pagetotal
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+
+
+ unpublished
+ addendum
+ author
+ eventday
+ eventendday
+ eventendhour
+ eventendminute
+ eventendmonth
+ eventendseason
+ eventendsecond
+ eventendtimezone
+ eventendyear
+ eventhour
+ eventminute
+ eventmonth
+ eventseason
+ eventsecond
+ eventtimezone
+ eventyear
+ eventtitle
+ eventtitleaddon
+ howpublished
+ language
+ location
+ note
+ pubstate
+ subtitle
+ title
+ titleaddon
+ type
+ venue
+
+
+ abstract
+ addendum
+ afterword
+ annotator
+ author
+ bookauthor
+ booksubtitle
+ booktitle
+ booktitleaddon
+ chapter
+ commentator
+ editor
+ editora
+ editorb
+ editorc
+ foreword
+ holder
+ institution
+ introduction
+ issuesubtitle
+ issuetitle
+ issuetitleaddon
+ journalsubtitle
+ journaltitle
+ journaltitleaddon
+ location
+ mainsubtitle
+ maintitle
+ maintitleaddon
+ nameaddon
+ note
+ organization
+ origlanguage
+ origlocation
+ origpublisher
+ origtitle
+ part
+ publisher
+ relatedstring
+ series
+ shortauthor
+ shorteditor
+ shorthand
+ shortjournal
+ shortseries
+ shorttitle
+ sortname
+ sortshorthand
+ sorttitle
+ subtitle
+ title
+ titleaddon
+ translator
+ venue
+
+
+ article
+ book
+ inbook
+ bookinbook
+ suppbook
+ booklet
+ collection
+ incollection
+ suppcollection
+ manual
+ misc
+ mvbook
+ mvcollection
+ online
+ patent
+ periodical
+ suppperiodical
+ proceedings
+ inproceedings
+ reference
+ inreference
+ report
+ set
+ thesis
+ unpublished
+
+
+ date
+ year
+
+
+
+
+ set
+
+ entryset
+
+
+
+ article
+
+ author
+ journaltitle
+ title
+
+
+
+ book
+ mvbook
+
+ author
+ title
+
+
+
+ inbook
+ bookinbook
+ suppbook
+
+ author
+ title
+ booktitle
+
+
+
+ booklet
+
+
+ author
+ editor
+
+ title
+
+
+
+ collection
+ reference
+ mvcollection
+ mvreference
+
+ editor
+ title
+
+
+
+ incollection
+ suppcollection
+ inreference
+
+ author
+ editor
+ title
+ booktitle
+
+
+
+ dataset
+
+ title
+
+
+
+ manual
+
+ title
+
+
+
+ misc
+ software
+
+ title
+
+
+
+ online
+
+ title
+
+ url
+ doi
+ eprint
+
+
+
+
+ patent
+
+ author
+ title
+ number
+
+
+
+ periodical
+
+ editor
+ title
+
+
+
+ proceedings
+ mvproceedings
+
+ title
+
+
+
+ inproceedings
+
+ author
+ title
+ booktitle
+
+
+
+ report
+
+ author
+ title
+ type
+ institution
+
+
+
+ thesis
+
+ author
+ title
+ type
+ institution
+
+
+
+ unpublished
+
+ author
+ title
+
+
+
+
+ isbn
+
+
+ issn
+
+
+ ismn
+
+
+ gender
+
+
+
+
+
+
+ reference.bib
+
+
+
+
+
+
+ citeorder
+
+
+
+
diff --git a/text_to_speech.log b/text_to_speech.log
new file mode 100644
index 0000000..14971e5
--- /dev/null
+++ b/text_to_speech.log
@@ -0,0 +1,2191 @@
+This is XeTeX, Version 3.141592653-2.6-0.999993 (TeX Live 2021) (preloaded format=xelatex 2022.3.2) 19 MAR 2022 23:23
+entering extended mode
+ restricted \write18 enabled.
+ file:line:error style messages enabled.
+ %&-line parsing enabled.
+**/Users/dongse/Workspace/book-text-to-speech/text_to_speech
+(/Users/dongse/Workspace/book-text-to-speech/text_to_speech.tex
+LaTeX2e <2020-10-01> patch level 4
+L3 programming layer <2021-02-18> (./elegantbook.cls
+Document Class: elegantbook 2021/05/02 v4.1 ElegantBook document class
+(/usr/local/texlive/2021/texmf-dist/tex/latex/kvoptions/kvoptions.sty
+Package: kvoptions 2020-10-07 v3.14 Key value format for package options (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty
+Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty
+Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO)
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
+\etb@tempcnta=\count175
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/book.cls
+Document Class: book 2020/04/10 v1.4m Standard LaTeX document class
+(/usr/local/texlive/2021/texmf-dist/tex/latex/base/bk10.clo
+File: bk10.clo 2020/04/10 v1.4m Standard LaTeX file (size option)
+)
+\c@part=\count176
+\c@chapter=\count177
+\c@section=\count178
+\c@subsection=\count179
+\c@subsubsection=\count180
+\c@paragraph=\count181
+\c@subparagraph=\count182
+\c@figure=\count183
+\c@table=\count184
+\abovecaptionskip=\skip47
+\belowcaptionskip=\skip48
+\bibindent=\dimen138
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/setspace/setspace.sty
+Package: setspace 2011/12/19 v6.7a set line spacing
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.sty
+Package: csquotes 2021-02-22 v5.2l context-sensitive quotations (JAW)
+\csq@reset=\count185
+\csq@gtype=\count186
+\csq@glevel=\count187
+\csq@qlevel=\count188
+\csq@maxlvl=\count189
+\csq@tshold=\count190
+\csq@ltx@everypar=\toks16
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.def
+File: csquotes.def 2021-02-22 v5.2l csquotes generic definitions (JAW)
+)
+Package csquotes Info: Trying to load configuration file 'csquotes.cfg'...
+Package csquotes Info: ... configuration file loaded successfully.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/csquotes/csquotes.cfg
+File: csquotes.cfg
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref.sty
+Package: hyperref 2021-02-27 v7.00k Hypertext links for LaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/iftex.sty
+Package: iftex 2020/03/06 v1.0d TeX engine tests
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty
+Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/infwarerr/infwarerr.sty
+Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO)
+)
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode not found.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty
+Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pdfescape/pdfescape.sty
+Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/hycolor/hycolor.sty
+Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty
+Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/auxhook/auxhook.sty
+Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO)
+)
+\@linkdim=\dimen139
+\Hy@linkcounter=\count191
+\Hy@pagecounter=\count192
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/pd1enc.def
+File: pd1enc.def 2021-02-27 v7.00k Hyperref: PDFDocEncoding definition (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hyperref-langpatches.def
+File: hyperref-langpatches.def 2021-02-27 v7.00k Hyperref: patches for babel languages
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/intcalc/intcalc.sty
+Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/etexcmds/etexcmds.sty
+Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
+)
+\Hy@SavedSpaceFactor=\count193
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/puenc.def
+File: puenc.def 2021-02-27 v7.00k Hyperref: PDF Unicode definition (HO)
+)
+Package hyperref Info: Hyper figures OFF on input line 4192.
+Package hyperref Info: Link nesting OFF on input line 4197.
+Package hyperref Info: Hyper index ON on input line 4200.
+Package hyperref Info: Plain pages OFF on input line 4207.
+Package hyperref Info: Backreferencing OFF on input line 4212.
+Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
+Package hyperref Info: Bookmarks ON on input line 4445.
+\c@Hy@tempcnt=\count194
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip16
+Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
+)
+LaTeX Info: Redefining \url on input line 4804.
+\XeTeXLinkMargin=\dimen140
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/bitset/bitset.sty
+Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty
+Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
+))
+\Fld@menulength=\count195
+\Field@Width=\dimen141
+\Fld@charsize=\dimen142
+Package hyperref Info: Hyper figures OFF on input line 6075.
+Package hyperref Info: Link nesting OFF on input line 6080.
+Package hyperref Info: Hyper index ON on input line 6083.
+Package hyperref Info: backreferencing OFF on input line 6090.
+Package hyperref Info: Link coloring OFF on input line 6095.
+Package hyperref Info: Link coloring with OCG OFF on input line 6100.
+Package hyperref Info: PDF/A mode OFF on input line 6105.
+LaTeX Info: Redefining \ref on input line 6145.
+LaTeX Info: Redefining \pageref on input line 6149.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/atbegshi-ltx.sty
+Package: atbegshi-ltx 2020/08/17 v1.0a Emulation of the original atbegshi package
+with kernel methods
+)
+\Hy@abspage=\count196
+\c@Item=\count197
+\c@Hfootnote=\count198
+)
+Package hyperref Info: Driver (autodetected): hxetex.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/hxetex.def
+File: hxetex.def 2021-02-27 v7.00k Hyperref driver for XeTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/stringenc/stringenc.sty
+Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO)
+)
+\pdfm@box=\box47
+\c@Hy@AnnotLevel=\count199
+\HyField@AnnotCount=\count266
+\Fld@listcount=\count267
+\c@bookmark@seq@number=\count268
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty
+Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/atveryend-ltx.sty
+Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atvery package
+with kernel methods
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty
+Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
+)
+Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 286.
+)
+\Hy@SectionHShift=\skip49
+)
+Package hyperref Info: Option `breaklinks' set `true' on input line 108.
+Package hyperref Info: Option `unicode' set `true' on input line 108.
+Package hyperref Info: Option `bookmarksnumbered' set `true' on input line 108.
+Package hyperref Info: Option `bookmarksopen' set `true' on input line 108.
+Package hyperref Info: Option `colorlinks' set `true' on input line 108.
+Package hyperref Info: Option `plainpages' set `false' on input line 108.
+Package hyperref Info: Option `linktocpage' set `true' on input line 108.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/geometry/geometry.sty
+Package: geometry 2020/01/02 v5.9 Page Geometry
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifvtex.sty
+Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
+)
+\Gm@cnth=\count269
+\Gm@cntv=\count270
+\c@Gm@tempcnt=\count271
+\Gm@bindingoffset=\dimen143
+\Gm@wd@mp=\dimen144
+\Gm@odd@mp=\dimen145
+\Gm@even@mp=\dimen146
+\Gm@layoutwidth=\dimen147
+\Gm@layoutheight=\dimen148
+\Gm@layouthoffset=\dimen149
+\Gm@layoutvoffset=\dimen150
+\Gm@dimlist=\toks17
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/indentfirst.sty
+Package: indentfirst 1995/11/23 v1.03 Indent first paragraph (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/comment/comment.sty
+\CommentStream=\write3
+ Excluding comment 'comment') (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctex.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3kernel/expl3.sty
+Package: expl3 2021-02-18 L3 programming layer (loader)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
+File: l3backend-xetex.def 2021-03-18 L3 backend support: XeTeX
+ (|extractbb --version)
+\c__kernel_sys_dvipdfmx_version_int=\count272
+\l__color_backend_stack_int=\count273
+\g__color_backend_stack_int=\count274
+\g__graphics_track_int=\count275
+\l__pdf_internal_box=\box48
+\g__pdf_backend_object_int=\count276
+\g__pdf_backend_annotation_int=\count277
+\g__pdf_backend_link_int=\count278
+))
+Package: ctex 2021/03/14 v2.5.6 Chinese adapter in LaTeX (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse-2020-10-01.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xparse/xparse-generic.tex))) (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
+Package: l3keys2e 2021-03-12 LaTeX2e option processing using LaTeX3 keys
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctexhook.sty
+Package: ctexhook 2021/03/14 v2.5.6 Document and package hooks (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/ctexpatch.sty
+Package: ctexpatch 2021/03/14 v2.5.6 Patching commands (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fix-cm.sty
+Package: fix-cm 2015/01/14 v1.1t fixes to LaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/ts1enc.def
+File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
+LaTeX Font Info: Redeclaring font encoding TS1 on input line 47.
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/everysel/everysel.sty
+Package: everysel 2021/01/20 v2.1 EverySelectfont Package (MS)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/everysel/everysel-2011-10-28.sty))
+\l__ctex_tmp_int=\count279
+\l__ctex_tmp_box=\box49
+\l__ctex_tmp_dim=\dimen151
+\g__ctex_section_depth_int=\count280
+\g__ctex_font_size_int=\count281
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/config/ctexopts.cfg
+File: ctexopts.cfg 2021/03/14 v2.5.6 Option configuration file (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/engine/ctex-engine-xetex.def
+File: ctex-engine-xetex.def 2021/03/14 v2.5.6 XeLaTeX adapter (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
+Package: xeCJK 2020/10/19 v3.8.6 Typesetting CJK scripts with XeLaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+Package: xtemplate 2021-03-12 L3 Experimental prototype document functions
+\l__xtemplate_tmp_dim=\dimen152
+\l__xtemplate_tmp_int=\count282
+\l__xtemplate_tmp_muskip=\muskip17
+\l__xtemplate_tmp_skip=\skip50
+)
+\l__xeCJK_tmp_int=\count283
+\l__xeCJK_tmp_box=\box50
+\l__xeCJK_tmp_dim=\dimen153
+\l__xeCJK_tmp_skip=\skip51
+\g__xeCJK_space_factor_int=\count284
+\l__xeCJK_begin_int=\count285
+\l__xeCJK_end_int=\count286
+\c__xeCJK_CJK_class_int=\XeTeXcharclass1
+\c__xeCJK_FullLeft_class_int=\XeTeXcharclass2
+\c__xeCJK_FullRight_class_int=\XeTeXcharclass3
+\c__xeCJK_HalfLeft_class_int=\XeTeXcharclass4
+\c__xeCJK_HalfRight_class_int=\XeTeXcharclass5
+\c__xeCJK_NormalSpace_class_int=\XeTeXcharclass6
+\c__xeCJK_CM_class_int=\XeTeXcharclass7
+\c__xeCJK_HangulJamo_class_int=\XeTeXcharclass8
+\l__xeCJK_last_skip=\skip52
+\g__xeCJK_node_int=\count287
+\c__xeCJK_CJK_node_dim=\dimen154
+\c__xeCJK_CJK-space_node_dim=\dimen155
+\c__xeCJK_default_node_dim=\dimen156
+\c__xeCJK_default-space_node_dim=\dimen157
+\c__xeCJK_CJK-widow_node_dim=\dimen158
+\c__xeCJK_normalspace_node_dim=\dimen159
+\l__xeCJK_ccglue_skip=\skip53
+\l__xeCJK_ecglue_skip=\skip54
+\l__xeCJK_punct_kern_skip=\skip55
+\l__xeCJK_last_penalty_int=\count288
+\l__xeCJK_last_bound_dim=\dimen160
+\l__xeCJK_last_kern_dim=\dimen161
+\l__xeCJK_widow_penalty_int=\count289
+
+Package xtemplate Info: Declaring object type 'xeCJK/punctuation' taking 0
+(xtemplate) argument(s) on line 2341.
+
+\l__xeCJK_fixed_punct_width_dim=\dimen162
+\l__xeCJK_mixed_punct_width_dim=\dimen163
+\l__xeCJK_middle_punct_width_dim=\dimen164
+\l__xeCJK_fixed_margin_width_dim=\dimen165
+\l__xeCJK_mixed_margin_width_dim=\dimen166
+\l__xeCJK_middle_margin_width_dim=\dimen167
+\l__xeCJK_bound_punct_width_dim=\dimen168
+\l__xeCJK_bound_margin_width_dim=\dimen169
+\l__xeCJK_margin_minimum_dim=\dimen170
+\l__xeCJK_kerning_total_width_dim=\dimen171
+\l__xeCJK_same_align_margin_dim=\dimen172
+\l__xeCJK_different_align_margin_dim=\dimen173
+\l__xeCJK_kerning_margin_width_dim=\dimen174
+\l__xeCJK_kerning_margin_minimum_dim=\dimen175
+\l__xeCJK_bound_dim=\dimen176
+\l__xeCJK_reverse_bound_dim=\dimen177
+\l__xeCJK_margin_dim=\dimen178
+\l__xeCJK_minimum_bound_dim=\dimen179
+\l__xeCJK_kerning_margin_dim=\dimen180
+\g__xeCJK_family_int=\count290
+\l__xeCJK_fam_int=\count291
+\g__xeCJK_fam_allocation_int=\count292
+\l__xeCJK_verb_case_int=\count293
+\l__xeCJK_verb_exspace_skip=\skip56
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec.sty
+Package: fontspec 2020/02/21 v2.7i Font selection for XeLaTeX and LuaLaTeX
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty
+Package: fontspec-xetex 2020/02/21 v2.7i Font selection for XeLaTeX and LuaLaTeX
+\l__fontspec_script_int=\count294
+\l__fontspec_language_int=\count295
+\l__fontspec_strnum_int=\count296
+\l__fontspec_tmp_int=\count297
+\l__fontspec_tmpa_int=\count298
+\l__fontspec_tmpb_int=\count299
+\l__fontspec_tmpc_int=\count300
+\l__fontspec_em_int=\count301
+\l__fontspec_emdef_int=\count302
+\l__fontspec_strong_int=\count303
+\l__fontspec_strongdef_int=\count304
+\l__fontspec_tmpa_dim=\dimen181
+\l__fontspec_tmpb_dim=\dimen182
+\l__fontspec_tmpc_dim=\dimen183
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fontenc.sty
+Package: fontenc 2020/08/10 v2.0s Standard LaTeX package
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/fontspec/fontspec.cfg))) (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK.cfg
+File: xeCJK.cfg 2020/10/19 v3.8.6 Configuration file for xeCJK package
+))
+\ccwd=\dimen184
+\l__ctex_ccglue_skip=\skip57
+)
+\l__ctex_ziju_dim=\dimen185
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/zhnumber/zhnumber.sty
+Package: zhnumber 2020/05/01 v2.8 Typesetting numbers with Chinese glyphs
+\l__zhnum_scale_int=\count305
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/zhnumber/zhnumber-utf8.cfg
+File: zhnumber-utf8.cfg 2020/05/01 v2.8 Chinese numerals with UTF8 encoding
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/scheme/ctex-scheme-plain.def
+File: ctex-scheme-plain.def 2021/03/14 v2.5.6 Plain scheme for generic (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-mac.def
+File: ctex-fontset-mac.def 2021/03/14 v2.5.6 macOS fonts definition (CTEX)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-macnew.def
+File: ctex-fontset-macnew.def 2021/03/14 v2.5.6 macOS fonts definition for El Capitan or later version (CTEX)
+
+
+Package fontspec Warning: Font "Songti SC Light" does not contain requested
+(fontspec) Script "CJK".
+
+
+Package fontspec Info: Font family 'SongtiSCLight(0)' created for font 'Songti
+(fontspec) SC Light' with options
+(fontspec) [Script={CJK},BoldItalicFont={Kaiti SC
+(fontspec) Bold},BoldFont={Songti SC Bold},ItalicFont={Kaiti SC}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Songti SC
+(fontspec) Light/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Songti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+(fontspec) - 'italic' (m/it) with NFSS spec.: <->"Kaiti
+(fontspec) SC/OT:language=dflt;"
+(fontspec) - 'italic small caps' (m/scit) with NFSS spec.:
+(fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Kaiti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.:
+
+))) (/usr/local/texlive/2021/texmf-dist/tex/latex/ctex/config/ctex.cfg
+File: ctex.cfg 2021/03/14 v2.5.6 Configuration file (CTEX)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/newtxtext.sty
+Package: newtxtext 2020/09/19 v1.630
+ `newtxtext' v1.630, 2020/09/19 Text macros taking advantage of TeX-Gyre Termes fonts (msharpe) (/usr/local/texlive/2021/texmf-dist/tex/latex/fontaxes/fontaxes.sty
+Package: fontaxes 2020/07/21 v1.0e Font selection axes
+LaTeX Info: Redefining \upshape on input line 29.
+LaTeX Info: Redefining \itshape on input line 31.
+LaTeX Info: Redefining \slshape on input line 33.
+LaTeX Info: Redefining \swshape on input line 35.
+LaTeX Info: Redefining \scshape on input line 37.
+LaTeX Info: Redefining \sscshape on input line 39.
+LaTeX Info: Redefining \ulcshape on input line 41.
+LaTeX Info: Redefining \textsw on input line 47.
+LaTeX Info: Redefining \textssc on input line 48.
+LaTeX Info: Redefining \textulc on input line 49.
+)
+\ntx@fs=\dimen186
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/xkeyval/xkeyval.sty
+Package: xkeyval 2020/11/20 v2.8 package option processing (HA)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/xkeyval/xkeyval.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/xkeyval/xkvutils.tex
+\XKV@toks=\toks18
+\XKV@tempa@toks=\toks19
+)
+\XKV@depth=\count306
+File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/xstring/xstring.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/xstring/xstring.tex
+\integerpart=\count307
+Invalid UTF-8 byte or sequence at line 35 replaced by U+FFFD.
+\decimalpart=\count308
+Invalid UTF-8 byte or sequence at line 79 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 79 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 83 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 86 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 102 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 114 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 120 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 125 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 147 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 182 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 183 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 184 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 185 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 189 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 189 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 190 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 190 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 193 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 208 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 221 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 221 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 241 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 266 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 284 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 295 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 300 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 300 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 301 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 302 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 303 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 332 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 333 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 334 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 406 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 406 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 409 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 410 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 428 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 434 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 457 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 457 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 464 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 464 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 466 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 466 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 541 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 586 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 586 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 588 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 588 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 595 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 597 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 599 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 602 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 605 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 605 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 610 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 615 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 632 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 632 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 633 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 635 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 637 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 647 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 653 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 678 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 700 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 705 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 715 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 719 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 732 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 732 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 741 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 741 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 742 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 742 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 762 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 773 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 773 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 774 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 797 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 797 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 810 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 824 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 824 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 831 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 838 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 838 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 846 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 846 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 861 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 862 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 864 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 864 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 908 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 909 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 909 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 934 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 934 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 936 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 936 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 940 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 940 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 962 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 962 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 964 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 965 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 1006 replaced by U+FFFD.
+)
+Package: xstring 2019/02/06 v1.83 String manipulations (CT)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/ifthen.sty
+Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/carlisle/scalefnt.sty) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/fontenc.sty
+Package: fontenc 2020/08/10 v2.0s Standard LaTeX package
+LaTeX Font Info: Trying to load font information for T1+ntxtlf on input line 112.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/t1ntxtlf.fd
+File: t1ntxtlf.fd 2015/01/17 v1.0 font definition file for T1/ntx/tlf
+)
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 10.0pt on input line 112.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/textcomp.sty
+Package: textcomp 2020/02/02 v2.0n Standard LaTeX package
+LaTeX Font Info: Changing ? sub-encoding to TS1/0 on input line 75.
+)
+LaTeX Info: Redefining \textin on input line 103.
+\ntxt@cntz=\count309
+LaTeX Font Info: Redeclaring math symbol \mathsterling on input line 316.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/anyfontsize/anyfontsize.sty
+Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.
+Invalid UTF-8 byte or sequence at line 3 replaced by U+FFFD.
+Package: anyfontsize 2007/11/22 anyfontsize.sty by pts
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/newtxmath.sty
+Package: newtxmath 2020/12/20 v1.640
+ `newtxmath' v1.640, 2020/12/20 Math macros based originally on txfonts (msharpe) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsmath.sty
+Package: amsmath 2020/09/23 v2.17i AMS math features
+\@mathmargin=\skip58
+
+For additional information on amsmath, use the `?' option.
+(/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amstext.sty
+Package: amstext 2000/06/29 v2.01 AMS text
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsgen.sty
+File: amsgen.sty 1999/11/30 v2.0 generic functions
+\@emptytoks=\toks20
+\ex@=\dimen187
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsbsy.sty
+Package: amsbsy 1999/11/29 v1.2d Bold Symbols
+\pmbraise@=\dimen188
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsmath/amsopn.sty
+Package: amsopn 2016/03/08 v2.02 operator names
+)
+\inf@bad=\count310
+LaTeX Info: Redefining \frac on input line 234.
+\uproot@=\count311
+\leftroot@=\count312
+LaTeX Info: Redefining \overline on input line 399.
+\classnum@=\count313
+\DOTSCASE@=\count314
+LaTeX Info: Redefining \ldots on input line 496.
+LaTeX Info: Redefining \dots on input line 499.
+LaTeX Info: Redefining \cdots on input line 620.
+\Mathstrutbox@=\box51
+\strutbox@=\box52
+\big@size=\dimen189
+LaTeX Font Info: Redeclaring font encoding OML on input line 743.
+LaTeX Font Info: Redeclaring font encoding OMS on input line 744.
+\macc@depth=\count315
+\c@MaxMatrixCols=\count316
+\dotsspace@=\muskip18
+\c@parentequation=\count317
+\dspbrk@lvl=\count318
+\tag@help=\toks21
+\row@=\count319
+\column@=\count320
+\maxfields@=\count321
+\andhelp@=\toks22
+\eqnshift@=\dimen190
+\alignsep@=\dimen191
+\tagshift@=\dimen192
+\tagwidth@=\dimen193
+\totwidth@=\dimen194
+\lineht@=\dimen195
+\@envbody=\toks23
+\multlinegap=\skip59
+\multlinetaggap=\skip60
+\mathdisplay@stack=\toks24
+LaTeX Info: Redefining \[ on input line 2923.
+LaTeX Info: Redefining \] on input line 2924.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifxetex.sty
+Package: ifxetex 2019/10/25 v0.7 ifxetex legacy package. Use iftex instead.
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/iftex/ifluatex.sty
+Package: ifluatex 2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/oberdiek/centernot.sty
+Package: centernot 2016/05/16 v1.4 Centers the not symbol horizontally (HO)
+)
+\tx@cntz=\count322
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/kastrup/binhex.tex)
+\tx@Isdigit=\count323
+\tx@IsAlNum=\count324
+\tx@tA=\toks25
+\tx@tB=\toks26
+\tx@su=\read2
+LaTeX Font Info: Redeclaring symbol font `operators' on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `normal'
+(Font) OT1/cmr/m/n --> OT1/ntxtlf/m/n on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/m/n on input line 360.
+LaTeX Font Info: Overwriting symbol font `operators' in version `bold'
+(Font) OT1/ntxtlf/m/n --> OT1/ntxtlf/b/n on input line 361.
+LaTeX Font Info: Redeclaring math alphabet \mathsf on input line 369.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal'
+(Font) OT1/cmss/m/n --> T1/qhv/m/n on input line 369.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
+(Font) OT1/cmss/bx/n --> T1/qhv/m/n on input line 369.
+LaTeX Font Info: Redeclaring math alphabet \mathit on input line 370.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal'
+(Font) OT1/cmr/m/it --> OT1/ntxtlf/m/it on input line 370.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
+(Font) OT1/cmr/bx/it --> OT1/ntxtlf/m/it on input line 370.
+LaTeX Font Info: Redeclaring math alphabet \mathtt on input line 371.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal'
+(Font) OT1/cmtt/m/n --> T1/ntxtt/m/n on input line 371.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
+(Font) OT1/cmtt/m/n --> T1/ntxtt/m/n on input line 371.
+LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/b/n on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `bold'
+(Font) OT1/cmr/bx/n --> OT1/ntxtlf/b/n on input line 373.
+LaTeX Font Info: Overwriting math alphabet `\mathit' in version `bold'
+(Font) OT1/ntxtlf/m/it --> OT1/ntxtlf/b/it on input line 374.
+LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold'
+(Font) T1/qhv/m/n --> T1/qhv/b/n on input line 375.
+LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold'
+(Font) T1/ntxtt/m/n --> T1/ntxtt/b/n on input line 376.
+LaTeX Font Info: Redeclaring symbol font `letters' on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `normal'
+(Font) OML/cmm/m/it --> OML/ntxmi/m/it on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `bold'
+(Font) OML/cmm/b/it --> OML/ntxmi/m/it on input line 477.
+LaTeX Font Info: Overwriting symbol font `letters' in version `bold'
+(Font) OML/ntxmi/m/it --> OML/ntxmi/b/it on input line 478.
+\symlettersA=\mathgroup4
+LaTeX Font Info: Overwriting symbol font `lettersA' in version `bold'
+(Font) U/ntxmia/m/it --> U/ntxmia/b/it on input line 542.
+LaTeX Font Info: Redeclaring symbol font `symbols' on input line 563.
+LaTeX Font Info: Encoding `OMS' has changed to `LMS' for symbol font
+(Font) `symbols' in the math version `normal' on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `normal'
+(Font) OMS/cmsy/m/n --> LMS/ntxsy/m/n on input line 563.
+LaTeX Font Info: Encoding `OMS' has changed to `LMS' for symbol font
+(Font) `symbols' in the math version `bold' on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `bold'
+(Font) OMS/cmsy/b/n --> LMS/ntxsy/m/n on input line 563.
+LaTeX Font Info: Overwriting symbol font `symbols' in version `bold'
+(Font) LMS/ntxsy/m/n --> LMS/ntxsy/b/n on input line 564.
+\symAMSm=\mathgroup5
+LaTeX Font Info: Overwriting symbol font `AMSm' in version `bold'
+(Font) U/ntxsym/m/n --> U/ntxsym/b/n on input line 587.
+\symsymbolsC=\mathgroup6
+LaTeX Font Info: Overwriting symbol font `symbolsC' in version `bold'
+(Font) U/ntxsyc/m/n --> U/ntxsyc/b/n on input line 608.
+LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 621.
+LaTeX Font Info: Encoding `OMX' has changed to `LMX' for symbol font
+(Font) `largesymbols' in the math version `normal' on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal'
+(Font) OMX/cmex/m/n --> LMX/ntxexx/m/n on input line 621.
+LaTeX Font Info: Encoding `OMX' has changed to `LMX' for symbol font
+(Font) `largesymbols' in the math version `bold' on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold'
+(Font) OMX/cmex/m/n --> LMX/ntxexx/m/n on input line 621.
+LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold'
+(Font) LMX/ntxexx/m/n --> LMX/ntxexx/b/n on input line 622.
+\symlargesymbolsTXA=\mathgroup7
+LaTeX Font Info: Overwriting symbol font `largesymbolsTXA' in version `bold'
+(Font) U/ntxexa/m/n --> U/ntxexa/b/n on input line 636.
+\tx@sbptoks=\toks27
+LaTeX Font Info: Redeclaring math delimiter \lfloor on input line 858.
+LaTeX Font Info: Redeclaring math delimiter \rfloor on input line 859.
+LaTeX Font Info: Redeclaring math delimiter \lceil on input line 860.
+LaTeX Font Info: Redeclaring math delimiter \rceil on input line 861.
+LaTeX Font Info: Redeclaring math delimiter \lbrace on input line 862.
+LaTeX Font Info: Redeclaring math delimiter \rbrace on input line 863.
+LaTeX Font Info: Redeclaring math delimiter \langle on input line 864.
+LaTeX Font Info: Redeclaring math delimiter \rangle on input line 866.
+LaTeX Font Info: Redeclaring math delimiter \arrowvert on input line 870.
+LaTeX Font Info: Redeclaring math delimiter \vert on input line 871.
+LaTeX Font Info: Redeclaring math symbol \hbar on input line 917.
+LaTeX Font Info: Redeclaring math accent \dot on input line 942.
+LaTeX Font Info: Redeclaring math accent \ddot on input line 943.
+LaTeX Font Info: Redeclaring math accent \vec on input line 2006.
+LaTeX Font Info: Redeclaring math symbol \imathscr on input line 2646.
+LaTeX Font Info: Redeclaring math symbol \jmathscr on input line 2647.
+LaTeX Info: Redefining \Bbbk on input line 2780.
+LaTeX Info: Redefining \not on input line 2929.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/esint/esint.sty
+Package: esint
+\symlargesymbolsA=\mathgroup8
+)
+\symCMlargesymbols=\mathgroup9
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/xcolor/xcolor.sty
+Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-cfg/color.cfg
+File: color.cfg 2016/01/02 v1.6 sample color configuration
+)
+Package xcolor Info: Driver file: xetex.def on input line 225.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-def/xetex.def
+File: xetex.def 2021/03/18 v5.0k Graphics/color driver for xetex
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/colortbl/colortbl.sty
+Package: colortbl 2020/01/04 v1.0e Color table columns (DPC)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/array.sty
+Package: array 2020/10/01 v2.5c Tabular extension package (FMi)
+\col@sep=\dimen196
+\ar@mcellbox=\box53
+\extrarowheight=\dimen197
+\NC@list=\toks28
+\extratabsurround=\skip61
+\backup@length=\skip62
+\ar@cellbox=\box54
+)
+\everycr=\toks29
+\minrowclearance=\skip63
+)
+\rownum=\count325
+Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1348.
+Package xcolor Info: Model `RGB' extended on input line 1364.
+Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1366.
+Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1367.
+Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1368.
+Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1369.
+Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370.
+Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/mwe/mwe.sty
+Package: mwe 2018/03/30 v0.5 Package to support minimal working examples (MWE)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphicx.sty
+Package: graphicx 2020/09/09 v1.2b Enhanced LaTeX Graphics (DPC,SPQR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/graphics.sty
+Package: graphics 2020/08/30 v1.4c Standard LaTeX Graphics (DPC,SPQR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics/trig.sty
+Package: trig 2016/01/03 v1.10 sin cos tan (DPC)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/graphics-cfg/graphics.cfg
+File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration
+)
+Package graphics Info: Driver file: xetex.def on input line 105.
+)
+\Gin@req@height=\dimen198
+\Gin@req@width=\dimen199
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/lipsum/lipsum.sty
+Package: lipsum 2021-03-03 v2.3 150 paragraphs of Lorem Ipsum dummy text
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex
+File: lipsum.ltd.tex 2021-03-03 v2.3 The Lorem ipsum dummy text
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/blindtext/blindtext.sty
+Package: blindtext 2012/01/06 V2.0 blindtext-Package
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/xspace.sty
+Package: xspace 2014/10/28 v1.13 Space after command names (DPC,MH)
+)
+\c@blindtext=\count326
+\c@Blindtext=\count327
+\c@blind@countparstart=\count328
+\blind@countxx=\count329
+\blindtext@numBlindtext=\count330
+\blind@countyy=\count331
+\c@blindlist=\count332
+\c@blindlistlevel=\count333
+\c@blindlist@level=\count334
+\blind@listitem=\count335
+\c@blind@listcount=\count336
+\c@blind@levelcount=\count337
+\blind@mathformula=\count338
+\blind@Mathformula=\count339
+\c@blind@randomcount=\count340
+\c@blind@randommax=\count341
+\c@blind@pangramcount=\count342
+\c@blind@pangrammax=\count343
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/enumerate.sty
+Package: enumerate 2015/07/23 v3.00 enumerate extensions (DPC)
+\@enLab=\toks30
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/enumitem/enumitem.sty
+Package: enumitem 2019/06/20 v3.9 Customized lists
+\labelindent=\skip64
+\enit@outerparindent=\dimen256
+\enit@toks=\toks31
+\enit@inbox=\box55
+\enit@count@id=\count344
+\enitdp@description=\count345
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/caption/caption.sty
+Package: caption 2020/10/26 v3.5g Customizing captions (AR)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/caption/caption3.sty
+Package: caption3 2020/10/21 v2.2e caption3 kernel (AR)
+\captionmargin=\dimen257
+\captionmargin@=\dimen258
+\captionwidth=\dimen259
+\caption@tempdima=\dimen260
+\caption@indent=\dimen261
+\caption@parindent=\dimen262
+\caption@hangindent=\dimen263
+Package caption Info: Standard document class detected.
+)
+\c@caption@flags=\count346
+\c@continuedfloat=\count347
+Package caption Info: hyperref package is loaded.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/jknapltx/mathrsfs.sty
+Package: mathrsfs 1996/01/01 Math RSFS package v1.0 (jk)
+\symrsfs=\mathgroup10
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/amsfonts.sty
+Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support
+\symAMSa=\mathgroup11
+\symAMSb=\mathgroup12
+LaTeX Font Info: Redeclaring math delimiter \ulcorner on input line 74.
+LaTeX Font Info: Redeclaring math delimiter \urcorner on input line 75.
+LaTeX Font Info: Redeclaring math delimiter \llcorner on input line 76.
+LaTeX Font Info: Redeclaring math delimiter \lrcorner on input line 77.
+LaTeX Font Info: Redeclaring math symbol \square on input line 141.
+LaTeX Font Info: Redeclaring math symbol \lozenge on input line 142.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/amssymb.sty
+Package: amssymb 2013/01/14 v3.01 AMS font symbols
+LaTeX Font Info: Redeclaring math symbol \boxdot on input line 44.
+LaTeX Font Info: Redeclaring math symbol \boxplus on input line 45.
+LaTeX Font Info: Redeclaring math symbol \boxtimes on input line 46.
+LaTeX Font Info: Redeclaring math symbol \blacksquare on input line 48.
+LaTeX Font Info: Redeclaring math symbol \centerdot on input line 49.
+LaTeX Font Info: Redeclaring math symbol \blacklozenge on input line 51.
+LaTeX Font Info: Redeclaring math symbol \circlearrowright on input line 52.
+LaTeX Font Info: Redeclaring math symbol \circlearrowleft on input line 53.
+LaTeX Font Info: Redeclaring math symbol \leftrightharpoons on input line 56.
+LaTeX Font Info: Redeclaring math symbol \boxminus on input line 57.
+LaTeX Font Info: Redeclaring math symbol \Vdash on input line 58.
+LaTeX Font Info: Redeclaring math symbol \Vvdash on input line 59.
+LaTeX Font Info: Redeclaring math symbol \vDash on input line 60.
+LaTeX Font Info: Redeclaring math symbol \twoheadrightarrow on input line 61.
+LaTeX Font Info: Redeclaring math symbol \twoheadleftarrow on input line 62.
+LaTeX Font Info: Redeclaring math symbol \leftleftarrows on input line 63.
+LaTeX Font Info: Redeclaring math symbol \rightrightarrows on input line 64.
+LaTeX Font Info: Redeclaring math symbol \upuparrows on input line 65.
+LaTeX Font Info: Redeclaring math symbol \downdownarrows on input line 66.
+LaTeX Font Info: Redeclaring math symbol \upharpoonright on input line 67.
+LaTeX Font Info: Redeclaring math symbol \downharpoonright on input line 69.
+LaTeX Font Info: Redeclaring math symbol \upharpoonleft on input line 70.
+LaTeX Font Info: Redeclaring math symbol \downharpoonleft on input line 71.
+LaTeX Font Info: Redeclaring math symbol \rightarrowtail on input line 72.
+LaTeX Font Info: Redeclaring math symbol \leftarrowtail on input line 73.
+LaTeX Font Info: Redeclaring math symbol \leftrightarrows on input line 74.
+LaTeX Font Info: Redeclaring math symbol \rightleftarrows on input line 75.
+LaTeX Font Info: Redeclaring math symbol \Lsh on input line 76.
+LaTeX Font Info: Redeclaring math symbol \Rsh on input line 77.
+LaTeX Font Info: Redeclaring math symbol \leftrightsquigarrow on input line 79.
+LaTeX Font Info: Redeclaring math symbol \looparrowleft on input line 80.
+LaTeX Font Info: Redeclaring math symbol \looparrowright on input line 81.
+LaTeX Font Info: Redeclaring math symbol \circeq on input line 82.
+LaTeX Font Info: Redeclaring math symbol \succsim on input line 83.
+LaTeX Font Info: Redeclaring math symbol \gtrsim on input line 84.
+LaTeX Font Info: Redeclaring math symbol \gtrapprox on input line 85.
+LaTeX Font Info: Redeclaring math symbol \multimap on input line 86.
+LaTeX Font Info: Redeclaring math symbol \therefore on input line 87.
+LaTeX Font Info: Redeclaring math symbol \because on input line 88.
+LaTeX Font Info: Redeclaring math symbol \doteqdot on input line 89.
+LaTeX Font Info: Redeclaring math symbol \triangleq on input line 91.
+LaTeX Font Info: Redeclaring math symbol \precsim on input line 92.
+LaTeX Font Info: Redeclaring math symbol \lesssim on input line 93.
+LaTeX Font Info: Redeclaring math symbol \lessapprox on input line 94.
+LaTeX Font Info: Redeclaring math symbol \eqslantless on input line 95.
+LaTeX Font Info: Redeclaring math symbol \eqslantgtr on input line 96.
+LaTeX Font Info: Redeclaring math symbol \curlyeqprec on input line 97.
+LaTeX Font Info: Redeclaring math symbol \curlyeqsucc on input line 98.
+LaTeX Font Info: Redeclaring math symbol \preccurlyeq on input line 99.
+LaTeX Font Info: Redeclaring math symbol \leqq on input line 100.
+LaTeX Font Info: Redeclaring math symbol \leqslant on input line 101.
+LaTeX Font Info: Redeclaring math symbol \lessgtr on input line 102.
+LaTeX Font Info: Redeclaring math symbol \backprime on input line 103.
+LaTeX Font Info: Redeclaring math symbol \risingdotseq on input line 104.
+LaTeX Font Info: Redeclaring math symbol \fallingdotseq on input line 105.
+LaTeX Font Info: Redeclaring math symbol \succcurlyeq on input line 106.
+LaTeX Font Info: Redeclaring math symbol \geqq on input line 107.
+LaTeX Font Info: Redeclaring math symbol \geqslant on input line 108.
+LaTeX Font Info: Redeclaring math symbol \gtrless on input line 109.
+LaTeX Font Info: Redeclaring math symbol \bigstar on input line 117.
+LaTeX Font Info: Redeclaring math symbol \between on input line 118.
+LaTeX Font Info: Redeclaring math symbol \blacktriangledown on input line 119.
+LaTeX Font Info: Redeclaring math symbol \blacktriangleright on input line 120.
+LaTeX Font Info: Redeclaring math symbol \blacktriangleleft on input line 121.
+LaTeX Font Info: Redeclaring math symbol \vartriangle on input line 122.
+LaTeX Font Info: Redeclaring math symbol \blacktriangle on input line 123.
+LaTeX Font Info: Redeclaring math symbol \triangledown on input line 124.
+LaTeX Font Info: Redeclaring math symbol \eqcirc on input line 125.
+LaTeX Font Info: Redeclaring math symbol \lesseqgtr on input line 126.
+LaTeX Font Info: Redeclaring math symbol \gtreqless on input line 127.
+LaTeX Font Info: Redeclaring math symbol \lesseqqgtr on input line 128.
+LaTeX Font Info: Redeclaring math symbol \gtreqqless on input line 129.
+LaTeX Font Info: Redeclaring math symbol \Rrightarrow on input line 130.
+LaTeX Font Info: Redeclaring math symbol \Lleftarrow on input line 131.
+LaTeX Font Info: Redeclaring math symbol \veebar on input line 132.
+LaTeX Font Info: Redeclaring math symbol \barwedge on input line 133.
+LaTeX Font Info: Redeclaring math symbol \doublebarwedge on input line 134.
+LaTeX Font Info: Redeclaring math symbol \measuredangle on input line 137.
+LaTeX Font Info: Redeclaring math symbol \sphericalangle on input line 138.
+LaTeX Font Info: Redeclaring math symbol \varpropto on input line 139.
+LaTeX Font Info: Redeclaring math symbol \smallsmile on input line 140.
+LaTeX Font Info: Redeclaring math symbol \smallfrown on input line 141.
+LaTeX Font Info: Redeclaring math symbol \Subset on input line 142.
+LaTeX Font Info: Redeclaring math symbol \Supset on input line 143.
+LaTeX Font Info: Redeclaring math symbol \Cup on input line 144.
+LaTeX Font Info: Redeclaring math symbol \Cap on input line 146.
+LaTeX Font Info: Redeclaring math symbol \curlywedge on input line 148.
+LaTeX Font Info: Redeclaring math symbol \curlyvee on input line 149.
+LaTeX Font Info: Redeclaring math symbol \leftthreetimes on input line 150.
+LaTeX Font Info: Redeclaring math symbol \rightthreetimes on input line 151.
+LaTeX Font Info: Redeclaring math symbol \subseteqq on input line 152.
+LaTeX Font Info: Redeclaring math symbol \supseteqq on input line 153.
+LaTeX Font Info: Redeclaring math symbol \bumpeq on input line 154.
+LaTeX Font Info: Redeclaring math symbol \Bumpeq on input line 155.
+LaTeX Font Info: Redeclaring math symbol \lll on input line 156.
+LaTeX Font Info: Redeclaring math symbol \ggg on input line 158.
+LaTeX Font Info: Redeclaring math symbol \circledS on input line 160.
+LaTeX Font Info: Redeclaring math symbol \pitchfork on input line 161.
+LaTeX Font Info: Redeclaring math symbol \dotplus on input line 162.
+LaTeX Font Info: Redeclaring math symbol \backsim on input line 163.
+LaTeX Font Info: Redeclaring math symbol \backsimeq on input line 164.
+LaTeX Font Info: Redeclaring math symbol \complement on input line 165.
+LaTeX Font Info: Redeclaring math symbol \intercal on input line 166.
+LaTeX Font Info: Redeclaring math symbol \circledcirc on input line 167.
+LaTeX Font Info: Redeclaring math symbol \circledast on input line 168.
+LaTeX Font Info: Redeclaring math symbol \circleddash on input line 169.
+LaTeX Font Info: Redeclaring math symbol \lvertneqq on input line 171.
+LaTeX Font Info: Redeclaring math symbol \gvertneqq on input line 172.
+LaTeX Font Info: Redeclaring math symbol \nleq on input line 173.
+LaTeX Font Info: Redeclaring math symbol \ngeq on input line 174.
+LaTeX Font Info: Redeclaring math symbol \nless on input line 175.
+LaTeX Font Info: Redeclaring math symbol \ngtr on input line 176.
+LaTeX Font Info: Redeclaring math symbol \nprec on input line 177.
+LaTeX Font Info: Redeclaring math symbol \nsucc on input line 178.
+LaTeX Font Info: Redeclaring math symbol \lneqq on input line 179.
+LaTeX Font Info: Redeclaring math symbol \gneqq on input line 180.
+LaTeX Font Info: Redeclaring math symbol \nleqslant on input line 181.
+LaTeX Font Info: Redeclaring math symbol \ngeqslant on input line 182.
+LaTeX Font Info: Redeclaring math symbol \lneq on input line 183.
+LaTeX Font Info: Redeclaring math symbol \gneq on input line 184.
+LaTeX Font Info: Redeclaring math symbol \npreceq on input line 185.
+LaTeX Font Info: Redeclaring math symbol \nsucceq on input line 186.
+LaTeX Font Info: Redeclaring math symbol \precnsim on input line 187.
+LaTeX Font Info: Redeclaring math symbol \succnsim on input line 188.
+LaTeX Font Info: Redeclaring math symbol \lnsim on input line 189.
+LaTeX Font Info: Redeclaring math symbol \gnsim on input line 190.
+LaTeX Font Info: Redeclaring math symbol \nleqq on input line 191.
+LaTeX Font Info: Redeclaring math symbol \ngeqq on input line 192.
+LaTeX Font Info: Redeclaring math symbol \precneqq on input line 193.
+LaTeX Font Info: Redeclaring math symbol \succneqq on input line 194.
+LaTeX Font Info: Redeclaring math symbol \precnapprox on input line 195.
+LaTeX Font Info: Redeclaring math symbol \succnapprox on input line 196.
+LaTeX Font Info: Redeclaring math symbol \lnapprox on input line 197.
+LaTeX Font Info: Redeclaring math symbol \gnapprox on input line 198.
+LaTeX Font Info: Redeclaring math symbol \nsim on input line 199.
+LaTeX Font Info: Redeclaring math symbol \ncong on input line 200.
+LaTeX Font Info: Redeclaring math symbol \diagup on input line 201.
+LaTeX Font Info: Redeclaring math symbol \diagdown on input line 202.
+LaTeX Font Info: Redeclaring math symbol \varsubsetneq on input line 203.
+LaTeX Font Info: Redeclaring math symbol \varsupsetneq on input line 204.
+LaTeX Font Info: Redeclaring math symbol \nsubseteqq on input line 205.
+LaTeX Font Info: Redeclaring math symbol \nsupseteqq on input line 206.
+LaTeX Font Info: Redeclaring math symbol \subsetneqq on input line 207.
+LaTeX Font Info: Redeclaring math symbol \supsetneqq on input line 208.
+LaTeX Font Info: Redeclaring math symbol \varsubsetneqq on input line 209.
+LaTeX Font Info: Redeclaring math symbol \varsupsetneqq on input line 210.
+LaTeX Font Info: Redeclaring math symbol \subsetneq on input line 211.
+LaTeX Font Info: Redeclaring math symbol \supsetneq on input line 212.
+LaTeX Font Info: Redeclaring math symbol \nsubseteq on input line 213.
+LaTeX Font Info: Redeclaring math symbol \nsupseteq on input line 214.
+LaTeX Font Info: Redeclaring math symbol \nparallel on input line 215.
+LaTeX Font Info: Redeclaring math symbol \nmid on input line 216.
+LaTeX Font Info: Redeclaring math symbol \nshortmid on input line 217.
+LaTeX Font Info: Redeclaring math symbol \nshortparallel on input line 218.
+LaTeX Font Info: Redeclaring math symbol \nvdash on input line 219.
+LaTeX Font Info: Redeclaring math symbol \nVdash on input line 220.
+LaTeX Font Info: Redeclaring math symbol \nvDash on input line 221.
+LaTeX Font Info: Redeclaring math symbol \nVDash on input line 222.
+LaTeX Font Info: Redeclaring math symbol \ntrianglerighteq on input line 223.
+LaTeX Font Info: Redeclaring math symbol \ntrianglelefteq on input line 224.
+LaTeX Font Info: Redeclaring math symbol \ntriangleleft on input line 225.
+LaTeX Font Info: Redeclaring math symbol \ntriangleright on input line 226.
+LaTeX Font Info: Redeclaring math symbol \nleftarrow on input line 227.
+LaTeX Font Info: Redeclaring math symbol \nrightarrow on input line 228.
+LaTeX Font Info: Redeclaring math symbol \nLeftarrow on input line 229.
+LaTeX Font Info: Redeclaring math symbol \nRightarrow on input line 230.
+LaTeX Font Info: Redeclaring math symbol \nLeftrightarrow on input line 231.
+LaTeX Font Info: Redeclaring math symbol \nleftrightarrow on input line 232.
+LaTeX Font Info: Redeclaring math symbol \divideontimes on input line 233.
+LaTeX Font Info: Redeclaring math symbol \varnothing on input line 234.
+LaTeX Font Info: Redeclaring math symbol \nexists on input line 235.
+LaTeX Font Info: Redeclaring math symbol \Finv on input line 236.
+LaTeX Font Info: Redeclaring math symbol \Game on input line 237.
+LaTeX Font Info: Redeclaring math symbol \eth on input line 240.
+LaTeX Font Info: Redeclaring math symbol \eqsim on input line 241.
+LaTeX Font Info: Redeclaring math symbol \beth on input line 242.
+LaTeX Font Info: Redeclaring math symbol \gimel on input line 243.
+LaTeX Font Info: Redeclaring math symbol \daleth on input line 244.
+LaTeX Font Info: Redeclaring math symbol \lessdot on input line 245.
+LaTeX Font Info: Redeclaring math symbol \gtrdot on input line 246.
+LaTeX Font Info: Redeclaring math symbol \ltimes on input line 247.
+LaTeX Font Info: Redeclaring math symbol \rtimes on input line 248.
+LaTeX Font Info: Redeclaring math symbol \shortmid on input line 249.
+LaTeX Font Info: Redeclaring math symbol \shortparallel on input line 250.
+LaTeX Font Info: Redeclaring math symbol \smallsetminus on input line 251.
+LaTeX Font Info: Redeclaring math symbol \thicksim on input line 252.
+LaTeX Font Info: Redeclaring math symbol \thickapprox on input line 253.
+LaTeX Font Info: Redeclaring math symbol \approxeq on input line 254.
+LaTeX Font Info: Redeclaring math symbol \succapprox on input line 255.
+LaTeX Font Info: Redeclaring math symbol \precapprox on input line 256.
+LaTeX Font Info: Redeclaring math symbol \curvearrowleft on input line 257.
+LaTeX Font Info: Redeclaring math symbol \curvearrowright on input line 258.
+LaTeX Font Info: Redeclaring math symbol \digamma on input line 259.
+LaTeX Font Info: Redeclaring math symbol \varkappa on input line 260.
+LaTeX Font Info: Redeclaring math symbol \hslash on input line 262.
+LaTeX Font Info: Redeclaring math symbol \backepsilon on input line 265.
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/booktabs/booktabs.sty
+Package: booktabs 2020/01/12 v1.61803398 Publication quality tables
+\heavyrulewidth=\dimen264
+\lightrulewidth=\dimen265
+\cmidrulewidth=\dimen266
+\belowrulesep=\dimen267
+\belowbottomsep=\dimen268
+\aboverulesep=\dimen269
+\abovetopsep=\dimen270
+\cmidrulesep=\dimen271
+\cmidrulekern=\dimen272
+\defaultaddspace=\dimen273
+\@cmidla=\count348
+\@cmidlb=\count349
+\@aboverulesep=\dimen274
+\@belowrulesep=\dimen275
+\@thisruleclass=\count350
+\@lastruleclass=\count351
+\@thisrulewidth=\dimen276
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/multicol.sty
+Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi)
+\c@tracingmulticols=\count352
+\mult@box=\box56
+\multicol@leftmargin=\dimen277
+\c@unbalance=\count353
+\c@collectmore=\count354
+\doublecol@number=\count355
+\multicoltolerance=\count356
+\multicolpretolerance=\count357
+\full@width=\dimen278
+\page@free=\dimen279
+\premulticols=\dimen280
+\postmulticols=\dimen281
+\multicolsep=\skip65
+\multicolbaselineskip=\skip66
+\partial@page=\box57
+\last@line=\box58
+\maxbalancingoverflow=\dimen282
+\mult@rightbox=\box59
+\mult@grightbox=\box60
+\mult@gfirstbox=\box61
+\mult@firstbox=\box62
+\@tempa=\box63
+\@tempa=\box64
+\@tempa=\box65
+\@tempa=\box66
+\@tempa=\box67
+\@tempa=\box68
+\@tempa=\box69
+\@tempa=\box70
+\@tempa=\box71
+\@tempa=\box72
+\@tempa=\box73
+\@tempa=\box74
+\@tempa=\box75
+\@tempa=\box76
+\@tempa=\box77
+\@tempa=\box78
+\@tempa=\box79
+\@tempa=\box80
+\@tempa=\box81
+\@tempa=\box82
+\@tempa=\box83
+\@tempa=\box84
+\@tempa=\box85
+\@tempa=\box86
+\@tempa=\box87
+\@tempa=\box88
+\@tempa=\box89
+\@tempa=\box90
+\@tempa=\box91
+\@tempa=\box92
+\@tempa=\box93
+\@tempa=\box94
+\@tempa=\box95
+\@tempa=\box96
+\@tempa=\box97
+\@tempa=\box98
+\@tempa=\box99
+\c@minrows=\count358
+\c@columnbadness=\count359
+\c@finalcolumnbadness=\count360
+\last@try=\dimen283
+\multicolovershoot=\dimen284
+\multicolundershoot=\dimen285
+\mult@nat@firstbox=\box100
+\colbreak@box=\box101
+\mc@col@check@num=\count361
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/multirow/multirow.sty
+Package: multirow 2021/03/15 v2.8 Span multiple rows of a table
+\multirow@colwidth=\skip67
+\multirow@cntb=\count362
+\multirow@dima=\skip68
+\bigstrutjot=\dimen286
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty
+Package: fancyvrb 2021/01/20 v3.7 verbatim text (tvz,hv)
+\FV@CodeLineNo=\count363
+\FV@InFile=\read3
+\FV@TabBox=\box102
+\c@FancyVerbLine=\count364
+\FV@StepNumber=\count365
+\FV@OutFile=\write4
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/makecell/makecell.sty
+Package: makecell 2009/08/03 V0.1e Managing of Tab Column Heads and Cells
+\rotheadsize=\dimen287
+\c@nlinenum=\count366
+\TeXr@lab=\toks32
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/hologo/hologo.sty
+Package: hologo 2019/12/05 v1.14 A logo collection with bookmark support (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.sty
+Package: biblatex 2020/12/31 v3.16 programmable bibliographies (PK/MW)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/logreq/logreq.sty
+Package: logreq 2010/08/04 v1.0 xml request logger
+\lrq@indent=\count367
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/logreq/logreq.def
+File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+))
+\c@tabx@nest=\count368
+\c@listtotal=\count369
+\c@listcount=\count370
+\c@liststart=\count371
+\c@liststop=\count372
+\c@citecount=\count373
+\c@citetotal=\count374
+\c@multicitecount=\count375
+\c@multicitetotal=\count376
+\c@instcount=\count377
+\c@maxnames=\count378
+\c@minnames=\count379
+\c@maxitems=\count380
+\c@minitems=\count381
+\c@citecounter=\count382
+\c@maxcitecounter=\count383
+\c@savedcitecounter=\count384
+\c@uniquelist=\count385
+\c@uniquename=\count386
+\c@refsection=\count387
+\c@refsegment=\count388
+\c@maxextratitle=\count389
+\c@maxextratitleyear=\count390
+\c@maxextraname=\count391
+\c@maxextradate=\count392
+\c@maxextraalpha=\count393
+\c@abbrvpenalty=\count394
+\c@highnamepenalty=\count395
+\c@lownamepenalty=\count396
+\c@maxparens=\count397
+\c@parenlevel=\count398
+\blx@tempcnta=\count399
+\blx@tempcntb=\count400
+\blx@tempcntc=\count401
+\blx@maxsection=\count402
+\blx@maxsegment@0=\count403
+\blx@notetype=\count404
+\blx@parenlevel@text=\count405
+\blx@parenlevel@foot=\count406
+\blx@sectionciteorder@0=\count407
+\blx@entrysetcounter=\count408
+\blx@biblioinstance=\count409
+\labelnumberwidth=\skip69
+\labelalphawidth=\skip70
+\biblabelsep=\skip71
+\bibitemsep=\skip72
+\bibnamesep=\skip73
+\bibinitsep=\skip74
+\bibparsep=\skip75
+\bibhang=\skip76
+\blx@bcfin=\read4
+\blx@bcfout=\write5
+\blx@langwohyphens=\language87
+\c@mincomprange=\count410
+\c@maxcomprange=\count411
+\c@mincompwidth=\count412
+Package biblatex Info: Trying to load biblatex default data model...
+Package biblatex Info: ... file 'blx-dm.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-dm.def
+File: blx-dm.def 2020/12/31 v3.16 biblatex localization (PK/MW)
+)
+Package biblatex Info: Trying to load biblatex citestyle data model...
+Package biblatex Info: ... file 'gb7714-2015.dbx' not found.
+Package biblatex Info: Trying to load biblatex custom data model...
+Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+\c@afterword=\count413
+\c@savedafterword=\count414
+\c@annotator=\count415
+\c@savedannotator=\count416
+\c@author=\count417
+\c@savedauthor=\count418
+\c@bookauthor=\count419
+\c@savedbookauthor=\count420
+\c@commentator=\count421
+\c@savedcommentator=\count422
+\c@editor=\count423
+\c@savededitor=\count424
+\c@editora=\count425
+\c@savededitora=\count426
+\c@editorb=\count427
+\c@savededitorb=\count428
+\c@editorc=\count429
+\c@savededitorc=\count430
+\c@foreword=\count431
+\c@savedforeword=\count432
+\c@holder=\count433
+\c@savedholder=\count434
+\c@introduction=\count435
+\c@savedintroduction=\count436
+\c@namea=\count437
+\c@savednamea=\count438
+\c@nameb=\count439
+\c@savednameb=\count440
+\c@namec=\count441
+\c@savednamec=\count442
+\c@translator=\count443
+\c@savedtranslator=\count444
+\c@shortauthor=\count445
+\c@savedshortauthor=\count446
+\c@shorteditor=\count447
+\c@savedshorteditor=\count448
+\c@labelname=\count449
+\c@savedlabelname=\count450
+\c@institution=\count451
+\c@savedinstitution=\count452
+\c@lista=\count453
+\c@savedlista=\count454
+\c@listb=\count455
+\c@savedlistb=\count456
+\c@listc=\count457
+\c@savedlistc=\count458
+\c@listd=\count459
+\c@savedlistd=\count460
+\c@liste=\count461
+\c@savedliste=\count462
+\c@listf=\count463
+\c@savedlistf=\count464
+\c@location=\count465
+\c@savedlocation=\count466
+\c@organization=\count467
+\c@savedorganization=\count468
+\c@origlocation=\count469
+\c@savedoriglocation=\count470
+\c@origpublisher=\count471
+\c@savedorigpublisher=\count472
+\c@publisher=\count473
+\c@savedpublisher=\count474
+\c@language=\count475
+\c@savedlanguage=\count476
+\c@origlanguage=\count477
+\c@savedoriglanguage=\count478
+\c@pageref=\count479
+\c@savedpageref=\count480
+\shorthandwidth=\skip77
+\shortjournalwidth=\skip78
+\shortserieswidth=\skip79
+\shorttitlewidth=\skip80
+\shortauthorwidth=\skip81
+\shorteditorwidth=\skip82
+\locallabelnumberwidth=\skip83
+\locallabelalphawidth=\skip84
+\localshorthandwidth=\skip85
+\localshortjournalwidth=\skip86
+\localshortserieswidth=\skip87
+\localshorttitlewidth=\skip88
+\localshortauthorwidth=\skip89
+\localshorteditorwidth=\skip90
+Package biblatex Info: Trying to load enhanced support for Unicode engines...
+Package biblatex Info: ... file 'blx-unicode.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-unicode.def)
+Package biblatex Info: Trying to load compatibility code...
+Package biblatex Info: ... file 'blx-compat.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-compat.def
+File: blx-compat.def 2020/12/31 v3.16 biblatex compatibility (PK/MW)
+)
+Package biblatex Info: Trying to load generic definitions...
+Package biblatex Info: ... file 'biblatex.def' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.def
+File: biblatex.def 2020/12/31 v3.16 biblatex compatibility (PK/MW)
+\c@textcitecount=\count481
+\c@textcitetotal=\count482
+\c@textcitemaxnames=\count483
+\c@biburlbigbreakpenalty=\count484
+\c@biburlbreakpenalty=\count485
+\c@biburlnumpenalty=\count486
+\c@biburlucpenalty=\count487
+\c@biburllcpenalty=\count488
+\biburlbigskip=\muskip19
+\biburlnumskip=\muskip20
+\biburlucskip=\muskip21
+\biburllcskip=\muskip22
+\c@smartand=\count489
+)
+Package biblatex Info: Trying to load bibliography style 'gb7714-2015'...
+Package biblatex Info: ... file 'gb7714-2015.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.bbx
+File: gb7714-2015.bbx 2021/01/19 v1.0wbiblatex bibliography style
+Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
+File: numeric-comp.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+Package biblatex Info: Trying to load bibliography style 'numeric'...
+Package biblatex Info: ... file 'numeric.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
+File: numeric.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+Package biblatex Info: Trying to load bibliography style 'standard'...
+Package biblatex Info: ... file 'standard.bbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+File: standard.bbx 2020/12/31 v3.16 biblatex bibliography style (PK/MW)
+\c@bbx:relatedcount=\count490
+\c@bbx:relatedtotal=\count491
+)))
+\footbibmargin=\skip91
+\footbiblabelsep=\skip92
+\c@gbnamefmtcase=\count492
+\c@gbalignlabel=\count493
+\c@gbcitelocalcase=\count494
+\c@gbbiblocalcase=\count495
+\c@lanordernum=\count496
+\bibitemindent=\skip93
+\biblabelextend=\skip94
+Package biblatex Info: Delimiter 'finalnamedelim' in context '' already defined, overwriting.
+)
+Package biblatex Info: Trying to load citation style 'gb7714-2015'...
+Package biblatex Info: ... file 'gb7714-2015.cbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex-gb7714-2015/gb7714-2015.cbx
+File: gb7714-2015.cbx 2021/01/19 v1.0wbiblatex citation style
+Package biblatex Info: Trying to load citation style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.cbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
+File: numeric-comp.cbx 2020/12/31 v3.16 biblatex citation style (PK/MW)
+\c@cbx@tempcnta=\count497
+\c@cbx@tempcntb=\count498
+\c@cbx@tempcntc=\count499
+\c@cbx@tempcntd=\count500
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\footcite'.
+Package biblatex Info: Redefining '\footcitetext'.
+Package biblatex Info: Redefining '\smartcite'.
+Package biblatex Info: Redefining '\supercite'.
+Package biblatex Info: Redefining '\textcite'.
+Package biblatex Info: Redefining '\textcites'.
+Package biblatex Info: Redefining '\cites'.
+Package biblatex Info: Redefining '\parencites'.
+Package biblatex Info: Redefining '\smartcites'.
+)
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\cbx@textcite'.
+)
+Package biblatex Info: Trying to load configuration file...
+Package biblatex Info: ... file 'biblatex.cfg' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/biblatex.cfg
+File: biblatex.cfg
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/appendix/appendix.sty
+Package: appendix 2020/02/08 v1.2c extra appendix facilities
+\c@@pps=\count501
+\c@@ppsavesec=\count502
+\c@@ppsaveapp=\count503
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
+\pgfutil@everybye=\toks33
+\pgfutil@tempdima=\dimen288
+\pgfutil@tempdimb=\dimen289
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
+\pgfutil@abb=\box103
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/pgf.revision.tex)
+Package: pgfrcs 2020/12/27 v3.1.8b (3.1.8b)
+))
+Package: pgf 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
+Package: pgfsys 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
+\pgfkeys@pathtoks=\toks34
+\pgfkeys@temptoks=\toks35
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
+\pgfkeys@tmptoks=\toks36
+))
+\pgf@x=\dimen290
+\pgf@y=\dimen291
+\pgf@xa=\dimen292
+\pgf@ya=\dimen293
+\pgf@xb=\dimen294
+\pgf@yb=\dimen295
+\pgf@xc=\dimen296
+\pgf@yc=\dimen297
+\pgf@xd=\dimen298
+\pgf@yd=\dimen299
+\w@pgf@writea=\write6
+\r@pgf@reada=\read5
+\c@pgf@counta=\count504
+\c@pgf@countb=\count505
+\c@pgf@countc=\count506
+\c@pgf@countd=\count507
+\t@pgf@toka=\toks37
+\t@pgf@tokb=\toks38
+\t@pgf@tokc=\toks39
+\pgf@sys@id@count=\count508
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
+File: pgf.cfg 2020/12/27 v3.1.8b (3.1.8b)
+)
+Driver file for pgf: pgfsys-xetex.def
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def
+File: pgfsys-xetex.def 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def
+File: pgfsys-dvipdfmx.def 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
+File: pgfsys-common-pdf.def 2020/12/27 v3.1.8b (3.1.8b)
+)
+\pgfsys@objnum=\count509
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
+File: pgfsyssoftpath.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfsyssoftpath@smallbuffer@items=\count510
+\pgfsyssoftpath@bigbuffer@items=\count511
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
+File: pgfsysprotocol.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex
+Package: pgfcore 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
+\pgfmath@dimen=\dimen300
+\pgfmath@count=\count512
+\pgfmath@box=\box104
+\pgfmath@toks=\toks40
+\pgfmath@stack@operand=\toks41
+\pgfmath@stack@operation=\toks42
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
+\c@pgfmathroundto@lastzeros=\count513
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
+File: pgfcorepoints.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@picminx=\dimen301
+\pgf@picmaxx=\dimen302
+\pgf@picminy=\dimen303
+\pgf@picmaxy=\dimen304
+\pgf@pathminx=\dimen305
+\pgf@pathmaxx=\dimen306
+\pgf@pathminy=\dimen307
+\pgf@pathmaxy=\dimen308
+\pgf@xx=\dimen309
+\pgf@xy=\dimen310
+\pgf@yx=\dimen311
+\pgf@yy=\dimen312
+\pgf@zx=\dimen313
+\pgf@zy=\dimen314
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex
+File: pgfcorepathconstruct.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@path@lastx=\dimen315
+\pgf@path@lasty=\dimen316
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex
+File: pgfcorepathusage.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@shorten@end@additional=\dimen317
+\pgf@shorten@start@additional=\dimen318
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
+File: pgfcorescopes.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfpic=\box105
+\pgf@hbox=\box106
+\pgf@layerbox@main=\box107
+\pgf@picture@serial@count=\count514
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex
+File: pgfcoregraphicstate.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgflinewidth=\dimen319
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.tex
+File: pgfcoretransformations.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@pt@x=\dimen320
+\pgf@pt@y=\dimen321
+\pgf@pt@temp=\dimen322
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex
+File: pgfcorequick.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex
+File: pgfcoreobjects.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.tex
+File: pgfcorepathprocessing.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex
+File: pgfcorearrows.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfarrowsep=\dimen323
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
+File: pgfcoreshade.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@max=\dimen324
+\pgf@sys@shading@range@num=\count515
+\pgf@shadingcount=\count516
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex
+File: pgfcoreimage.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
+File: pgfcoreexternal.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfexternal@startupbox=\box108
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex
+File: pgfcorelayers.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex
+File: pgfcoretransparency.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex
+File: pgfcorepatterns.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex
+File: pgfcorerdf.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
+File: pgfmoduleshapes.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfnodeparttextbox=\box109
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
+File: pgfmoduleplot.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty
+Package: pgfcomp-version-0-65 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@nodesepstart=\dimen325
+\pgf@nodesepend=\dimen326
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty
+Package: pgfcomp-version-1-18 2020/12/27 v3.1.8b (3.1.8b)
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgffor.sty (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) (/usr/local/texlive/2021/texmf-dist/tex/latex/pgf/math/pgfmath.sty (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
+Package: pgffor 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)
+\pgffor@iter=\dimen327
+\pgffor@skip=\dimen328
+\pgffor@stack=\toks43
+\pgffor@toks=\toks44
+)) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
+Package: tikz 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.tex
+File: pgflibraryplothandlers.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@plot@mark@count=\count517
+\pgfplotmarksize=\dimen329
+)
+\tikz@lastx=\dimen330
+\tikz@lasty=\dimen331
+\tikz@lastxsaved=\dimen332
+\tikz@lastysaved=\dimen333
+\tikz@lastmovetox=\dimen334
+\tikz@lastmovetoy=\dimen335
+\tikzleveldistance=\dimen336
+\tikzsiblingdistance=\dimen337
+\tikz@figbox=\box110
+\tikz@figbox@bg=\box111
+\tikz@tempbox=\box112
+\tikz@tempbox@bg=\box113
+\tikztreelevel=\count518
+\tikznumberofchildren=\count519
+\tikznumberofcurrentchild=\count520
+\tikz@fig@count=\count521
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
+File: pgfmodulematrix.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgfmatrixcurrentrow=\count522
+\pgfmatrixcurrentcolumn=\count523
+\pgf@matrix@numberofcolumns=\count524
+)
+\tikz@expandcount=\count525
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarytopaths.code.tex
+File: tikzlibrarytopaths.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarybackgrounds.code.tex
+File: tikzlibrarybackgrounds.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+\pgf@layerbox@background=\box114
+\pgf@layerboxsaved@background=\box115
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex
+File: tikzlibrarycalc.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshadows.code.tex
+File: tikzlibraryshadows.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfadings.code.tex
+File: tikzlibraryfadings.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+ (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/libraries/pgflibraryfadings.code.tex
+File: pgflibraryfadings.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+))) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex
+File: tikzlibrarypositioning.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryfit.code.tex
+File: tikzlibraryfit.code.tex 2020/12/27 v3.1.8b (3.1.8b)
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/titlesec/titlesec.sty
+Package: titlesec 2019/10/16 v2.13 Sectioning titles
+\ttl@box=\box116
+\beforetitleunit=\skip95
+\aftertitleunit=\skip96
+\ttl@plus=\dimen338
+\ttl@minus=\dimen339
+\ttl@toksa=\toks45
+\titlewidth=\dimen340
+\titlewidthlast=\dimen341
+\titlewidthfirst=\dimen342
+
+(/usr/local/texlive/2021/texmf-dist/tex/latex/titlesec/titleps.sty)) (/usr/local/texlive/2021/texmf-dist/tex/latex/apptools/apptools.sty
+Package: apptools 2012/11/28 v1.0 Tools for customizing appendices
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/pifont.sty
+Package: pifont 2020/03/25 PSNFSS-v9.3 Pi font support (SPQR)
+LaTeX Font Info: Trying to load font information for U+pzd on input line 63.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/upzd.fd
+File: upzd.fd 2001/06/04 font definitions for U/pzd.
+)
+LaTeX Font Info: Trying to load font information for U+psy on input line 64.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/psnfss/upsy.fd
+File: upsy.fd 2001/06/04 font definitions for U/psy.
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/manfnt/manfnt.sty
+Package: manfnt 1999/07/010.2LaTeX2e manfnt package
+\dbend@height=\skip97
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/bbding/bbding.sty
+Package: bbding 1999/04/15 v1.01 Dingbats symbols
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty
+Package: tcolorbox 2020/10/09 version 4.42 text color boxes
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/verbatim.sty
+Package: verbatim 2020-07-07 v1.5u LaTeX2e package for verbatim enhancements
+\every@verbatim=\toks46
+\verbatim@line=\toks47
+\verbatim@in@stream=\read6
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/environ/environ.sty
+Package: environ 2014/05/04 v0.3 A new way to define environments
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/trimspaces/trimspaces.sty
+Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list
+))
+\tcb@titlebox=\box117
+\tcb@upperbox=\box118
+\tcb@lowerbox=\box119
+\tcb@phantombox=\box120
+\c@tcbbreakpart=\count526
+\c@tcblayer=\count527
+\c@tcolorbox@number=\count528
+\tcb@temp=\box121
+\tcb@temp=\box122
+\tcb@temp=\box123
+\tcb@temp=\box124
+\tcb@out=\write7
+\tcb@record@out=\write8
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbraster.code.tex
+Library (tcolorbox): 'tcbraster.code.tex' version '4.42'
+\c@tcbrastercolumn=\count529
+\c@tcbrasterrow=\count530
+\c@tcbraster=\count531
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbskins.code.tex
+Library (tcolorbox): 'tcbskins.code.tex' version '4.42'
+\tcb@waterbox=\box125
+(/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbskinsjigsaw.code.tex
+Library (tcolorbox): 'tcbskinsjigsaw.code.tex' version '4.42'
+)) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbbreakable.code.tex
+Library (tcolorbox): 'tcbbreakable.code.tex' version '4.42'
+(/usr/local/texlive/2021/texmf-dist/tex/generic/oberdiek/pdfcol.sty
+Package: pdfcol 2019/12/29 v1.6 Handle new color stacks for pdfTeX (HO)
+Package pdfcol Info: Interface disabled because of missing PDF mode of pdfTeX.
+)
+Package pdfcol Info: pdfTeX's color stacks are not available.
+\tcb@testbox=\box126
+\tcb@totalupperbox=\box127
+\tcb@totallowerbox=\box128
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbhooks.code.tex
+Library (tcolorbox): 'tcbhooks.code.tex' version '4.42'
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbtheorems.code.tex
+Library (tcolorbox): 'tcbtheorems.code.tex' version '4.42'
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbfitting.code.tex
+Library (tcolorbox): 'tcbfitting.code.tex' version '4.42'
+\tcbfitdim=\dimen343
+\tcb@lowerfitdim=\dimen344
+\tcb@upperfitdim=\dimen345
+\tcb@cur@hbadness=\count532
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tcolorbox/tcbxparse.code.tex
+Library (tcolorbox): 'tcbxparse.code.tex' version '4.42'
+))
+\c@tcb@cnt@definition=\count533
+\c@tcb@cnt@theorem=\count534
+\c@tcb@cnt@postulate=\count535
+\c@tcb@cnt@axiom=\count536
+\c@tcb@cnt@corollary=\count537
+\c@tcb@cnt@lemma=\count538
+\c@tcb@cnt@proposition=\count539
+\c@exam=\count540
+\c@exer=\count541
+\c@prob=\count542
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/adforn/adforn.sty
+Package: adforn 2019/10/13 v1.1b adforn CFR
+LaTeX Font Info: Trying to load font information for U+OrnementsADF on input line 4.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/adforn/uornementsadf.fd)) (/usr/local/texlive/2021/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
+Package: fancyhdr 2021/01/28 v4.0.1 Extensive control of page headers and footers
+\f@nch@headwidth=\skip98
+\f@nch@O@elh=\skip99
+\f@nch@O@erh=\skip100
+\f@nch@O@olh=\skip101
+\f@nch@O@orh=\skip102
+\f@nch@O@elf=\skip103
+\f@nch@O@erf=\skip104
+\f@nch@O@olf=\skip105
+\f@nch@O@orf=\skip106
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/listings.sty
+\lst@mode=\count543
+\lst@gtempboxa=\box129
+\lst@token=\toks48
+\lst@length=\count544
+\lst@currlwidth=\dimen346
+\lst@column=\count545
+\lst@pos=\count546
+\lst@lostspace=\dimen347
+\lst@width=\dimen348
+\lst@newlines=\count547
+\lst@lineno=\count548
+\lst@maxwidth=\dimen349
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/lstmisc.sty
+File: lstmisc.sty 2020/03/24 1.8d (Carsten Heinz)
+\c@lstnumber=\count549
+\lst@skipnumbers=\count550
+\lst@framebox=\box130
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/listings.cfg
+File: listings.cfg 2020/03/24 1.8d listings configuration
+))
+Package: listings 2020/03/24 1.8d (Carsten Heinz)
+ (/usr/local/texlive/2021/texmf-dist/tex/xelatex/xecjk/xeCJK-listings.sty
+Package: xeCJK-listings 2020/10/19 v3.8.6 xeCJK patch file for listings
+\l__xeCJK_listings_max_char_int=\count551
+\l__xeCJK_listings_flag_int=\count552
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/listings/lstlang1.sty
+File: lstlang1.sty 2020/03/24 1.8d listings language file
+) (/usr/local/texlive/2021/texmf-dist/tex/latex/tools/bm.sty
+Package: bm 2019/07/24 v1.2d Bold Symbol Support (DPC/FMi)
+LaTeX Info: Redefining \bm on input line 209.
+))
+Package csquotes Info: Checking for multilingual support...
+Package csquotes Info: ... none found.
+ (./text_to_speech.aux)
+\openout1 = `text_to_speech.aux'.
+
+LaTeX Font Info: Checking defaults for OML/ntxmi/m/it on input line 26.
+LaTeX Font Info: Trying to load font information for OML+ntxmi on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/omlntxmi.fd
+File: omlntxmi.fd 2015/08/25 Fontinst v1.933 font definitions for OML/ntxmi.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for TU/lmr/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for U/ntxexa/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for U+ntxexa on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxexa.fd
+File: untxexa.fd 2012/04/16 Fontinst v1.933 font definitions for U/ntxexa.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 26.
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for LMS/ntxsy/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for LMS+ntxsy on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/lmsntxsy.fd
+File: lmsntxsy.fd 2016/07/02 Fontinst v1.933 font definitions for LMS/ntxsy.
+)
+LaTeX Font Info: ... okay on input line 26.
+LaTeX Font Info: Checking defaults for LMX/ntxexx/m/n on input line 26.
+LaTeX Font Info: Trying to load font information for LMX+ntxexx on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/lmxntxexx.fd
+File: lmxntxexx.fd 2016/07/03 Fontinst v1.933 font definitions for LMX/ntxexx.
+)
+LaTeX Font Info: ... okay on input line 26.
+Package hyperref Info: Link coloring ON on input line 26.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/hyperref/nameref.sty
+Package: nameref 2021-04-02 v2.47 Cross-referencing by name of section
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/refcount/refcount.sty
+Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO)
+) (/usr/local/texlive/2021/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty
+Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
+)
+\c@section@level=\count553
+)
+LaTeX Info: Redefining \ref on input line 26.
+LaTeX Info: Redefining \pageref on input line 26.
+LaTeX Info: Redefining \nameref on input line 26.
+ (./text_to_speech.out) (./text_to_speech.out)
+\@outlinefile=\write9
+\openout9 = `text_to_speech.out'.
+
+
+*geometry* driver: auto-detecting
+*geometry* detected driver: xetex
+*geometry* verbose mode - [ preamble ] result:
+* driver: xetex
+* paper: a4paper
+* layout:
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes:
+* h-part:(L,W,R)=(56.9055pt, 483.69687pt, 56.9055pt)
+* v-part:(T,H,B)=(72.26997pt, 700.5069pt, 72.26997pt)
+* \paperwidth=597.50787pt
+* \paperheight=845.04684pt
+* \textwidth=483.69687pt
+* \textheight=700.5069pt
+* \oddsidemargin=-15.36449pt
+* \evensidemargin=-15.36449pt
+* \topmargin=-73.12352pt
+* \headheight=61.74242pt
+* \headsep=11.38109pt
+* \topskip=10.0pt
+* \footskip=34.1433pt
+* \marginparwidth=61.0pt
+* \marginparsep=7.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+ABD: EverySelectfont initializing macros
+LaTeX Info: Redefining \selectfont on input line 26.
+\c@mv@tabular=\count554
+\c@mv@boldtabular=\count555
+Package caption Info: Begin \AtBeginDocument code.
+Package caption Info: listings package is loaded.
+Package caption Info: End \AtBeginDocument code.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/footmisc/footmisc.sty
+Package: footmisc 2011/06/06 v5.5b a miscellany of footnote facilities
+\FN@temptoken=\toks49
+\footnotemargin=\dimen350
+\c@pp@next@reset=\count556
+Package footmisc Info: Declaring symbol style bringhurst on input line 855.
+Package footmisc Info: Declaring symbol style chicago on input line 863.
+Package footmisc Info: Declaring symbol style wiley on input line 872.
+Package footmisc Info: Declaring symbol style lamport-robust on input line 883.
+Package footmisc Info: Declaring symbol style lamport* on input line 903.
+Package footmisc Info: Declaring symbol style lamport*-robust on input line 924.
+)
+Package biblatex Info: Trying to load language 'english'...
+Package biblatex Info: ... file 'english.lbx' found.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/lbx/english.lbx
+File: english.lbx 2020/12/31 v3.16 biblatex localization (PK/MW)
+)
+Package biblatex Info: XeTeX detected.
+(biblatex) Assuming input encoding 'utf8'.
+Package biblatex Info: Automatic encoding selection.
+(biblatex) Assuming data encoding 'utf8'.
+Package biblatex Info: Document encoding is UTF8 ....
+Package biblatex Info: ... and expl3
+(biblatex) 2021-02-18 L3 programming layer (loader)
+(biblatex) is new enough (at least 2020/04/06),
+(biblatex) setting 'casechanger=expl3'.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/biblatex/blx-case-expl3.sty
+Package: blx-case-expl3 2020/12/31 v3.16 expl3 case changing code for biblatex
+)
+\openout5 = `text_to_speech.bcf'.
+
+Package biblatex Info: Trying to load bibliographic data...
+Package biblatex Info: ... file 'text_to_speech.bbl' not found.
+
+No file text_to_speech.bbl.
+Package biblatex Info: Reference section=0 on input line 26.
+Package biblatex Info: Reference segment=0 on input line 26.
+\c@lstlisting=\count557
+Package hyperref Info: Option `pageanchor' set `false' on input line 28.
+*geometry* verbose mode - [ newgeometry ] result:
+* driver: xetex
+* paper: a4paper
+* layout:
+* layoutoffset:(h,v)=(0.0pt,0.0pt)
+* modes:
+* h-part:(L,W,R)=(0.0pt, 597.50787pt, 0.0pt)
+* v-part:(T,H,B)=(0.0pt, 845.04684pt, 0.0pt)
+* \paperwidth=597.50787pt
+* \paperheight=845.04684pt
+* \textwidth=597.50787pt
+* \textheight=845.04684pt
+* \oddsidemargin=-72.26999pt
+* \evensidemargin=-72.26999pt
+* \topmargin=-145.3935pt
+* \headheight=61.74242pt
+* \headsep=11.38109pt
+* \topskip=10.0pt
+* \footskip=34.1433pt
+* \marginparwidth=61.0pt
+* \marginparsep=7.0pt
+* \columnsep=10.0pt
+* \skip\footins=9.0pt plus 4.0pt minus 2.0pt
+* \hoffset=0.0pt
+* \voffset=0.0pt
+* \mag=1000
+* \@twocolumnfalse
+* \@twosidefalse
+* \@mparswitchfalse
+* \@reversemarginfalse
+* (1in=72.27pt=25.4mm, 1cm=28.453pt)
+
+File: ./figure//cover.jpeg Graphic file (type bmp)
+<./figure//cover.jpeg>
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 10.0pt on input line 28.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 24.88pt on input line 28.
+LaTeX Font Info: Trying to load font information for OT1+ntxtlf on input line 28.
+(/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/ot1ntxtlf.fd
+File: ot1ntxtlf.fd 2015/01/17 v1.0 font definition file for OT1/ntx/tlf
+)
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 10.0pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 7.3pt on input line 28.
+LaTeX Font Info: Font shape `OT1/ntxtlf/m/n' will be
+(Font) scaled to size 5.5pt on input line 28.
+LaTeX Font Info: Trying to load font information for U+ntxmia on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxmia.fd
+File: untxmia.fd 2018/04/14 Fontinst v1.933 font definitions for U/ntxmia.
+)
+LaTeX Font Info: Trying to load font information for U+ntxsym on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxsym.fd
+File: untxsym.fd 2015/03/20 Fontinst v1.933 font definitions for U/ntxsym.
+)
+LaTeX Font Info: Trying to load font information for U+ntxsyc on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/untxsyc.fd
+File: untxsyc.fd 2012/04/12 Fontinst v1.933 font definitions for U/ntxsyc.
+)
+LaTeX Font Info: Trying to load font information for U+esint on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/esint/uesint.fd
+File: uesint.fd
+)
+LaTeX Font Info: Trying to load font information for U+rsfs on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/jknapltx/ursfs.fd
+File: ursfs.fd 1998/03/24 rsfs font definition file (jk)
+)
+LaTeX Font Info: Trying to load font information for U+msa on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/umsa.fd
+File: umsa.fd 2013/01/14 v3.01 AMS symbols A
+)
+LaTeX Font Info: Trying to load font information for U+msb on input line 28.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/amsfonts/umsb.fd
+File: umsb.fd 2013/01/14 v3.01 AMS symbols B
+)
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 14.4pt on input line 28.
+
+
+Package fontspec Warning: Font "Kaiti SC" does not contain requested Script
+(fontspec) "CJK".
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC Bold/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC/BI" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "Kaiti SC/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'KaitiSC(0)' created for font 'Kaiti SC'
+(fontspec) with options [Script={CJK},BoldFont={Kaiti SC Bold}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.: <->"Kaiti
+(fontspec) SC/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+(fontspec) - 'bold' (b/n) with NFSS spec.: <->"Kaiti SC
+(fontspec) Bold/OT:language=dflt;"
+(fontspec) - 'bold small caps' (b/sc) with NFSS spec.:
+
+[1
+
+
+
+]
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 17.28pt on input line 31.
+ [1
+
+
+
+] (./text_to_speech.toc [2
+
+]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 7.0pt on input line 173.
+ [3] [4])
+\tf@toc=\write10
+\openout10 = `text_to_speech.toc'.
+
+ [5]
+第 1{} 章 1.
+LaTeX Font Info: Font shape `T1/ntxtlf/b/n' will be
+(Font) scaled to size 12.0pt on input line 63.
+File: ./image//human_speech_arch.png Graphic file (type bmp)
+<./image//human_speech_arch.png>
+File: ./image//text_to_speech_arch.png Graphic file (type bmp)
+<./image//text_to_speech_arch.png>
+File: ./image//text_to_speech_history.png Graphic file (type bmp)
+<./image//text_to_speech_history.png>
+[1
+
+
+] [2] [3] [4] [5]
+
+Package fontspec Warning: Font "STFangsong" does not contain requested Script
+(fontspec) "CJK".
+
+
+Package fontspec Info: Could not resolve font "STFangsong/BI" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "STFangsong/B" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Could not resolve font "STFangsong/I" (it probably
+(fontspec) doesn't exist).
+
+
+Package fontspec Info: Font family 'STFangsong(0)' created for font
+(fontspec) 'STFangsong' with options [Script={CJK}].
+(fontspec)
+(fontspec) This font family consists of the following NFSS
+(fontspec) series/shapes:
+(fontspec)
+(fontspec) - 'normal' (m/n) with NFSS spec.:
+(fontspec) <->"STFangsong/OT:language=dflt;"
+(fontspec) - 'small caps' (m/sc) with NFSS spec.:
+
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 9.0pt on input line 248.
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 8.0pt on input line 248.
+[6] [7] [8] [9] [10]
+第 2{} 章 2.
+File: ./image//loudness_curve.png Graphic file (type bmp)
+<./image//loudness_curve.png>
+[11
+
+]
+File: ./image//frequency_f0.png Graphic file (type bmp)
+<./image//frequency_f0.png>
+ [12]
+LaTeX Font Info: Trying to load font information for T1+ntxsups on input line 469.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/t1ntxsups.fd
+File: t1ntxsups.fd 2015/01/17 v1.0
+)
+LaTeX Font Info: Font shape `T1/ntxsups/m/n' will be
+(Font) scaled to size 10.0pt on input line 469.
+LaTeX Font Info: Font shape `T1/ntxsups/m/n' will be
+(Font) scaled to size 8.0pt on input line 469.
+ [13]
+File: ./image//frequency_spectrum.jpeg Graphic file (type bmp)
+<./image//frequency_spectrum.jpeg>
+File: ./image//frequency_time_fig.png Graphic file (type bmp)
+<./image//frequency_time_fig.png>
+ [14]
+File: ./image//ipa_consant.png Graphic file (type bmp)
+<./image//ipa_consant.png>
+File: ./image//ipa_consant_not.png Graphic file (type bmp)
+<./image//ipa_consant_not.png>
+File: ./image//vowel.png Graphic file (type bmp)
+<./image//vowel.png>
+File: ./image//other_alphabet.png Graphic file (type bmp)
+<./image//other_alphabet.png>
+ [15] [16] [17] [18] [19]
+第 3{} 章 3.
+[20
+
+] [21]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/sl' will be
+(Font) scaled to size 9.0pt on input line 776.
+LaTeX Font Info: Trying to load font information for TS1+ntxtlf on input line 776.
+ (/usr/local/texlive/2021/texmf-dist/tex/latex/newtx/ts1ntxtlf.fd
+File: ts1ntxtlf.fd 2015/01/18 v1.0 fd file for TS1/ntxtlf
+)
+LaTeX Font Info: Font shape `TS1/ntxtlf/m/sl' in size <9> not available
+(Font) Font shape `TS1/ntxtlf/m/it' tried instead on input line 776.
+LaTeX Font Info: Font shape `TS1/ntxtlf/m/it' will be
+(Font) scaled to size 9.0pt on input line 776.
+File: ./image//mel_vs_f.png Graphic file (type bmp)
+<./image//mel_vs_f.png>
+ [22] [23]
+File: ./image//text_to_speech_acoustic_feature.png Graphic file (type bmp)
+<./image//text_to_speech_acoustic_feature.png>
+ [24]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/it' will be
+(Font) scaled to size 9.0pt on input line 891.
+File: ./image//waveform.png Graphic file (type bmp)
+<./image//waveform.png>
+ [25] [26]
+File: ./image//mel_spectrogram.png Graphic file (type bmp)
+<./image//mel_spectrogram.png>
+File: ./image//mfcc.png Graphic file (type bmp)
+<./image//mfcc.png>
+ [27] [28]
+第 4{} 章 4.
+Missing character: There is no ə ("259) in font ntx-Regular-tlf-t1!
+Missing character: There is no ʊ ("28A) in font ntx-Regular-tlf-t1!
+[29
+
+]
+File: ./image//sample_praat.png Graphic file (type bmp)
+<./image//sample_praat.png>
+ [30]
+Missing character: There is no ʌ ("28C) in font ntx-Regular-tlf-t1!
+Missing character: There is no ɪ ("26A) in font ntx-Regular-tlf-t1!
+ [31] [32] [33] [34]
+第 5{} 章 5.
+File: ./image//text_to_speech-语音合成工作流.png Graphic file (type bmp)
+<./image//text_to_speech-语音合成工作流.png>
+Missing character: There is no ō ("14D) in font ntx-Regular-tlf-t1!
+Missing character: There is no ˌ ("2CC) in font ntx-Regular-tlf-t1!
+File: ./image//tacotron2_arch.png Graphic file (type bmp)
+<./image//tacotron2_arch.png>
+[35
+
+]
+File: ./image//tacotron2_decoder.png Graphic file (type bmp)
+<./image//tacotron2_decoder.png>
+ [36]
+File: ./image//fastspeech_arch_paper.png Graphic file (type bmp)
+<./image//fastspeech_arch_paper.png>
+ [37] [38] [39] [40] [41] [42]
+File: ./image//vits_arch.png Graphic file (type bmp)
+<./image//vits_arch.png>
+ [43] [44] [45]
+第 6{} 章 6.
+[46
+
+] [47]
+File: ./image//vocoder_world_arch.png Graphic file (type bmp)
+<./image//vocoder_world_arch.png>
+ [48]
+File: ./image//vocoder_pitch_harmonic.png Graphic file (type bmp)
+<./image//vocoder_pitch_harmonic.png>
+File: ./image//vocoder_world_dio1.png Graphic file (type bmp)
+<./image//vocoder_world_dio1.png>
+ [49]
+File: ./image//vocoder_world_sp.png Graphic file (type bmp)
+<./image//vocoder_world_sp.png>
+ [50]
+File: ./image//vocoder_world_synthesis.png Graphic file (type bmp)
+<./image//vocoder_world_synthesis.png>
+ [51]
+File: ./image//vocoder_nhv_source_filter.png Graphic file (type bmp)
+<./image//vocoder_nhv_source_filter.png>
+ [52]
+File: ./image//vocoder_nhv_arch.png Graphic file (type bmp)
+<./image//vocoder_nhv_arch.png>
+ [53]
+File: ./image//vocoder_nhv_inference.png Graphic file (type bmp)
+<./image//vocoder_nhv_inference.png>
+File: ./image//vocoder_nhv_nn_filter_estimator.png Graphic file (type bmp)
+<./image//vocoder_nhv_nn_filter_estimator.png>
+ [54]
+File: ./image//vocoder_nhv_harmonic_sample.png Graphic file (type bmp)
+<./image//vocoder_nhv_harmonic_sample.png>
+ [55] [56]
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 7.3pt on input line 2066.
+LaTeX Font Info: Font shape `T1/ntxtlf/m/n' will be
+(Font) scaled to size 5.5pt on input line 2066.
+ [57] [58] [59] [60] [61] [62] [63] [64] [65] [66]
+第 7{} 章 7.
+File: ./image//text_to_speech_knowledge.png Graphic file (type bmp)
+<./image//text_to_speech_knowledge.png>
+[67
+
+] [68] [69] [70] (./text_to_speech.aux)
+Package rerunfilecheck Info: File `text_to_speech.out' has not changed.
+(rerunfilecheck) Checksum: 921A08803FF5D1BC0094C57886267B95;20683.
+Package logreq Info: Writing requests to 'text_to_speech.run.xml'.
+\openout1 = `text_to_speech.run.xml'.
+
+ )
+Here is how much of TeX's memory you used:
+ 47059 strings out of 476919
+ 975022 string characters out of 5821841
+ 2252612 words of memory out of 5000000
+ 66161 multiletter control sequences out of 15000+600000
+ 458064 words of font info for 113 fonts, out of 8000000 for 9000
+ 1348 hyphenation exceptions out of 8191
+ 118i,12n,131p,1436b,1887s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+Output written on text_to_speech.pdf (76 pages).
diff --git a/text_to_speech.out b/text_to_speech.out
new file mode 100644
index 0000000..820c281
--- /dev/null
+++ b/text_to_speech.out
@@ -0,0 +1,153 @@
+\BOOKMARK [0][]{chapter.1}{\376\377\0001\000\040\213\355\227\363\124\010\142\020\151\202\217\360}{}% 1
+\BOOKMARK [1][]{section.1.1}{\376\377\0001\000.\0001\000\040\200\314\146\157\124\214\151\202\217\360}{chapter.1}% 2
+\BOOKMARK [2][]{subsection.1.1.1}{\376\377\0001\000.\0001\000.\0001\000\040\200\314\146\157\116\313\176\315}{section.1.1}% 3
+\BOOKMARK [2][]{subsection.1.1.2}{\376\377\0001\000.\0001\000.\0002\000\040\213\355\227\363\124\010\142\020\151\202\217\360}{section.1.1}% 4
+\BOOKMARK [2][]{subsection.1.1.3}{\376\377\0001\000.\0001\000.\0003\000\040\213\355\227\363\124\010\142\020\166\204\123\206\123\362}{section.1.1}% 5
+\BOOKMARK [2][]{subsection.1.1.4}{\376\377\0001\000.\0001\000.\0004\000\040\137\123\116\343\213\355\227\363\124\010\142\020\150\106\147\266}{section.1.1}% 6
+\BOOKMARK [1][]{section.1.2}{\376\377\0001\000.\0002\000\040\000A\000w\000e\000s\000o\000m\000e\000\040\000L\000i\000s\000t}{chapter.1}% 7
+\BOOKMARK [1][]{section.1.3}{\376\377\0001\000.\0003\000\040\123\302\200\003\116\146\174\115}{chapter.1}% 8
+\BOOKMARK [1][]{section.1.4}{\376\377\0001\000.\0004\000\040\213\355\227\363\166\370\121\163\166\204\117\032\213\256\060\001\147\037\122\012\060\001\153\324\215\133\124\214\121\154\123\370}{chapter.1}% 9
+\BOOKMARK [2][]{subsection.1.4.1}{\376\377\0001\000.\0004\000.\0001\000\040\117\032\213\256}{section.1.4}% 10
+\BOOKMARK [2][]{subsection.1.4.2}{\376\377\0001\000.\0004\000.\0002\000\040\147\037\122\012}{section.1.4}% 11
+\BOOKMARK [2][]{subsection.1.4.3}{\376\377\0001\000.\0004\000.\0003\000\040\147\000\145\260\213\272\145\207}{section.1.4}% 12
+\BOOKMARK [2][]{subsection.1.4.4}{\376\377\0001\000.\0004\000.\0004\000\040\153\324\215\133}{section.1.4}% 13
+\BOOKMARK [2][]{subsection.1.4.5}{\376\377\0001\000.\0004\000.\0005\000\040\121\154\123\370}{section.1.4}% 14
+\BOOKMARK [2][]{subsection.1.4.6}{\376\377\0001\000.\0004\000.\0006\000\040\137\256\117\341\121\154\117\027\123\367}{section.1.4}% 15
+\BOOKMARK [1][]{section.1.5}{\376\377\0001\000.\0005\000\040\137\000\156\220\215\104\145\231}{chapter.1}% 16
+\BOOKMARK [2][]{subsection.1.5.1}{\376\377\0001\000.\0005\000.\0001\000\040\116\055\145\207\145\160\143\156\226\306}{section.1.5}% 17
+\BOOKMARK [2][]{subsection.1.5.2}{\376\377\0001\000.\0005\000.\0002\000\040\202\361\145\207\145\160\143\156\226\306}{section.1.5}% 18
+\BOOKMARK [2][]{subsection.1.5.3}{\376\377\0001\000.\0005\000.\0003\000\040\140\305\141\037\145\160\143\156\226\306}{section.1.5}% 19
+\BOOKMARK [2][]{subsection.1.5.4}{\376\377\0001\000.\0005\000.\0004\000\040\121\166\133\203\145\160\143\156\226\306}{section.1.5}% 20
+\BOOKMARK [2][]{subsection.1.5.5}{\376\377\0001\000.\0005\000.\0005\000\040\137\000\156\220\135\345\121\167}{section.1.5}% 21
+\BOOKMARK [2][]{subsection.1.5.6}{\376\377\0001\000.\0005\000.\0006\000\040\137\000\156\220\230\171\166\356}{section.1.5}% 22
+\BOOKMARK [1][]{section.1.6}{\376\377\0001\000.\0006\000\040\213\355\227\363\124\010\142\020\213\304\116\367\143\007\150\007}{chapter.1}% 23
+\BOOKMARK [1][]{section.1.7}{\376\377\0001\000.\0007\000\040\136\163\127\107\141\017\211\301\137\227\122\006\166\204\155\113\213\304\211\201\154\102\116\016\145\271\154\325}{chapter.1}% 24
+\BOOKMARK [2][]{subsection.1.7.1}{\376\377\0001\000.\0007\000.\0001\000\040\133\236\232\214\211\201\154\102}{section.1.7}% 25
+\BOOKMARK [2][]{subsection.1.7.2}{\376\377\0001\000.\0007\000.\0002\000\040\133\236\232\214\145\271\154\325}{section.1.7}% 26
+\BOOKMARK [2][]{subsection.1.7.3}{\376\377\0001\000.\0007\000.\0003\000\040\133\236\232\214\153\145\232\244}{section.1.7}% 27
+\BOOKMARK [2][]{subsection.1.7.4}{\376\377\0001\000.\0007\000.\0004\000\040\133\236\232\214\213\276\213\241}{section.1.7}% 28
+\BOOKMARK [2][]{subsection.1.7.5}{\376\377\0001\000.\0007\000.\0005\000\040\133\236\232\214\145\160\143\156\131\004\164\006}{section.1.7}% 29
+\BOOKMARK [0][]{chapter.2}{\376\377\0002\000\040\213\355\227\363\117\341\123\367\127\372\170\100}{}% 30
+\BOOKMARK [1][]{section.2.1}{\376\377\0002\000.\0001\000\040\123\302\200\003\215\104\145\231}{chapter.2}% 31
+\BOOKMARK [1][]{section.2.2}{\376\377\0002\000.\0002\000\040\213\355\227\363\127\372\147\054\151\202\137\365}{chapter.2}% 32
+\BOOKMARK [2][]{subsection.2.2.1}{\376\377\0002\000.\0002\000.\0001\000\040\200\375\221\317}{section.2.2}% 33
+\BOOKMARK [2][]{subsection.2.2.2}{\376\377\0002\000.\0002\000.\0002\000\040\167\355\145\366\200\375\221\317}{section.2.2}% 34
+\BOOKMARK [2][]{subsection.2.2.3}{\376\377\0002\000.\0002\000.\0003\000\040\130\360\137\072\124\214\130\360\137\072\176\247}{section.2.2}% 35
+\BOOKMARK [2][]{subsection.2.2.4}{\376\377\0002\000.\0002\000.\0004\000\040\124\315\136\246}{section.2.2}% 36
+\BOOKMARK [2][]{subsection.2.2.5}{\376\377\0002\000.\0002\000.\0005\000\040\217\307\226\366\163\207}{section.2.2}% 37
+\BOOKMARK [2][]{subsection.2.2.6}{\376\377\0002\000.\0002\000.\0006\000\040\121\161\143\057\134\360}{section.2.2}% 38
+\BOOKMARK [2][]{subsection.2.2.7}{\376\377\0002\000.\0002\000.\0007\000\040\127\372\230\221\124\214\127\372\227\363\124\150\147\037}{section.2.2}% 39
+\BOOKMARK [2][]{subsection.2.2.8}{\376\377\0002\000.\0002\000.\0008\000\040\227\363\232\330}{section.2.2}% 40
+\BOOKMARK [2][]{subsection.2.2.9}{\376\377\0002\000.\0002\000.\0009\000\040\000M\000F\000C\000C\124\214\213\355\214\061\126\376}{section.2.2}% 41
+\BOOKMARK [1][]{section.2.3}{\376\377\0002\000.\0003\000\040\213\355\212\000\133\146}{chapter.2}% 42
+\BOOKMARK [2][]{subsection.2.3.1}{\376\377\0002\000.\0003\000.\0001\000\040\126\375\226\105\227\363\150\007\173\200\116\313}{section.2.3}% 43
+\BOOKMARK [2][]{subsection.2.3.2}{\376\377\0002\000.\0003\000.\0002\000\040\000I\000P\000A\166\204\133\127\153\315\124\214\123\321\227\363}{section.2.3}% 44
+\BOOKMARK [2][]{subsection.2.3.3}{\376\377\0002\000.\0003\000.\0003\000\040\227\363\174\373\133\146}{section.2.3}% 45
+\BOOKMARK [2][]{subsection.2.3.4}{\376\377\0002\000.\0003\000.\0004\000\040\123\302\200\003\215\104\145\231}{section.2.3}% 46
+\BOOKMARK [1][]{section.2.4}{\376\377\0002\000.\0004\000\040\227\363\230\221\150\074\137\017}{chapter.2}% 47
+\BOOKMARK [1][]{section.2.5}{\376\377\0002\000.\0005\000\040\145\160\133\127\117\341\123\367\131\004\164\006}{chapter.2}% 48
+\BOOKMARK [2][]{subsection.2.5.1}{\376\377\0002\000.\0005\000.\0001\000\040\152\041\145\160\217\154\143\142}{section.2.5}% 49
+\BOOKMARK [2][]{subsection.2.5.2}{\376\377\0002\000.\0005\000.\0002\000\040\230\221\214\061\154\304\227\062}{section.2.5}% 50
+\BOOKMARK [2][]{subsection.2.5.3}{\376\377\0002\000.\0005\000.\0003\000\040\230\221\163\207\122\006\217\250\163\207}{section.2.5}% 51
+\BOOKMARK [1][]{section.2.6}{\376\377\0002\000.\0006\000\040\121\166\133\203\151\202\137\365}{chapter.2}% 52
+\BOOKMARK [0][]{chapter.3}{\376\377\0003\000\040\213\355\227\363\162\171\137\201\143\320\123\326}{}% 53
+\BOOKMARK [1][]{section.3.1}{\376\377\0003\000.\0001\000\040\230\204\131\004\164\006}{chapter.3}% 54
+\BOOKMARK [2][]{subsection.3.1.1}{\376\377\0003\000.\0001\000.\0001\000\040\230\204\122\240\221\315}{section.3.1}% 55
+\BOOKMARK [2][]{subsection.3.1.2}{\376\377\0003\000.\0001\000.\0002\000\040\122\006\136\047}{section.3.1}% 56
+\BOOKMARK [2][]{subsection.3.1.3}{\376\377\0003\000.\0001\000.\0003\000\040\122\240\172\227}{section.3.1}% 57
+\BOOKMARK [1][]{section.3.2}{\376\377\0003\000.\0002\000\040\167\355\145\366\120\205\221\314\123\366\123\330\143\142}{chapter.3}% 58
+\BOOKMARK [1][]{section.3.3}{\376\377\0003\000.\0003\000\040\124\054\211\311\162\171\140\047}{chapter.3}% 59
+\BOOKMARK [2][]{subsection.3.3.1}{\376\377\0003\000.\0003\000.\0001\000\040\150\205\134\024\156\344\154\342}{section.3.3}% 60
+\BOOKMARK [2][]{subsection.3.3.2}{\376\377\0003\000.\0003\000.\0002\000\040\000B\000a\000r\000k\156\344\154\342}{section.3.3}% 61
+\BOOKMARK [1][]{section.3.4}{\376\377\0003\000.\0004\000\040\120\022\214\061\122\006\147\220}{chapter.3}% 62
+\BOOKMARK [1][]{section.3.5}{\376\377\0003\000.\0005\000\040\136\070\211\301\166\204\130\360\133\146\162\171\137\201}{chapter.3}% 63
+\BOOKMARK [2][]{subsection.3.5.1}{\376\377\0003\000.\0005\000.\0001\000\040\000F\000B\000a\000n\000k}{section.3.5}% 64
+\BOOKMARK [2][]{subsection.3.5.2}{\376\377\0003\000.\0005\000.\0002\000\040\000M\000F\000C\000C}{section.3.5}% 65
+\BOOKMARK [1][]{section.3.6}{\376\377\0003\000.\0006\000\040\121\167\117\123\144\315\117\134}{chapter.3}% 66
+\BOOKMARK [2][]{subsection.3.6.1}{\376\377\0003\000.\0006\000.\0001\000\040\122\051\165\050\000l\000i\000b\000r\000o\000s\000a\213\373\123\326\227\363\230\221}{section.3.6}% 67
+\BOOKMARK [2][]{subsection.3.6.2}{\376\377\0003\000.\0006\000.\0002\000\040\143\320\123\326\150\205\134\024\230\221\214\061}{section.3.6}% 68
+\BOOKMARK [2][]{subsection.3.6.3}{\376\377\0003\000.\0006\000.\0003\000\040\143\320\123\326\000M\000F\000C\000C}{section.3.6}% 69
+\BOOKMARK [0][]{chapter.4}{\376\377\0004\000\040\227\363\136\223\122\066\117\134\124\214\145\207\147\054\122\115\172\357}{}% 70
+\BOOKMARK [1][]{section.4.1}{\376\377\0004\000.\0001\000\040\227\363\136\223\122\066\117\134}{chapter.4}% 71
+\BOOKMARK [2][]{subsection.4.1.1}{\376\377\0004\000.\0001\000.\0001\000\040\227\363\136\223\122\066\117\134\151\202\217\360}{section.4.1}% 72
+\BOOKMARK [2][]{subsection.4.1.2}{\376\377\0004\000.\0001\000.\0002\000\040\123\321\227\363\116\272\220\011\127\213}{section.4.1}% 73
+\BOOKMARK [2][]{subsection.4.1.3}{\376\377\0004\000.\0001\000.\0003\000\040\137\125\227\363\145\207\147\054\145\066\226\306}{section.4.1}% 74
+\BOOKMARK [2][]{subsection.4.1.4}{\376\377\0004\000.\0001\000.\0004\000\040\227\363\230\221\137\125\122\066}{section.4.1}% 75
+\BOOKMARK [2][]{subsection.4.1.5}{\376\377\0004\000.\0001\000.\0005\000\040\213\355\145\231\145\164\164\006}{section.4.1}% 76
+\BOOKMARK [2][]{subsection.4.1.6}{\376\377\0004\000.\0001\000.\0006\000\040\150\007\154\350}{section.4.1}% 77
+\BOOKMARK [1][]{section.4.2}{\376\377\0004\000.\0002\000\040\145\207\147\054\122\115\172\357}{chapter.4}% 78
+\BOOKMARK [2][]{subsection.4.2.1}{\376\377\0004\000.\0002\000.\0001\000\040\145\207\147\054\122\115\172\357\127\050\213\355\227\363\124\010\142\020\116\055\142\156\157\024\166\204\211\322\202\162}{section.4.2}% 79
+\BOOKMARK [2][]{subsection.4.2.2}{\376\377\0004\000.\0002\000.\0002\000\040\145\207\147\054\122\115\172\357\166\204\116\073\211\201\176\304\142\020}{section.4.2}% 80
+\BOOKMARK [2][]{subsection.4.2.3}{\376\377\0004\000.\0002\000.\0003\000\040\000U\000n\000i\000c\000o\000d\000e\214\003\170\024\124\214\145\207\147\054\230\204\131\004\164\006}{section.4.2}% 81
+\BOOKMARK [2][]{subsection.4.2.4}{\376\377\0004\000.\0002\000.\0004\000\040\145\207\147\054\211\304\203\003\123\026}{section.4.2}% 82
+\BOOKMARK [2][]{subsection.4.2.5}{\376\377\0004\000.\0002\000.\0005\000\040\122\006\213\315}{section.4.2}% 83
+\BOOKMARK [2][]{subsection.4.2.6}{\376\377\0004\000.\0002\000.\0006\000\040\145\207\147\054\217\154\227\363\175\040}{section.4.2}% 84
+\BOOKMARK [2][]{subsection.4.2.7}{\376\377\0004\000.\0002\000.\0007\000\040\227\365\137\213\122\006\147\220}{section.4.2}% 85
+\BOOKMARK [2][]{subsection.4.2.8}{\376\377\0004\000.\0002\000.\0008\000\040\145\207\147\054\122\115\172\357\166\204\135\345\172\013\133\236\163\260}{section.4.2}% 86
+\BOOKMARK [1][]{section.4.3}{\376\377\0004\000.\0003\000\040\140\073\176\323}{chapter.4}% 87
+\BOOKMARK [0][]{chapter.5}{\376\377\0005\000\040\130\360\133\146\152\041\127\213}{}% 88
+\BOOKMARK [1][]{section.5.1}{\376\377\0005\000.\0001\000\040\000T\000a\000c\000o\000t\000r\000o\000n}{chapter.5}% 89
+\BOOKMARK [2][]{subsection.5.1.1}{\376\377\0005\000.\0001\000.\0001\000\040\000T\000a\000c\000o\000t\000r\000o\000n\000-\0002\173\200\116\313}{section.5.1}% 90
+\BOOKMARK [2][]{subsection.5.1.2}{\376\377\0005\000.\0001\000.\0002\000\040\130\360\133\146\162\171\137\201\136\372\152\041\177\121\176\334}{section.5.1}% 91
+\BOOKMARK [2][]{subsection.5.1.3}{\376\377\0005\000.\0001\000.\0003\000\040\143\137\131\061\121\375\145\160}{section.5.1}% 92
+\BOOKMARK [1][]{section.5.2}{\376\377\0005\000.\0002\000\040\000F\000a\000s\000t\000S\000p\000e\000e\000c\000h}{chapter.5}% 93
+\BOOKMARK [2][]{subsection.5.2.1}{\376\377\0005\000.\0002\000.\0001\000\040\152\041\127\213\176\323\147\204}{section.5.2}% 94
+\BOOKMARK [2][]{subsection.5.2.2}{\376\377\0005\000.\0002\000.\0002\000\040\143\137\131\061\121\375\145\160}{section.5.2}% 95
+\BOOKMARK [2][]{subsection.5.2.3}{\376\377\0005\000.\0002\000.\0003\000\040\134\017\176\323}{section.5.2}% 96
+\BOOKMARK [1][]{section.5.3}{\376\377\0005\000.\0003\000\040\000V\000I\000T\000S}{chapter.5}% 97
+\BOOKMARK [2][]{subsection.5.3.1}{\376\377\0005\000.\0003\000.\0001\000\040\152\041\127\213\145\164\117\123\176\323\147\204}{section.5.3}% 98
+\BOOKMARK [2][]{subsection.5.3.2}{\376\377\0005\000.\0003\000.\0002\000\040\123\330\122\006\143\250\145\255}{section.5.3}% 99
+\BOOKMARK [2][]{subsection.5.3.3}{\376\377\0005\000.\0003\000.\0003\000\040\133\371\237\120\117\060\213\241}{section.5.3}% 100
+\BOOKMARK [2][]{subsection.5.3.4}{\376\377\0005\000.\0003\000.\0004\000\040\133\371\142\227\213\255\176\303}{section.5.3}% 101
+\BOOKMARK [2][]{subsection.5.3.5}{\376\377\0005\000.\0003\000.\0005\000\040\140\073\117\123\143\137\131\061}{section.5.3}% 102
+\BOOKMARK [2][]{subsection.5.3.6}{\376\377\0005\000.\0003\000.\0006\000\040\140\073\176\323}{section.5.3}% 103
+\BOOKMARK [0][]{chapter.6}{\376\377\0006\000\040\130\360\170\001\126\150}{}% 104
+\BOOKMARK [1][]{section.6.1}{\376\377\0006\000.\0001\000\040\000G\000r\000i\000f\000f\000i\000n\000-\000L\000i\000m\130\360\170\001\126\150}{chapter.6}% 105
+\BOOKMARK [2][]{subsection.6.1.1}{\376\377\0006\000.\0001\000.\0001\000\040\173\227\154\325\123\237\164\006}{section.6.1}% 106
+\BOOKMARK [2][]{subsection.6.1.2}{\376\377\0006\000.\0001\000.\0002\000\040\116\343\170\001\133\236\163\260}{section.6.1}% 107
+\BOOKMARK [1][]{section.6.2}{\376\377\0006\000.\0002\000\040\000S\000T\000R\000A\000I\000G\000H\000T\130\360\170\001\126\150}{chapter.6}% 108
+\BOOKMARK [2][]{subsection.6.2.1}{\376\377\0006\000.\0002\000.\0001\000\040\151\202\217\360}{section.6.2}% 109
+\BOOKMARK [2][]{subsection.6.2.2}{\376\377\0006\000.\0002\000.\0002\000\040\162\171\137\201\143\320\123\326}{section.6.2}% 110
+\BOOKMARK [2][]{subsection.6.2.3}{\376\377\0006\000.\0002\000.\0003\000\040\213\355\227\363\124\010\142\020}{section.6.2}% 111
+\BOOKMARK [1][]{section.6.3}{\376\377\0006\000.\0003\000\040\000W\000O\000R\000L\000D\130\360\170\001\126\150}{chapter.6}% 112
+\BOOKMARK [2][]{subsection.6.3.1}{\376\377\0006\000.\0003\000.\0001\000\040\130\360\133\146\162\171\137\201}{section.6.3}% 113
+\BOOKMARK [2][]{subsection.6.3.2}{\376\377\0006\000.\0003\000.\0002\000\040\000W\000O\000R\000L\000D\166\204\122\006\147\220\122\237\200\375}{section.6.3}% 114
+\BOOKMARK [2][]{subsection.6.3.3}{\376\377\0006\000.\0003\000.\0003\000\040\000D\000I\000O\173\227\154\325\143\320\123\326\127\372\230\221\000F\0000}{section.6.3}% 115
+\BOOKMARK [2][]{subsection.6.3.4}{\376\377\0006\000.\0003\000.\0004\000\040\000C\000h\000e\000a\000p\000T\000r\000i\000c\000k\173\227\154\325\143\320\123\326\230\221\214\061\123\005\176\334\000S\000P}{section.6.3}% 116
+\BOOKMARK [2][]{subsection.6.3.5}{\376\377\0006\000.\0003\000.\0005\000\040\000P\000L\000A\000N\000T\000I\000N\000U\000M\143\320\123\326\227\136\124\150\147\037\117\341\123\367}{section.6.3}% 117
+\BOOKMARK [2][]{subsection.6.3.6}{\376\377\0006\000.\0003\000.\0006\000\040\000W\000O\000R\000L\000D\166\204\124\010\142\020\173\227\154\325}{section.6.3}% 118
+\BOOKMARK [2][]{subsection.6.3.7}{\376\377\0006\000.\0003\000.\0007\000\040\117\177\165\050\171\072\117\213}{section.6.3}% 119
+\BOOKMARK [1][]{section.6.4}{\376\377\0006\000.\0004\000\040\000N\000e\000u\000r\000a\000l\000\040\000H\000o\000m\000o\000m\000o\000r\000p\000h\000i\000c\000\040\000V\000o\000c\000o\000d\000e\000r\000\040\000\050\000N\000H\000V\000\051}{chapter.6}% 120
+\BOOKMARK [2][]{subsection.6.4.1}{\376\377\0006\000.\0004\000.\0001\000\040\156\220\156\344\154\342\126\150\124\010\142\020\123\237\164\006}{section.6.4}% 121
+\BOOKMARK [2][]{subsection.6.4.2}{\376\377\0006\000.\0004\000.\0002\000\040\121\161\143\057\134\360\124\010\142\020\145\271\154\325}{section.6.4}% 122
+\BOOKMARK [2][]{subsection.6.4.3}{\376\377\0006\000.\0004\000.\0003\000\040\000N\000H\000V\151\202\217\360}{section.6.4}% 123
+\BOOKMARK [2][]{subsection.6.4.4}{\376\377\0006\000.\0004\000.\0004\000\040\145\164\117\123\176\323\147\204}{section.6.4}% 124
+\BOOKMARK [2][]{subsection.6.4.5}{\376\377\0006\000.\0004\000.\0005\000\040\201\011\121\262\116\062\165\037\142\020\126\150}{section.6.4}% 125
+\BOOKMARK [2][]{subsection.6.4.6}{\376\377\0006\000.\0004\000.\0006\000\040\171\136\176\317\177\121\176\334\156\344\154\342\117\060\213\241\126\150\377\010\000N\000e\000u\000r\000a\000l\000\040\000N\000e\000t\000w\000o\000r\000k\000\040\000F\000i\000l\000t\000e\000r\000\040\000E\000s\000t\000i\000m\000a\000t\000o\000r\377\011}{section.6.4}% 126
+\BOOKMARK [2][]{subsection.6.4.7}{\376\377\0006\000.\0004\000.\0007\000\040\176\277\140\047\145\366\123\330\377\010\000L\000T\000V\377\011\156\344\154\342\126\150\124\214\123\357\213\255\176\303\166\204\147\011\226\120\121\262\157\300\124\315\136\224\377\010\000F\000I\000R\000s\377\011}{section.6.4}% 127
+\BOOKMARK [2][]{subsection.6.4.8}{\376\377\0006\000.\0004\000.\0008\000\040\171\136\176\317\177\121\176\334\166\204\213\255\176\303}{section.6.4}% 128
+\BOOKMARK [2][]{subsection.6.4.9}{\376\377\0006\000.\0004\000.\0009\000\040\134\017\176\323}{section.6.4}% 129
+\BOOKMARK [1][]{section.6.5}{\376\377\0006\000.\0005\000\040\000H\000i\000F\000i\000G\000A\000N}{chapter.6}% 130
+\BOOKMARK [2][]{subsection.6.5.1}{\376\377\0006\000.\0005\000.\0001\000\040\000H\000i\000F\000i\000G\000A\000N\151\202\217\360}{section.6.5}% 131
+\BOOKMARK [2][]{subsection.6.5.2}{\376\377\0006\000.\0005\000.\0002\000\040\000H\000i\000F\000i\000G\000A\000N\165\037\142\020\126\150\173\200\116\313}{section.6.5}% 132
+\BOOKMARK [2][]{subsection.6.5.3}{\376\377\0006\000.\0005\000.\0003\000\040\116\012\221\307\150\067\176\323\147\204}{section.6.5}% 133
+\BOOKMARK [2][]{subsection.6.5.4}{\376\377\0006\000.\0005\000.\0004\000\040\131\032\141\037\123\327\221\316\207\215\124\010}{section.6.5}% 134
+\BOOKMARK [2][]{subsection.6.5.5}{\376\377\0006\000.\0005\000.\0005\000\040\000H\000i\000F\000i\000G\000A\000N\122\044\122\053\126\150\173\200\116\313}{section.6.5}% 135
+\BOOKMARK [2][]{subsection.6.5.6}{\376\377\0006\000.\0005\000.\0006\000\040\131\032\134\072\136\246\122\044\122\053\126\150}{section.6.5}% 136
+\BOOKMARK [2][]{subsection.6.5.7}{\376\377\0006\000.\0005\000.\0007\000\040\131\032\124\150\147\037\122\044\122\053\126\150}{section.6.5}% 137
+\BOOKMARK [2][]{subsection.6.5.8}{\376\377\0006\000.\0005\000.\0008\000\040\143\137\131\061\121\375\145\160\173\200\116\313}{section.6.5}% 138
+\BOOKMARK [2][]{subsection.6.5.9}{\376\377\0006\000.\0005\000.\0009\000\040\165\037\142\020\133\371\142\227\143\137\131\061}{section.6.5}% 139
+\BOOKMARK [2][]{subsection.6.5.10}{\376\377\0006\000.\0005\000.\0001\0000\000\040\150\205\134\024\230\221\214\061\143\137\131\061}{section.6.5}% 140
+\BOOKMARK [2][]{subsection.6.5.11}{\376\377\0006\000.\0005\000.\0001\0001\000\040\162\171\137\201\123\071\221\115\143\137\131\061}{section.6.5}% 141
+\BOOKMARK [2][]{subsection.6.5.12}{\376\377\0006\000.\0005\000.\0001\0002\000\040\145\164\117\123\143\137\131\061}{section.6.5}% 142
+\BOOKMARK [0][]{chapter.7}{\376\377\0007\000\040\213\355\227\363\124\010\142\020\167\345\213\306\176\323\147\204}{}% 143
+\BOOKMARK [1][]{section.7.1}{\376\377\0007\000.\0001\000\040\127\372\147\054\176\304\142\020}{chapter.7}% 144
+\BOOKMARK [1][]{section.7.2}{\376\377\0007\000.\0002\000\040\130\360\227\363\217\154\143\142}{chapter.7}% 145
+\BOOKMARK [1][]{section.7.3}{\376\377\0007\000.\0003\000\040\131\032\213\355\171\315\213\355\227\363\124\010\142\020}{chapter.7}% 146
+\BOOKMARK [1][]{section.7.4}{\376\377\0007\000.\0004\000\040\217\333\226\066}{chapter.7}% 147
+\BOOKMARK [2][]{subsection.7.4.1}{\376\377\0007\000.\0004\000.\0001\000\040\232\330\210\150\163\260\122\233\213\355\227\363\124\010\142\020}{section.7.4}% 148
+\BOOKMARK [2][]{subsection.7.4.2}{\376\377\0007\000.\0004\000.\0002\000\040\116\052\140\047\123\026\213\355\227\363\124\010\142\020}{section.7.4}% 149
+\BOOKMARK [2][]{subsection.7.4.3}{\376\377\0007\000.\0004\000.\0003\000\040\145\271\212\000\217\301\171\373}{section.7.4}% 150
+\BOOKMARK [2][]{subsection.7.4.4}{\376\377\0007\000.\0004\000.\0004\000\040\153\114\125\061\124\010\142\020}{section.7.4}% 151
+\BOOKMARK [2][]{subsection.7.4.5}{\376\377\0007\000.\0004\000.\0005\000\040\213\355\227\363\124\010\142\020\166\204\172\063\133\232\140\047}{section.7.4}% 152
+\BOOKMARK [2][]{subsection.7.4.6}{\376\377\0007\000.\0004\000.\0006\000\040\213\355\227\363\124\010\142\020\166\204\145\110\163\207\117\030\123\026}{section.7.4}% 153
diff --git a/text_to_speech.pdf b/text_to_speech.pdf
new file mode 100644
index 0000000..38f9c54
Binary files /dev/null and b/text_to_speech.pdf differ
diff --git a/text_to_speech.run.xml b/text_to_speech.run.xml
new file mode 100644
index 0000000..71196c3
--- /dev/null
+++ b/text_to_speech.run.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+
+ latex
+
+ text_to_speech.bcf
+
+
+ text_to_speech.bbl
+
+
+ blx-dm.def
+ blx-unicode.def
+ blx-compat.def
+ biblatex.def
+ standard.bbx
+ numeric.bbx
+ numeric-comp.bbx
+ gb7714-2015.bbx
+ numeric-comp.cbx
+ gb7714-2015.cbx
+ biblatex.cfg
+ english.lbx
+
+
+
+ biber
+
+ biber
+ text_to_speech
+
+
+ text_to_speech.bcf
+
+
+
+ text_to_speech.bbl
+
+
+ text_to_speech.bcf
+
+
+ reference.bib
+
+
+
diff --git a/text_to_speech.synctex(busy) b/text_to_speech.synctex(busy)
new file mode 100644
index 0000000..0cda6a6
Binary files /dev/null and b/text_to_speech.synctex(busy) differ
diff --git a/text_to_speech.synctex.gz b/text_to_speech.synctex.gz
new file mode 100644
index 0000000..4d8bffc
Binary files /dev/null and b/text_to_speech.synctex.gz differ
diff --git a/text_to_speech.tex b/text_to_speech.tex
new file mode 100644
index 0000000..9f37e4e
--- /dev/null
+++ b/text_to_speech.tex
@@ -0,0 +1,2666 @@
+\documentclass[cn,10pt,math=newtx,citestyle=gb7714-2015,bibstyle=gb7714-2015]{elegantbook}
+
+\title{Text-to-Speech}
+\subtitle{语音合成:从入门到放弃}
+
+\author{冬色}
+\institute{https://github.com/cnlinxi}
+\date{March 20, 2022}
+\version{1.0}
+\bioinfo{开源协议}{Apache License 2.0}
+
+\extrainfo{一花独放不是春,百花齐放春满园。—— 《古今贤文》}
+
+\setcounter{tocdepth}{3}
+
+% \logo{logo.jpg}
+\cover{cover.jpeg}
+
+% 本文档命令
+\usepackage{array}
+\newcommand{\ccr}[1]{\makecell{{\color{#1}\rule{1cm}{1cm}}}}
+
+\definecolor{customcolor}{RGB}{32,178,170}
+\colorlet{coverlinecolor}{customcolor}
+
+\begin{document}
+
+\maketitle
+\frontmatter
+
+\chapter*{前言}
+
+\markboth{Introduction}{前言}
+
+想写这个总结已经很久了,上海疫情导致各个区几乎停摆,不间断的核酸检测,小区也封闭很久了,现在算是一个好时机,就赶快整理出来吧。大多数内容来自平日的博客和毕业论文,所以还不算特别辛苦。
+
+最近自愿半自愿地迷恋上烹饪,比较自豪,零基础至少学会了20+道菜,炒炸爆煎焖炖煮,几乎顿顿不重样,自我感觉良好。
+
+最近刷了《雍正王朝》,感慨颇多,是一部好剧。
+
+感谢我的夫人,由于上海严重的疫情,她居家办公,但一直在家划水,不然我应该能够多写一点,所以我希望知道友商领导的联系方式,我要举报她/doge。
+
+\vskip 0.5cm
+
+模板来自\href{https://github.com/ElegantLaTeX/ElegantBook}{ElegantBook},感谢开源社区的贡献。
+
+\vskip 1.5cm
+
+\begin{flushright}
+冬色\\
+2022年春分于上海
+\end{flushright}
+
+\tableofcontents
+
+\mainmatter
+
+\chapter{语音合成概述}
+
+\section{背景和概述}
+语音合成(Speech Synthesis),大部分情况下与文语转换(Text-to-Speech,TTS)同义,是一种将文本转换为语音的技术,是人工智能的子领域之一,赋予机器像人一样自如说话能力的技术,是人机语音交互中重要的一环。语音合成的研究历史可追溯至18至19世纪,从早期的基于规则的机械式、电子式语音合成器,到基于波形拼接、统计参数的语音合成。近年来,基于深度学习(Deep Learning)和神经网络(Neural Network)的建模方法在机器学习领域各个任务上都取得了快速的发展,语音合成技术也在此基础上得到了显著的提升。随着信息技术及人工智能技术的发展,各种应用场景对语音合成的效果有了越来越高的要求。
+
+\subsection{背景介绍}
+
+语音是最方便最自然的人机交互方式之一,随着近年来智能手机等智能终端的迅速发展,人机语音交互收到了越来越多的关注。人机语音交互是基于语音识别、自然语言理解及语音合成的人机语音对话技术,作为人机交互的核心技术之一,语音合成就是赋予计算机及各种终端设备像人一样自如说话的能力。语音合成是一门交叉学科,它涉及到语言学、语音学、自然语言处理、信号处理、统计学习、模式识别等众多学科的理论与技术。
+
+随着信息技术和人工智能技术的发展,以及对语音信号和统计建模技术本身不断的深入理解,语音合成系统的效果逐渐提高,被广泛应用于各个场景,包括语音对话系统;智能语音助手,如 Siri,讯飞语点;电话信息查询系统;车载导航,有声电子书等辅助应用;语言学习;机场,车站等实时信息广播系统;视力或语音障碍者的信息获取与交流等。同时,不同应用场景对于合成语音的各项指标,包括自然度、可懂度、音质、情感风格、控制力也都提出了更高的要求。
+
+\subsection{语音合成概述}
+
+ 语音信号的产生分为两个阶段,信息编码和生理控制。首先在大脑中出现某种想要表达的想法,然后由大脑将其编码为具体的语言文字序列,及语音中可能存在的强调、重读等韵律信息。经过语言的组织,大脑通过控制发音器官肌肉的运动,产生出相应的语音信号。其中第一阶段主要涉及人脑语言处理方面,第二阶段涉及语音信号产生的生理机制。
+
+ 从滤波的角度,人体涉及发音的器官可以分为两部分:激励系统和声道系统,如图\ref{fig:human_speech_arch}所示。激励系统中,储存于肺部的空气源,经过胸腔的压缩排出,经过气管进入声带,根据发音单元决定是否产生振动,形成准周期的脉冲空气激励流或噪声空气激励流。这些空气流作为激励,进入声道系统,被频率整形,形成不同的声音。声道系统包括咽喉、口腔(舌、唇、颌和口)组成,可能还包括鼻道。不同周期的脉冲空气流或者噪声空气流,以及不同声道器官的位置决定了产生的声音。因此,语音合成中通常将语音的建模分解为激励建模和声道建模。
+
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.4\textwidth]{human_speech_arch.png}
+ \caption{人类发声机理 \label{fig:human_speech_arch}}
+ \end{figure}
+
+\subsection{语音合成的历史}
+
+ 语音合成系统分为两部分,分别称为文本前端和后端,如下图所示。
+
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{text_to_speech_arch.png}
+ \caption{语音合成系统框图 \label{fig:text_to_speech_arch}}
+ \end{figure}
+
+ 文本前端主要负责在语言层、语法层、语义层对输入文本进行文本分析;后端主要是从信号处理、模式识别、机器学习等角度,在语音层面上进行韵律特征建模,声学特征建模,然后进行声学预测或者在音库中进行单元挑选,最终经过合成器或者波形拼接等方法合成语音。
+
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{text_to_speech_history.png}
+ \caption{语音合成发展历史 \label{fig:text_to_speech_history}}
+ \end{figure}
+
+ 根据语音合成研究的历史,如图\ref{fig:text_to_speech_history}所示,语音合成研究方法可以分为:机械式语音合成器、电子式语音合成器、共振峰参数合成器、基于波形拼接的语音合成、统计参数语音合成、以及神经网络语音合成。
+
+ 语音合成的早期工作主要是通过源-滤波器模型对语音产生的过程进行模拟。最开始的机械式语音合成器,使用风箱模拟人的肺部运动,产生激励空气流,采用振动弹簧片和皮革模拟声道系统,通过手动协调各部分运动,能够合成出五个长元音。机械式的语音合成器难以实用,随着时代的发展,贝尔实验室提出了电子式的语音合成器。不再模拟具体的生理器官,电子式语音合成器通过脉冲发射器和噪声发射器来分别产生模拟浊音和清音的激励系统,通过操作人员手动控制多个带通滤波器来模拟声道系统,最后通过放大器输出语音信号。由于电子式语音合成器使用有限个带通滤波器模拟声道系统,对自然语音的频谱特征的刻画精度有限。为了更好地刻画声道系统,共振峰参数合成器被提出。共振峰参数合成器将声道系统看成一个谐振腔,利用共振峰频率和宽度等声道的谐振特性,构建声道滤波器,以更好地刻画语音的声道特性。然而由于共振峰参数合成器结构复杂,需要大量人工分析调整参数,难以实用。
+
+ 早期的语音合成方法由于模型简单,系统复杂等原因,难以在实际场景应用。随着计算机技术的发展,基于波形拼接的语音合成被提出。基于波形拼接的语音合成的基本原理是首先构建一个音库,在合成阶段,通过对合成文本的分析,按照一定的准则,从音库中挑选出与待合成语音相似的声学单元,对这些声学单元进行少量调整,拼接得到合成的语音。早期的波形拼接系统受限于音库大小、挑选算法、拼接调整的限制,合成语音质量较低。1990年,基于同步叠加的时域波形修改算法被提出,解决了声学单元拼接处的局部不连续问题。更进一步,基于大语料库的波形拼接语音合成方法被提出,采用更精细的挑选策略,将语音音库极大地拓展,大幅提升了合成语音的自然度。由于直接使用发音人的原始语音,基于波形拼接的语音合成方法合成语音的音质接近自然语音,被广泛应用。但其缺点也较为明显,包括音库制作时间长、需要保存整个音库、拓展性差、合成语音自然度受音库和挑选算法影响,鲁棒性不高等。
+
+ 随着统计建模理论的完善,以及对语音信号理解的深入,基于统计参数的语音合成方法被提出。其基本原理是使用统计模型,对语音的参数化表征进行建模。在合成阶段,给定待合成文本,使用统计模型预测出对应的声学参数,经过声码器合成语音波形。统计参数语音合成方法是目前的主流语音合成方法之一。统计参数音合成方法的优点很多,包括只需要较少的人工干预,能够快速地自动构建系统,同时具有较强的灵活性,能够适应不同发音人,不同发音风格,多语种的语音合成,具有较强的鲁棒性等。由于语音参数化表示以及统计建模的平均效应,统计参数语音合成方法生成的语音自然度相比自然语音通常会有一定的差距。基于隐马尔科夫的统计参数语音合成方法是发展最为完善的一种。基于HMM的统计参数语音合成系统能够同时对语音的基频、频谱和时长进行建模,生成出连续流畅且可懂度高的语音,被广泛应用,但其合成音质较差。
+
+\subsection{当代语音合成框架}
+
+和统计参数语音合成系统类似,深度学习语音合成系统也可大致分为两个部分:文本前端和声学后端。文本前端的主要作用是文本预处理,如:为文本添加韵律信息,并将文本词面转化为语言学特征序列(Linguistic Feature Sequence);声学后端又可以分为声学特征生成网络和声码器,其中声学特征生成网络根据文本前端输出的信息产生声学特征,如:将语言学特征序列映射到梅尔频谱或线性谱;声码器利用频谱等声学特征,生成语音样本点并重建时域波形,如:将梅尔频谱恢复为对应的语音。近年来,也出现了完全端到端的语音合成系统,将声学特征生成网络和声码器和合并起来,声学后端成为一个整体,直接将语言学特征序列,甚至文本词面端到端转换为语音波形。
+
+\begin{enumerate}
+ \item 文本前端
+
+ 文本前端的作用是从文本中提取发音和语言学信息,其任务至少包括以下四点。
+
+ \begin{enumerate}
+ \item 文本正则化
+
+ 在语音合成中,用于合成的文本存在特殊符号、阿拉伯数字等,需要把符号转换为文本。如“1.5元”需要转换成“一点五元”,方便后续的语言学分析。
+
+ \item 韵律预测
+
+ 该模块的主要作用是添加句子中韵律停顿或起伏。如“在抗击新型冠状病毒的战役中,党和人民群众经受了一次次的考验”,如果停顿信息不准确就会出现:“在/抗击/新型冠状病毒/的/战役中,党/和/人民群众/经受了/一次/次/的/考验”。“一次次”的地方存在一个错误停顿,这将会导致合成语音不自然,如果严重些甚至会影响语义信息的传达。
+
+ \item 字形转音素
+
+ 将文字转化为发音信息。比如“中国”是汉字表示,需要先将其转化为拼音“zhong1 guo2”,以帮助后续的声学模型更加准确地获知每个汉字的发音情况。
+
+ \item 多音字和变调
+
+ 许多语言中都有多音字的现象,比如“模型”和“模样”,这里“模”字的发音就存在差异。另外,汉字中又存在变调现象,如“一个”和“看一看”中的“一”发音音调不同。所以在输入一个句子的时候,文本前端就需要准确判断出文字中的特殊发音情况,否则可能会导致后续的声学模型合成错误的声学特征,进而生成不正确的语音。
+ \end{enumerate}
+
+ \item 声学特征生成网络
+
+ 声学特征生成网络根据文本前端的发音信息,产生声学特征,如梅尔频谱或线性谱。近年来,基于深度学习的生成网络甚至可以去除文本前端,直接由英文等文本生成对应的频谱。但是一般来说,因为中文字形和读音关联寥寥,因此中文语音合成系统大多无法抛弃文本前端,换言之,直接将中文文本输入到声学特征生成网络中是不可行的。基于深度学习的声学特征生成网络发展迅速,比较有代表性的模型有Tacotron系列,FastSpeech系列等。近年来,也涌现出类似于VITS的语音合成模型,将声学特征生成网络和声码器融合在一起,直接将文本映射为语音波形。
+
+ \item 声码器
+
+ 通过声学特征产生语音波形的系统被称作声码器,声码器是决定语音质量的一个重要因素。一般而言,声码器可以分为以下4类:纯信号处理,如Griffin-Lim、STRAIGHT和WORLD;自回归深度网络模型,如WaveNet和WaveRNN;非自回归模型,如Parallel WaveNet、ClariNet和WaveGlow;基于生成对抗网络(Generative Adversarial Network,GAN)的模型,如MelGAN、Parallel WaveGAN和HiFiGAN。
+
+\end{enumerate}
+
+
+\section{Awesome List}
+\begin{enumerate}
+ \item https://github.com/faroit/awesome-python-scientific-audio
+ \item https://github.com/wenet-e2e/speech-synthesis-paper
+ \item https://github.com/ddlBoJack/Speech-Resources
+ \item https://github.com/sindresorhus/awesome
+\end{enumerate}
+
+\section{参考书籍}
+\begin{enumerate}
+ \item \href{https://nndl.github.io/}{神经网络与深度学习}
+ \item Tan X, Qin T, Soong F, et al. A survey on neural speech synthesis[J]. arXiv preprint arXiv:2106.15561, 2021.
+ \item Sisman B, Yamagishi J, King S, et al. An overview of voice conversion and its challenges: From statistical modeling to deep learning[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2020, 29: 132-157.
+\end{enumerate}
+
+\section{语音相关的会议、期刊、比赛和公司}
+\subsection{会议}
+\begin{enumerate}
+ \item INTERSPEECH(Conference of the International Speech Communication Association)
+ \item ICASSP(IEEE International Conference on Acoustics, Speech and Signal Processing)
+ \item ASRU(IEEE Automatic Speech Recognition and Understanding Workshop)
+ \item ISCSLP(International Symposium on Chinese Spoken Language Processing)
+ \item ACL(Association of Computational Linguistics)
+\end{enumerate}
+
+\subsection{期刊}
+\begin{enumerate}
+ \item Computer Speech and Language
+\end{enumerate}
+
+\subsection{最新论文}
+\begin{enumerate}
+ \item \href{http://yqli.tech/page/tts_paper.html}{低调奋进TTS最新论文集}
+ \item https://arxiv.org/list/eess.AS/recent
+ \item https://arxiv.org/list/cs.SD/recent
+ \item https://arxiv.org/list/cs.CL/recent
+ \item https://arxiv.org/list/cs.MM/recent
+\end{enumerate}
+
+\subsection{比赛}
+\begin{enumerate}
+ \item \href{http://www.festvox.org/blizzard/}{Blizzard Challenge}
+ \item \href{https://www.zerospeech.com/}{Zero Resource Speech Challenge}
+ \item \href{http://challenge.ai.iqiyi.com/detail?raceId=5fb2688224954e0b48431fe0}{ICASSP2021 M2VoC}
+ \item \href{http://www.vc-challenge.org/}{Voice Conversion Challenge}
+ \item CHiME: Computational Hearing in Multisource Environment
+ \item NIST
+\end{enumerate}
+
+\subsection{公司}
+\begin{enumerate}
+ \item \href{https://azure.microsoft.com/en-us/services/cognitive-services/text-to-speech/#features}{微软}
+ \item \href{https://cloud.google.com/text-to-speech/docs/voices?hl=zh-cn}{谷歌云}
+ \item \href{https://www.aicloud.com/dev/ability/index.html?key=tts#ability-experience}{捷通华声}
+ \item \href{https://www.nuance.com/omni-channel-customer-engagement/voice-and-ivr/text-to-speech.html#!}{Nuance}
+ \item \href{https://aws.amazon.com/cn/polly/}{Amazon polly}
+ \item \href{https://fanyi.baidu.com/}{百度(翻译)}
+ \item \href{https://ai.sogou.com/product/audio_composition/}{搜狗开发平台}
+ \item \href{https://fanyi.sogou.com/}{搜狗(翻译)}
+ \item \href{https://ai.youdao.com/product-tts.s}{有道开放平台}
+ \item \href{http://fanyi.youdao.com}{有道(翻译)}
+ \item \href{https://cn.bing.com/translator}{微软(翻译)}
+ \item \href{https://translate.google.cn/}{Google翻译}
+\end{enumerate}
+
+\subsection{微信公众号}
+
+\begin{enumerate}
+ \item 阿里语音AI
+ \item CCF语音对话与听觉专委会
+ \item CSMT
+ \item 声学挖掘机
+ \item 谈谈语音技术
+ \item THUsatlab
+ \item WeNet步行街
+ \item 音频语音与语言处理研究组
+ \item 雨石记
+ \item 语音算法组
+ \item 语音杂谈
+ \item 语音之家
+\end{enumerate}
+
+\section{开源资料}
+\subsection{中文数据集}
+\begin{enumerate}
+ \item \href{https://www.data-baker.com/open_source.html}{标贝中文标准女声音库}: 中文单说话人语音合成数据集,质量高。
+ \item \href{https://www.openslr.org/18/}{THCHS-30}: 中文多说话人数据集,原为语音识别练手级别的数据集,也可用于多说话人中文语音合成。
+ \item \href{https://www.openslr.org/38/}{Free ST Chinese Mandarin Corpus}: 855个说话人,每个说话人120句话,有对应人工核对的文本,共102600句话。
+ \item \href{https://github.com/KuangDD/zhvoice}{zhvoice}: zhvoice语料由8个开源数据集,经过降噪和去除静音处理而成,说话人约3200个,音频约900小时,文本约113万条,共有约1300万字。
+ \item \href{https://arxiv.org/abs/2010.09275}{滴滴800+小时DiDiSpeech语音数据集}: DiDi开源数据集,800小时,48kHz,6000说话人,存在对应文本,背景噪音干净,适用于音色转换、多说话人语音合成和语音识别,参见:https://zhuanlan.zhihu.com/p/268425880。
+ \item \href{https://github.com/khiajohnson/SpiCE-Corpus}{SpiCE-Corpus}: SpiCE是粤语和英语会话双语语料库。
+ \item \href{http://www.paper.edu.cn/scholar/showpdf/MUT2IN4INTD0Exwh}{HKUST}: 10小时,单说话人,采样率8kHz。
+ \item \href{https://www.aishelltech.com/kysjcp}{AISHELL-1}: 170小时,400个说话人,采样率16kHz。
+ \item \href{http://www.aishelltech.com/aishell_2}{AISHELL-2}: 1000小时,1991个说话人,采样率44.1kHz。希尔贝壳开源了不少中文语音数据集,AISHELL-2是最近开源的一个1000小时的语音数据库,禁止商用。官网上还有其它领域,比如用于语音识别的4个开源数据集。
+ \item \href{https://www.aishelltech.com/aishell_3}{AISHELL-3}: 85小时,218个说话人,采样率44.1kHz。
+\end{enumerate}
+
+\subsection{英文数据集}
+\begin{enumerate}
+ \item \href{https://keithito.com/LJ-Speech-Dataset/}{LJSpeech}: 英文单说话人语音合成数据集,质量较高,25小时,22.05小时。
+ \item \href{https://datashare.is.ed.ac.uk/handle/10283/2651}{VCTK}: 英文多说话人语音数据集,44小时,109个说话人,每人400句话,采样率48kHz,位深16bits。
+ \item \href{https://catalog.ldc.upenn.edu/LDC93S1}{TIMIT}: 630个说话人,8个美式英语口音,每人10句话,采样率16kHz,位深16bits。\href{http://academictorrents.com/details/34e2b78745138186976cbc27939b1b34d18bd5b3}{这里是具体下载地址},下载方法:首先下载种子,然后执行:
+ \begin{lstlisting}
+ ctorrent *.torrent
+ \end{lstlisting}
+ \item \href{http://festvox.org/cmu_arctic/packed/}{CMU ARCTIC}: 7小时,7个说话人,采样率16kHz。语音质量较高,可以用于英文多说话人的训练。
+ \item \href{https://www.cstr.ed.ac.uk/projects/blizzard/2011/lessac_blizzard2011/}{Blizzard-2011}: 16.6小时,单说话人,采样率16kHz。可以从\href{https://www.cstr.ed.ac.uk/projects/blizzard/}{The Blizzard Challenge}查找该比赛的相关数据,从\href{https://www.synsig.org/index.php}{SynSIG}查找该比赛的相关信息。
+ \item \href{https://www.cstr.ed.ac.uk/projects/blizzard/2013/lessac_blizzard2013/}{Blizzard-2013}: 319小时,单说话人,采样率44.1kHz。
+ \item \href{https://www.openslr.org/12}{LibriSpeech}: 982小时,2484个说话人,采样率16kHz。\href{https://www.openslr.org/resources.php}{OpenSLR}搜集了语音合成和识别常用的语料。
+ \item \href{https://www.openslr.org/60}{LibriTTS}: 586小时,2456个说话人,采样率24kHz。
+ \item \href{https://datashare.ed.ac.uk/handle/10283/3061}{VCC 2018}: 1小时,12个说话人,采样率22.05kHz。类似的,可以从\href{https://datashare.ed.ac.uk/handle/10283/2211}{The Voice Conversion Challenge 2016}获取2016年的VC数据。
+ \item \href{http://www.openslr.org/109/}{HiFi-TTS}: 300小时,11个说话人,采样率44.1kHz。
+ \item \href{https://www.openslr.org/7/}{TED-LIUM}: 118小时,666个说话人。
+ \item \href{https://catalog.ldc.upenn.edu/LDC97S42}{CALLHOME}: 60小时,120个说话人,采样率8kHz。
+ \item \href{https://github.com/roholazandie/ryan-tts}{RyanSpeech}: 10小时,单说话人,采样率44.1kHz。交互式语音合成语料。
+
+\end{enumerate}
+
+\subsection{情感数据集}
+\begin{enumerate}
+ \item \href{https://github.com/HLTSingapore/Emotional-Speech-Data}{ESD}: 用于语音合成和语音转换的情感数据集。
+ \item \href{https://github.com/Emotional-Text-to-Speech/dl-for-emo-tts}{情感数据和实验总结}: 实际是情感语音合成的实验总结,包含了一些情感数据集的总结。
+\end{enumerate}
+
+\subsection{其它数据集}
+\begin{enumerate}
+ \item \href{https://wenet.org.cn/opencpop}{Opencpop}: 高质量歌唱合成数据集。
+ \item \href{https://ai.100tal.com/dataset}{好未来开源数据集}: 目前主要开源了3个大的语音数据集,分别是语音识别数据集,语音情感数据集和中英文混合语音数据集,都是多说话人教师授课音频。
+ \item \href{https://sites.google.com/site/shinnosuketakamichi/publication/jsut}{JSUT}: 日语,10小时,单说话人,采样率48kHz。
+ \item \href{https://github.com/IS2AI/Kazakh_TTS}{KazakhTTS}: 哈萨克语,93小时,2个说话人,采样率44.1/48kHz。
+ \item \href{https://ruslan-corpus.github.io/}{Ruslan}: 俄语,31小时,单说话人,采样率44.1kHz。
+ \item \href{https://github.com/iisys-hof/HUI-Audio-Corpus-German}{HUI-Audio-Corpus}: 德语,326小时,122个说话人,采样率44.1kHz。
+ \item \href{https://github.com/imdatsolak/m-ailabs-dataset}{M-AILABS}: 多语种,1000小时,采样率16kHz。
+ \item \href{https://data.statmt.org/pmindia/}{India Corpus}: 多语种,39小时,253个说话人,采样率48kHz。
+ \item \href{http://www.openslr.org/94/}{MLS}: 多语种,5.1万小时,6千个说话人,采样率16kHz。
+ \item \href{https://commonvoice.mozilla.org/zh-CN/datasets}{CommonVoice}: 多语种,2500小时,5万个说话人,采样率48kHz。
+ \item \href{https://github.com/Kyubyong/css10}{CSS10}: 十个语种的单说话人语音数据的集合,140小时,采样率22.05kHz。
+ \item \href{https://www.openslr.org/resources.php}{OpenSLR}: OpenSLR是一个专门托管语音和语言资源的网站,例如语音识别训练语料库和与语音识别相关的软件。迄今为止,已经有100+语音相关的语料。
+ \item \href{https://msropendata.com/datasets?term=speech}{Speech in Microsoft Research Open Data}: 微软开源数据搜索引擎中关于语音的相关数据集。
+ \item \href{https://github.com/jim-schwoebel/voice_datasets}{voice datasets}: Github上较为全面的开源语音和音乐数据集列表,包括语音合成、语音识别、情感语音数据集、语音分离、歌唱等语料,找不到语料可以到这里看看。
+ \item \href{https://github.com/JRMeyer/open-speech-corpora}{Open Speech Corpora}: 开放式语音数据库列表,特点是包含多个语种的语料。
+ \item \href{https://www.emime.org/participate.html}{EMIME}: 包含一些TTS和ASR模型,以及一个中文/英语,法语/英语,德语/英语双语数据集。
+ \item \href{https://github.com/celebrity-audio-collection/videoprocess}{Celebrity Audio Extraction}: 中国名人数据集,包含中国名人语音和图像数据。
+\end{enumerate}
+
+\subsection{开源工具}
+\begin{enumerate}
+ \item \href{https://github.com/waywardgeek/sonic}{sonic}: 语音升降速工具。
+ \item \href{https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner/releases/download/v1.0.1/montreal-forced-aligner_linux.tar.gz}{MFA}: 从语音识别工具Kaldi中提取出来的音素-音频对齐工具,可以利用MFA获取每一个音素的时长,供预标注或时长模型使用。
+ \item \href{https://github.com/jaekookang/p2fa_py3}{宾西法尼亚大学强制对齐标注软件(P2FA)}:\href{https://blog.csdn.net/jojozhangju/article/details/51951622}{这里}有相关的介绍,对于噪音数据鲁棒性差。
+ \item \href{https://github.com/bootphon/ABXpy}{ABXpy}: 语音等测评ABX测试网页。
+ \item \href{https://github.com/bigpon/SpeechSubjectiveTest}{SpeechSubjectiveTest}: 主观测评工具,包括用于语音合成和转换的MOS、PK(倾向性测听)、说话人相似度测试和ABX测试。
+ \item \href{https://github.com/matpool/matools}{Matools}: 机器学习环境配置工具库
+ \item \href{https://github.com/Alinshans/MyTinySTL}{MyTinySTL}: 基于C++11的迷你STL。
+ \item \href{https://github.com/applenob/Cpp_Primer_Practice}{CppPrimerPractice}: 《C++ Primer 中文版(第 5 版)》学习仓库。
+ \item \href{https://github.com/521xueweihan/git-tips}{git-tips}: Git的奇技淫巧。
+\end{enumerate}
+
+\subsection{开源项目}
+\begin{enumerate}
+ \item \href{https://github.com/coqui-ai/TTS}{coqui-ai TTS}: 采用最新研究成果构建的语音合成后端工具集。
+ \item \href{https://github.com/espnet/espnet}{ESPNet}: 语音合成和识别工具集,主要集成声学模型、声码器等后端模型。
+ \item \href{https://github.com/pytorch/fairseq}{fairseq}: 序列到序列建模工具,包含语音识别、合成、机器翻译等模型。
+ \item \href{https://github.com/espeak-ng/espeak-ng}{eSpeak NG Text-to-Speech}: 共振峰生成的语音合成模型,集成超过100个语种和口音的语音合成系统,特别地,可借鉴该项目中的多语种文本前端。
+ \item \href{https://github.com/dmort27/epitran}{Epitran}: 将文本转换为IPA的工具,支持众多语种。
+ \item \href{https://github.com/Rayhane-mamah/Tacotron-2}{Tacotron-2}: Tensorflow版本的Tacotron-2.
+ \item \href{https://github.com/as-ideas/TransformerTTS}{Transformer TTS}: TensorFlow 2实现的FastSpeech系列语音合成。
+ \item \href{https://github.com/syoyo/tacotron-tts-cpp}{Text-to-speech in (partially) C++ using Tacotron model + Tensorflow}: 采用TensorFlow C++ API运行Tacotron模型。
+ \item \href{https://github.com/microsoft/muzic}{muzic}: 微软AI音乐的开源项目,包括乐曲理解、音乐生成等多种工作。
+ \item \href{https://github.com/CSTR-Edinburgh/merlin}{merlin}: CSTR开发的统计参数语音合成工具包,需要与文本前端(比如Festival)和声码器(比如STRAIGHT或WORLD)搭配使用。
+\end{enumerate}
+
+\section{语音合成评价指标}
+对合成语音的质量评价,主要可以分为主观和客观评价。主观评价是通过人类对语音进行打分,比如平均意见得分(Mean Opinion Score,MOS)、众包平均意见得分(CrowdMOS,CMOS)和ABX测试。客观评价是通过计算机自动给出语音音质的评估,在语音合成领域研究的比较少,论文中常常通过展示频谱细节,计算梅尔倒谱失真(Mel Cepstral Distortion,MCD)等方法作为客观评价。客观评价还可以分为有参考和无参考质量评估,这两者的主要判别依据在于该方法是否需要标准信号。有参考评估方法除了待评测信号,还需要一个音质优异的,可以认为没有损伤的参考信号。常见的有参考质量评估主要有ITU-T P.861 (MNB)、ITU-T P.862 (PESQ)、ITU-T P.863 (POLQA)、STOI和BSSEval。无参考评估方法则不需要参考信号,直接根据待评估信号,给出质量评分,无参考评估方法还可以分为基于信号、基于参数以及基于深度学习的质量评估方法。常见的基于信号的无参考质量评估包括ITU-T P.563和ANIQUE+,基于参数的方法有ITU-T G.107(E-Model)。近年来,深度学习也逐步应用到无参考质量评估中,如:AutoMOS、QualityNet、NISQA和MOSNet。
+
+主观评价中的MOS评测是一种较为宽泛的说法,由于给出评测分数的主体是人类,因此可以灵活测试语音的不同方面。比如在语音合成领域,主要有自然度MOS(MOS of Naturalness)和相似度MOS(MOS of Similarity)。但是人类给出的评分结果受到的干扰因素较多,谷歌对合成语音的主观评估方法进行了比较,在评估较长语音中的单个句子时,音频样本的呈现形式会显著影响参与人员给出的结果。比如仅提供单个句子而不提供上下文,与相同句子给出语境相比,被测人员给出的评分差异显著。国际电信联盟(International Telecommunication Union,ITU)将MOS评测规范化为ITU-T P.800,其中绝对等级评分(Absolute Category Rating,ACR)应用最为广泛,ACR的详细评估标准如下表所示。
+
+\begin{table}[htbp]
+ \centering
+ \caption{主观意见得分的评估标准}
+ \begin{tabular}{llll}
+ \toprule
+ 音频级别 & 平均意见得分 & 评价标准 \\
+ \midrule
+ 优 & 5.0 & 很好,听得清楚;延迟小,交流流畅 \\
+ 良 & 4.0 & 稍差,听得清楚;延迟小,交流欠流畅,有点杂音 \\
+ 中 & 3.0 & 还可以,听不太清;有一定延迟,可以交流 \\
+ 差 & 2.0 & 勉强,听不太清;延迟较大,交流需要重复多遍 \\
+ 劣 & 1.0 & 极差,听不懂;延迟大,交流不通畅 \\
+ \bottomrule
+ \end{tabular}%
+\end{table}%
+
+在使用ACR方法对语音质量进行评价时,参与评测的人员(简称被试)对语音整体质量进行打分,分值范围为1~5分,分数越大表示语音质量越好。MOS大于4时,可以认为该音质受到大部分被试的认可,音质较好;若MOS低于3,则该语音有比较大的缺陷,大部分被试并不满意该音质。
+
+\section{平均意见得分的测评要求与方法}
+语音合成的最终目标是,合成语音应尽可能接近真实发音,以至于人类无法区分合成和真实语音。因此让人类对合成语音进行评价打分是最为直观的评价方法,评分经处理之后即可获得平均意见得分。平均意见得分是语音合成系统最重要的性能指标之一,能够直接反映合成语音的自然度、清晰度以及可懂度。
+\subsection{实验要求}
+获取多样化且数量足够大的音频样本,以确保结果在统计上的显著,测评在具有特定声学特性的设备上进行,控制每个被试遵循同样的评估标准,并且确保每个被试的实验环境保持一致。
+\subsection{实验方法}
+为了达到实验要求,可以通过两种方法获得足够精确的测评结果。第一种是实验室方式,该方式让被试在实验室环境中进行测评,在试听过程中环境噪音必须低于35dB,测试语音数量至少保持30个以上,且覆盖该语种所有音素和音素组合,参与评测的被试应尽可能熟练掌握待测合成语音的语种,最好以合成语音的语种为母语。该方法的优点是测试要素容易控制,能够稳定保证实验环境达到测评要求;缺点则主要是需要被试在固定场所完成试听,人力成本高。第二种是众包,也就是将任务发布到网络上,让具有条件的被试在任何地方进行测评。该方法主要优点是易于获得较为有效的评估结果;而缺点则体现在无法确保试听条件。
+\subsection{实验步骤}
+\begin{enumerate}
+ \item 收集合成语音和录制的真实语音;
+ \item 确保文本和语音一一对应,去除发音明显错误的音频样本;
+ \item 生成问卷,将合成语音和真实语音交叉打乱,确保打乱的顺序没有规律,合成语音和真实语音不可让被试提前探知到;
+ \item 开始任务前,被试试听示例语音,并告知其对应的大致得分;
+ \item 被试开始对给定音频打分,前三条语音可以作为被试进入平稳打分状态的铺垫,不计入最终结果;
+ \item 回收问卷,舍弃有明显偏差的评价数据,统计最终得分。
+\end{enumerate}
+
+\subsection{实验设计}
+\begin{enumerate}
+ \item 准备测试语音数据。(1)从各领域和语音合成系统实际应用场景中,摘选常规文本作为测试语料,选取的语句一般尽可能排除生僻字;(2)用于测试的句子一般是未出现在训练集中的;(3) 被试必须使用耳机试听语音,以便于判断更为细微的差别;(4)为了避免被试的疲惫,待测评系统和语料数量不可太多,需要控制测评时间;(5)一个句子需要由多个被试打分。
+ \item 设置实验参数。在准备测试语音时,需要提前设置好训练语料、待测系统、参与测试的句子数量、每个句子被试听的次数等。以中文语音合成系统的语音评估为例,测评设置如下表所示。
+ \begin{table}[htbp]
+ \centering
+ \caption{语音测评设置}
+ \begin{tabular}{llll}
+ \toprule
+ 训练集 & 待测系统 & 句子数量 & 每个句子被测次数 \\
+ \midrule
+ 内部数据集 & 真实语音 & 40 & 12 \\
+ 内部数据集 & Tacotron-2 & 40 & 12 \\
+ 内部数据集 & FastSpeech-2 & 40 & 12 \\
+ \bottomrule
+ \end{tabular}%
+ \end{table}%
+
+ \item 准备HTML文档等展示材料,向被试介绍该测试。该HTML文档至少包括:(1)测试注意事项,如被试应该使用何种设备,在何种环境下试听,试听时应该排除的干扰因素等;(2)测试任务,向被试介绍本次试听的测试目标,应关注的侧重点,如:可懂度、相似度、清晰度等方面;(3)参考音频,可以放置一些示例音频,如MOS=5的优质语音,MOS=1的低劣音频,以便被试更好地对音频打分;(4) 测试音频,根据不同任务,放置合理的测试音频,真实和合成音频应提前打乱,并且不可告知被试打乱的顺序。
+
+\end{enumerate}
+
+\subsection{实验数据处理}
+\begin{enumerate}
+ \item 数据筛选。由于被试有可能没有受到监督,因此需要对收集到的评分进行事后检查,如删除使用扬声器试听的评分。另外,为了控制个体因素对整体结果的影响,减少偏离整体数据的异常值,需要计算每个人的评分与总体得分序列的相关性,相关性的度量使用相关系数来实现,如果相关系数r大于0.25,则保留;否则拒绝该被试的所有评分。相关系数r的计算方法如下:
+ \begin{equation}
+ r=\frac{\mathop{cov}(\mu_{1n},...,\mu_{Mn};\mu_1,...,\mu_M)}{\sqrt{\mathop{var}(\mu_{1n},...,\mu_{Mn})}\cdot \sqrt{\mathop{var}(\mu_1,...,\mu_M)}}
+ \end{equation}
+\end{enumerate}
+
+其中, $M$ 为句子数量,$N$为被试数量, $\mu_{mn}$ 为被试 $n$ 对句子 $m$ 给出的评分,$1\leq m\leq M$ ,$1\leq n\leq N$, $\mu_m=1/N\sum_{n=1}^N\mu_{mn}$ 为句子 $m$ 的总体平均分, $\mathop{cov}$ 为协方差, $\mathop{var}$ 为方差。
+
+\chapter{语音信号基础}
+
+\section{参考资料}
+
+\begin{enumerate}
+ \item \href{http://dsp.whu.edu.cn/syszy/szxin_hao_chu.htm}{武汉大学-数字信号处理}
+ \item \href{http://speech.ee.ntu.edu.tw/SS2020Spring/}{台湾大学李琳山-数位语音处理}
+ \item \href{http://labrosa.ee.columbia.edu/~dpwe/pubs/Ellis10-introspeech.pdf}{An Introduction to Signal Processing for Speech}
+ \item \href{https://www.inf.ed.ac.uk/teaching/courses/asr/2020-21/asr02-signal.pdf}{爱丁堡大学课件}
+\end{enumerate}
+
+\section{语音基本概念}
+声波通过空气传播,被麦克风接收,通过 \lstinline{采样}、 \lstinline{量化}、 \lstinline{编码}转换为离散的数字信号,即波形文件。音量、音高和音色是声音的基本属性。
+
+\subsection{能量}
+
+音频的能量通常指的是时域上每帧的能量,幅度的平方。在简单的语音活动检测(Voice Activity Detection,VAD)中,直接利用能量特征:能量大的音频片段是语音,能量小的音频片段是非语音(包括噪音、静音段等)。这种VAD的局限性比较大,正确率也不高,对噪音非常敏感。
+
+\subsection{短时能量}
+
+短时能量体现的是信号在不同时刻的强弱程度。设第n帧语音信号的短时能量用 $E_n$ 表示,则其计算公式为:
+
+\begin{equation}
+ E_n=\sum_{m=0}^{M-1}x_n^2(m)
+\end{equation}
+
+上式中, $M$ 为帧长, $x_n(m)$ 为该帧中的样本点。
+
+\subsection{声强和声强级}
+
+单位时间内通过垂直于声波传播方向的单位面积的平均声能,称作声强,声强用I表示,单位为“瓦/平米”。实验研究表明,人对声音的强弱感觉并不是与声强成正比,而是与其对数成正比,所以一般声强用声强级来表示:
+
+\begin{equation}
+ L=10{\rm log}(\frac{I}{I'})
+\end{equation}
+
+其中,I为声强,$I'=10e^{-12}w/m^2$ 称为基本声强,声强级的常用单位是分贝(dB)。
+
+\subsection{响度}
+
+响度是一种主观心理量,是人类主观感觉到的声音强弱程度,又称音量。\lstinline{响度与声强和频率有关}。一般来说,声音频率一定时,声强越强,响度也越大。相同的声强,频率不同时,响度也可能不同。响度若用对数值表示,即为响度级,响度级的单位定义为方,符号为phon。根据国际协议规定,0dB声强级的1000Hz纯音的响度级定义为0 phon,n dB声强级的1000Hz纯音的响度级就是n phon。其它频率的声强级与响度级的对应关系要从如图\ref{fig:loudness_curve}等响度曲线查出。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{loudness_curve.png}
+ \caption{等响曲线 \label{fig:loudness_curve}}
+\end{figure}
+
+\subsection{过零率}
+
+过零率体现的是信号过零点的次数,体现的是频率特性。
+
+\begin{equation}
+ Z_n=\sum_{n=0}^{N-1}\sum_{m=0}^{M-1}|{\rm sgn}(x_n(m))-{\rm sgn}(x_n(m-1))|
+\end{equation}
+
+其中,$N$ 表示帧数, $M$ 表示每一帧中的样本点个数, ${\rm sgn}$ 为符号函数,即
+
+\begin{equation}
+ {\rm sgn}=\left\{\begin{matrix}
+ & 1,x \geq 0 \\
+ & -1,x<0
+ \end{matrix}\right.
+\end{equation}
+
+\subsection{共振峰}
+
+声门处的准周期激励进入声道时会引起共振特性,产生一组共振频率,这一组共振频率称为共振峰频率或简称共振峰。共振峰包含在语音的频谱包络中,频谱极大值就是共振峰。频率最低的共振峰称为第一共振峰,对应的频率也称作基频,决定语音的F0,其它的共振峰统称为谐波,如图\ref{fig:frequency_f0}所示,蓝色箭头指向频谱的第一共振峰,也就是基频的位置,决定音高;而绿框则是其它共振峰,统称为谐波。谐波是基频对应的整数次频率成分,由声带发声带动空气共振形成的,对应着声音三要素的音色。谐波的位置,相邻的距离共同形成了音色特征。谐波之间距离近听起来则偏厚粗,之间距离远听起来偏清澈。在男声变女声的时候,除了基频的移动,还需要调整谐波间的包络,距离等,否则将会丢失音色信息。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{frequency_f0.png}
+ \caption{共振峰 \label{fig:frequency_f0}}
+\end{figure}
+
+\subsection{基频和基音周期}
+
+基音周期反映了声门相邻两次开闭之间的时间间隔,基频(fundamental frequency,F0)则是基音周期的倒数,对应着声带振动的频率,代表声音的音高,声带振动越快,基频越高。它是语音激励源的一个重要特征,比如可以通过基频区分性别。一般来说,成年男性基频在100-250Hz左右,成年女性基频在150-350Hz左右,女声的音高一般比男声稍高。
+
+人类可感知声音的频率大致在20-20000Hz之间,人类对于基频的感知遵循对数律,也就是说,人们会感觉100Hz到200Hz的差距,与200Hz到400Hz的差距相同。因此,音高常常用基频的对数来表示。在音乐上,把相差一倍的两个基频的差距称为一个八度(octave);把一个八度12等分,每一份称为一个半音(semitone);把一个半音再100等分,每一份称为一个音分(cent)。
+
+基频是语音的重要特征,在包括语音合成的语音处理中有着广泛的应用,比如语音转换(Voice Conversion,VC)和语音合成中基频是一个强特征。基频的提取可以分为时域法和频域法。时域法以波形为输入,基本原理是寻找波形的最小正周期;频域法则会先对信号进行傅里叶变换,得到频谱,频谱在基频的整倍数处有尖峰,频域法的基本原理就是求出这些尖峰频率的最大公约数。但是考虑到基频并非每一帧都有,因此在提取基频前后,都需要判断有无基频,称之为清浊音判断(Unvoiced/Voiced Decision,U/V Decision)。语音的基频往往随着时间变化,在提取基频之前往往要进行分帧,逐帧提取的基频常常含有错误,其中常见的错误就是倍频错误和半频错误,也就是提取出来的基频是真实基频的两倍或者一半,因此基频提取后要进行平滑操作。常见的基频提取算法有基于信号处理时域法的YIN\footnote{A. de Cheveigné and H. Kawahara, "YIN, a fundamental frequency estimator for speech and music", Journal of the Acoustical Society of America, 2002.},基于信号处理频域法的SWIPE\footnote{A. Camacho and J. G. Harris, "A sawtooth waveform inspired pitch estimator for speech and music", Journal of the Acoustical Society of America, 2008.},基于机器学习时域法的CREPE\footnote{J. W. Kim, et al., "CREPE: A convolutional representation for pitch estimation", ICASSP, 2018.}和基于机器学习频域法的SPICE\footnote{B. Gfeller, et al., "SPICE: Self-supervised pitch estimation", IEEE Transactions on Audio, Speech and Language Processing, 2020.}。常用的基频提取工具有\href{https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder}{pyWORLD},\href{https://github.com/YannickJadoul/Parselmouth}{Parselmouth},\href{https://github.com/marl/crepe}{CREPE},\href{https://github.com/patriceguyot/Yin}{YIN}等。参见\href{https://zhuanlan.zhihu.com/p/269107205}{基频提取算法综述}。
+
+\subsection{音高}
+
+音高(pitch)是由声音的基频决定的,音高和基频常常混用。可以这样认为,音高(pitch)是稀疏离散化的基频(F0)。由规律振动产生的声音一般都会有基频,比如语音中的元音和浊辅音;也有些声音没有基频,比如人类通过口腔挤压气流的清辅音。在汉语中,元音有a/e/i/o/u,浊辅音有y/w/v,其余音素比如b/p/q/x等均为清辅音,在发音时,可以通过触摸喉咙感受和判断发音所属音素的种类。
+
+\subsection{MFCC和语谱图}
+
+对语音进行分析和处理时,部分信息在时域上难以分析,因此往往会提取频谱特征。在语音合成中,通常将频谱作为中间声学特征:首先将文本转换为频谱,再将频谱转换为波形;在语音识别中,则将频谱或者MFCC作为中间声学特征。语音通过预加重、分帧、加窗、傅里叶变换之后,取功率谱的幅度平方,进行梅尔滤波取对数之后,就得到了梅尔频谱(或称FilterBank/FBank),如果再进行离散余弦变换,就能够获得MFCC,下一章将进行详述。语音通常是一个短时平稳信号,在进行傅里叶变换之前,一般要进行分帧,取音频的一个小片段进行短时傅里叶变换(STFT)。STFT的结果是一个复数,包括幅度和相位信息,将该复数中的频率作为横轴,幅度作为纵轴,如图\ref{fig:frequency_spectrum}所示,就组成了频谱图,将频谱图中的尖峰点连接起来,就形成了频谱包络。注意到,频谱图反映一个语音帧的频域情况,没有时间信息。因此,将每个帧对应的频谱图连接起来,以时间作为横轴,频率作为纵轴,颜色深浅表示幅度,如图\ref{fig:frequency_time_fig}下面红图所示,就组成了语谱图。语谱图实际上是一个三维图,横轴时间,纵轴频率,颜色深浅表示幅度大小,一般来说,颜色越深,表示幅度值越大。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{frequency_spectrum.jpeg}
+ \caption{频谱图 \label{fig:frequency_spectrum}}
+\end{figure}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{frequency_time_fig.png}
+ \caption{波形和对应的语谱图 \label{fig:frequency_time_fig}}
+\end{figure}
+
+\section{语言学}
+
+语言学研究人类的语言,计算语言学则是一门跨学科的研究领域,试图找出自然语言的规律,建立运算模型,语音合成其实就是计算语言学的子领域之一。在语音合成中,一般需要将文本转换为对应的音素,然后再将音素输入到后端模型中,因此需要为每个语种甚至方言构建恰当合理的音素体系。相关概念如下。
+
+\begin{enumerate}
+ \item 音素(phoneme):也称音位,是能够区别意义的最小语音单位,同一音素由不同人/环境阅读,可以形成不同的发音。
+ \item 字素(grapheme):音素对应的文本。具体的区别参见:\href{https://www.youtube.com/watch?v=25r1fyoorko}{Phonemes, Graphemes, and Morphemes!}
+ \item 发音(phone): 某个音素的具体发音。实际上,phoneme和phone都是指的是音素,音素可具化为实际的音,该过程称为音素的语音体现。一个音素可能包含着几个不同音值的音,因而可以体现为一个音、两个音或更多的同位音。但是在一些论述中,phoneme偏向于表示发音的符号,phone更偏向于符号对应的实际发音,因此phoneme可对应无数个phone。
+ \item 音节(syllable):音节由音素组成。在汉语中,除儿化音外,一个汉字就是一个音节。如wo3(我)是一个音节,zhong1(中)也是一个音节。
+\end{enumerate}
+
+\subsection{国际音标简介}
+
+国际音标(International Phonetic Alphabet,IPA)是一种通用的注音系统,一套注音体系可以标注多种语言。对于汉语来说,使用国际音标和使用拼音标注发音效果是相同的;但是如果希望实现多语言的注音,就必须采用统一的注音,IPA就是这样一种比较好的发音标注形式。
+
+因为人类语音差异很大,有限的拉丁字母远不够用,于是就需要改变字形和借用其它语言的字母来补充。也就是说,IPA以拉丁字母(罗马字母)的小写印刷体为主,如:a、b、c、d、f、g、h、i、j、k、p等。在不够用时,使用以下几种方法来补充,包括:
+
+\begin{enumerate}
+ \item 使用拉丁字母大写印刷体或书写体(草体);
+ \item 颠倒或者改变拉丁字母的字形,如:倒置e,卷尾c,右弯尾d,长右腿n等;
+ \item 借用其它语言字母;
+ \item 新制字母;
+ \item 在字母上加符号。
+\end{enumerate}
+
+\subsection{IPA的字母和发音}
+
+读音上,为照顾习惯,大多数符号仍读拉丁语或其它语言的原音。IPA追求一个字符表示一个发音,不会出现在一些语言中,如英语用“th”、“sh”表示一个发音的情况。IPA字母的发音,有些和原始的希腊字母发音相同,但有些又和英语等语言发音相同,其大致的规则包括:
+
+\begin{enumerate}
+ \item 元音字母:如[a]、[o]、[i]等发音和意大利语、西班牙语无较大差别;
+ \item 辅音字母:如[m]、[n]、[z]、[p]、[b]的发音则接近于英语;
+ \item 其他字母:如[y]和德语或芬兰语中的y类似,而[j]与英语的y发音接近。
+\end{enumerate}
+
+IPA的字母构成会随着规范的修改而变动,2018年发布的标准中,IPA的字母有107个,包括了59个肺部气流辅音,10个非肺部气流辅音,28个元音和10个其他字母,如下表\ref{fig:ipa_consant}-\ref{fig:other_alphabet}所示:
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{ipa_consant.png}
+ \caption{肺部气流辅音(59个) \label{fig:ipa_consant}}
+\end{figure}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{ipa_consant_not.png}
+ \caption{非肺部气流辅音(10个) \label{fig:ipa_consant_not}}
+\end{figure}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vowel.png}
+ \caption{(元音) \label{fig:vowel}}
+\end{figure}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{other_alphabet.png}
+ \caption{(其它字母) \label{fig:other_alphabet}}
+\end{figure}
+
+在国际音标表中,同一列、或同一行的音标,在发音方法上有相同之处,因此也就具有相似的性质,这为语音的研究提供了较大的便利。“国际音标表”是语音学的基础,就如同“元素周期表”是化学的基础。一些开源工具,比如\href{https://github.com/espeak-ng/espeak-ng}{eSpeak NG Text-to-Speech}、\href{https://github.com/dmort27/epitran}{Epitran}实现了各语种的字素转国际音标。但是,这些国际音标开源工具并没有提供对方言的支持,比如上海话、闽南语的字素转音素;国际音标本身识记较为复杂,学习成本比较高,并且为了照顾世界所有语种,音素的划分上较为精细,因此国际音标是语音合成中音素体系的重要参考方案,但非最佳方案。
+
+\subsection{音系学}
+
+对于语音合成来说,需要了解语言学的分支之一:音系学,以便更好地制定适用于一个语种语音合成系统的音素体系。这里需要探讨三个问题:音位数量,这里的音位和音素概念区别不大,音素不针对一个语种,是一个最小的语音单位,音位是针对一个特定语言的,具有区别意义的最小语音单位,参见\href{https://www.zhihu.com/question/27250496}{音素和音位的区别与联系是什么?};语音配列,也就是语音符号的组合规律,哪些音段的组合是不被允许的,音段出现的位置有哪些限制;音系交替,音与音同时出现时,彼此受影响会导致哪些形式的变化,这涉及到音系过程。音系过程可以理解为一个音段受所处语音环境或语法环境的影响而产生变化的过程,音系过程的种类有很多,比如同化和异化两种过程。
+
+音位数量的确定牵扯到对比分布和互补分布两个概念。如果A和B处于对比分布时,那么甲和乙处于同样的语言环境中时,就会引起意义的不同。比如英语中的[p]和[b]就处于对比分布,当它们处于相同的语言环境中时,比如pin[\underline{p}in]和bin[\underline{b}in],但是两个单词的意义完全不同,因此[p]和[b]就分属两个不同的音位。而假如A和B处于互补分布时,那么甲和乙不可能出现在同样的语音环境中,例如英语中的[p]处于重读音节首时pig[\underline{p}ig],往往表现为送气的[ $p^h$ ],而在[s]后面时spit[s\underline{p}it],往往表现为不送气的[p],送气的[ $p^h$ ]和不送气的[p]不会出现在同一语音环境中,可以说,它们是同一个音位在不同语音环境中的音位变体。因此,\lstinline{音位处于对比分布,而音位变体处于互补分布}。确立音位的做法便是寻找最小对比对,也就是说寻找音位时要满足:1. 在相同的语音环境;2. 单词的意思不同。最直接的做法就是找两个意义不同的的单词,并且只有在一个位置上有不同的音段,在其它位置上的音段都相同,这一对单词就是最小对比对。比如ban[\underline{b}an]和man[\underline{m}an]这对最小对比对中,除了[b]和[m]之外,其它音段都相同,正因为[b]和[m],这两个单词的意义也不同。 因此归纳音位的原则有:对立互补原则和语音相似原则。
+
+语音配列是一个语种中,对于一个单词、语素或音节中可能出现的元音和辅音序列制约条件的集合。比如英语单词“wtist”是不可能存在的,因为[w]是滑音(glide),而[t]则是塞擦音(plosive),在英语中如果滑音和塞擦音同时出现在词首,则塞擦音一定在滑音的前面,比如twin,因此“wtist”一定是非法英语单词。
+
+同化是指一个音段变得和另一个音段相似的音系学过程,根据同化的方向,这一过程又可以分为顺同化和逆同化。顺同化又称遗留同化,是指后面的音段被前面的音段同化了,比如英语中的复数和动词的过去式。英语单词“cup”词缀辅音和前面词干尾的辅音在清浊上是一致的,音系学上认为复数形式本来的形式是[z],是一个浊音,但当词干尾的辅音是清音比如[t]、[k]、[p],这个浊辅音就会被前面的清音同化为清辅音[s],因此“cup”的复数形式“cups”读音就是[kaps]而不是[kapz]。顺同化是从左到右的同化,逆同化就是从右到左的同化。逆同化又称为先行同化,是前面的音段被后面音段同化的过程。比如汉语普通话中,当两个第三声的字放在一起,第一个就会变成第二声,如永(yong3)、远(yuan3),组成单词“永远”时,读音为“yong2 yuan3”。
+
+对于目前类似于Tacotron这样的端到端声学模型来说,给定的音素体系一般\lstinline{只需确定音位,对于各种协同发音导致的音位变体,则可以不加区分。}例如对于法语这样存在同一个音素在不同单词中发音不同的语种,文本前端的音素体系可以只关注音位,音位变体由后端模型自行学习。为了模型增强可控性,也可以尝试结合词面信息,根据上下文给出音位不同的符号表示。比如s[s]这个字母,在不同语境中可能存在不同的音位变体,后面结合字母a是一个音位变体,因此将此时字母s的音位变体标记为[sa];后面结合字母b可能又是一个音位变体,这时则将该s的音位变体标记为[sb]。
+
+
+\subsection{参考资料}
+
+\begin{enumerate}
+ \item \href{https://space.bilibili.com/363660379}{十分语言学(视频扫盲课程)}
+ \item \href{http://media.openonline.com.cn/media_file/rm/huashi0703/yuyanxgl/mulu.htm}{语言学概论}
+ \item \href{https://zhuanlan.zhihu.com/p/470501423}{《语音模式》笔记(上):肺部气流辅音}
+ \item \href{https://zhuanlan.zhihu.com/p/471036291}{《语音模式》笔记(下):非肺部辅音、元音、一些杂谈}
+ \item \href{https://www.zhihu.com/column/yulinhanshe}{语林寒舍-Huisje in het Taalbos}
+\end{enumerate}
+
+\section{音频格式}
+\begin{enumerate}
+ \item *.wav: 波形无损压缩格式,是语音合成中音频语料的常用格式,主要的三个参数:采样率,量化位数和通道数。一般来说,合成语音的采样率采用16kHz、22050Hz、24kHz,对于歌唱合成等高质量合成场景采样率可达到48kHz;量化位数采用16bit;通道数采用1.
+ \item *.flac: Free Lossless Audio Codec,无损音频压缩编码。
+ \item *.mp3: Moving Picture Experts Group Audio Player III,有损压缩。
+ \item *.wma: Window Media Audio,有损压缩。
+ \item *.avi: Audio Video Interleaved,avi文件将音频和视频包含在一个文件容器中,允许音视频同步播放。
+\end{enumerate}
+
+\section{数字信号处理}
+
+\subsection{模数转换}
+
+模拟信号到数字信号的转换(Analog to Digital Converter,ADC)称为模数转换。
+
+奈奎斯特采样定理:要从抽样信号中无失真地恢复原信号,抽样频率应大于2倍信号最高频率。抽样频率小于2倍频谱最高频率时,信号的频谱有混叠。抽样频率大于2倍频谱最高频率时,信号的频谱无混叠。如果对语音模拟信号进行采样率为16000Hz的采样,得到的离散信号中包含的最大频率为8000Hz。
+
+\subsection{频谱泄露}
+
+音频处理中,经常需要利用傅里叶变换将时域信号转换到频域,而一次快速傅里叶变换(FFT)只能处理有限长的时域信号,但语音信号通常是长的,所以需要将原始语音截断成一帧一帧长度的数据块。这个过程叫\lstinline{信号截断},也叫\lstinline{分帧}。分完帧后再对每帧做FFT,得到对应的频域信号。FFT是离散傅里叶变换(DFT)的快速计算方式,而做DFT有一个先验条件:分帧得到的数据块必须是整数周期的信号,也即是每次截断得到的信号要求是周期主值序列。
+
+但做分帧时,很难满足\lstinline{周期截断},因此就会导致\lstinline{频谱泄露}。要解决非周期截断导致的频谱泄露是比较困难的,可以通过\lstinline{加窗}尽可能减少频谱泄露带来的影响。窗类型可以分为汉宁窗、汉明窗、平顶窗等。虽然加窗能够减少频谱泄露,但加窗衰减了每帧信号的能量,特别是边界处的能量,这时加一个合成窗,且overlap-add,便可以补回能量。参见:\href{https://zhuanlan.zhihu.com/p/339692933}{频谱泄露和加窗}。
+
+\subsection{频率分辨率}
+频率分辨率是指将两个相邻谱峰分开的能力,在实际应用中是指分辨两个不同频率信号的最小间隔。
+
+\section{其它概念}
+
+\begin{enumerate}
+ \item 波形(waveform): 声音是由声源振动产生的波。
+ \item 信道: 通信的通道Channel,是信号传输的媒介。
+ \item 声道: 声音在录制和播放时,在不同空间位置采集或回放相互独立的音频信号,因此声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
+ \item 采样率:单位时间内从连续信号中提取并组成离散信号的采样个数,音频常用单位kHz。
+ \item 采样位数/采样深度:数字信号的二进制位数,与每次采样的可能值个数有关,音频常用单位bit。常见的音频格式: \lstinline{16kHz,16bit}中16kHz指的是采样率,16bit表示采样位深。
+ \item 信噪比(SNR):和声压级类似,单位仍采用分贝,数值越高,表示声音越干净,噪音比例越小。
+ \item LPC。线性预测系数。LPC的基本思想是,当前时刻的信号可以用若干历史时刻信号的线性组合来估计,通过使实际语音的采样值和线性预测的采样值之间达到均方差最小,即可得到一组线性预测系数。求解LPC系数可以采用自相关法、协方差法、格型法等快速算法。
+ \begin{note}
+ 语音信号的数字表示可以分为两类:\lstinline{波形表示}和\lstinline{参数表示},波形表示仅通过采样和量化保存模拟信号的波形;而参数表示将语音信号表示为某种语音产生模型的输出,是对数字化语音进行分析和处理之后得到的。
+ \end{note}
+
+ \begin{note}
+ 利用同态处理方法,对语音信号求离散傅里叶变换之后取对数,再求反变换就可以得到倒谱系数。其中,LPC倒谱(LPCCEP)是建立在LPC谱上的,而梅尔倒谱系数(Mel Frequency Cepstrum Coefficient,MFCC)则是基于梅尔频谱的。
+ \end{note}
+
+ \item LPCC。LPCC特征假定信号存在一种线性预测的结构,这对于周期特性的浊音描述比较准确,而对于辅音则相当于强加了一种错误的结构。MFCC相邻帧特征近乎独立,所以能够比较好地描述辅音,但忽略了信号可能的内在结构,如相邻帧之间的关联,经验表明MFCC更好用,并且经常会加入差分特征以减弱其独立性。
+ \begin{note}
+ 线性预测倒谱系数(LPCC)是根据声管模型建立的特征参数,是对声道响应的特征表征。梅尔频谱倒谱系数(MFCC)是基于人类听觉机理提取出的特征参数,是对人耳听觉的特征表征。
+ \end{note}
+\end{enumerate}
+
+对于一段1秒的波形,假设采样率16kHz,采样位深16bit,则包含样本点 $1\times 16000=16000$ 个,所占容量 $1\times 16000\times 16 /8=32000$ 字节(B)。
+
+
+
+
+
+
+
+
+\chapter{语音特征提取}
+原始信号是不定长的时序信号,不适合作为机器学习的输入。因此一般需要将原始波形转换为特定的特征向量表示,该过程称为语音特征提取。
+
+\section{预处理}
+包括预加重、分帧和加窗。
+
+\subsection{预加重}
+语音经过说话人的口唇辐射发出,受到唇端辐射抑制,高频能量明显降低。一般来说,当语音信号的频率提高两倍时,其功率谱的幅度下降约6dB,即语音信号的高频部分受到的抑制影响较大。在进行语音信号的分析和处理时,可采用预加重(pre-emphasis)的方法补偿语音信号高频部分的振幅,本质是施加低通滤波器。假设输入信号第 $n$ 个采样点为 $x[n]$ ,则预加重公式如下:
+
+\begin{equation}
+ x'[n]=x[n]-a\times x[n-1]
+\end{equation}
+
+其中, $a$ 是预加重系数,一般取 $a=0.97$。
+
+\subsection{分帧}
+语音信号是非平稳信号,考虑到发浊音时声带有规律振动,即基音频率在短时范围内时相对固定的,因此可以认为语音信号具有短时平稳特性,一般认为10ms~50ms的语音信号片段是一个准稳态过程。短时分析采用分帧方式,一般每帧帧长为20ms或50ms。假设语音采样率为16kHz,帧长为20ms,则一帧有 $16000\times 0.02=320$ 个样本点。
+
+相邻两帧之间的基音有可能发生变化,如两个音节之间,或者声母向韵母过渡。为确保声学特征参数的平滑性,一般采用重叠取帧的方式,即相邻帧之间存在重叠部分。一般来说,帧长和帧移的比例为 $1:4$ 或 $1:5$ 。
+
+\subsection{加窗}
+分帧相当于对语音信号加矩形窗,矩形窗在时域上对信号进行截断,在边界处存在多个旁瓣,会发生频谱泄露。为了减少频谱泄露,通常对分帧之后的信号进行其它形式的加窗操作。常用的窗函数有:汉明(Hamming)窗、汉宁(Hanning)窗和布莱克曼(Blackman)窗等。
+
+汉明窗的窗函数为:
+
+\begin{equation}
+ W_{ham}[n]=0.54-0.46\mathop{cos}(\frac{2\pi n}{N}-1)
+\end{equation}
+
+其中, $0\leq n\leq N-1$ ,$N$ 是窗的长度。
+
+汉宁窗的窗函数为:
+
+\begin{equation}
+ W_{han}[n]=0.5[1-\mathop{cos}(\frac{2\pi n}{N}-1)]
+\end{equation}
+
+其中, $0\leq n\leq N-1$ , $N$ 是窗的长度。
+
+\section{短时傅里叶变换}
+
+人类听觉系统与频谱分析紧密相关,对语音信号进行频谱分析,是认识和处理语音信号的重要方法。声音从频率上可以分为纯音和复合音,纯音只包含一种频率的声音(基音),而没有倍音。复合音是除了基音之外,还包含多种倍音的声音。大部分语音都是复合音,涉及多个频率段,可以通过傅里叶变换进行频谱分析。
+
+每个频率的信号可以用正弦波表示,采用正弦函数建模。基于欧拉公式,可以将正弦函数对应到统一的指数形式:
+
+\begin{equation}
+ e^{jwn}=\mathop{cos}(wn)+j\mathop{sin}(wn)
+\end{equation}
+
+正弦函数具有正交性,即任意两个不同频率的正弦波乘积,在两者的公共周期内积分等于零。正交性用复指数运算表示如下:
+
+\begin{equation}
+ \int_{-\infty}^{+\infty}e^{j\alpha t}e^{-j\beta t}dt=0,\quad if\ \alpha\neq \beta
+\end{equation}
+
+基于正弦函数的正交性,通过相关处理可以从语音信号分离出对应不同频率的正弦信号。对于离散采样的语音信号,可以采用离散傅里叶变换(DFT)。DFT的第 $k$ 个点计算如下:
+
+\begin{equation}
+ X[k]=\sum_{n=0}^{N-1} x[n]e^{-\frac{j2\pi kn}{K}},\quad k=0,1,...,K-1
+\end{equation}
+
+其中, $x[n]$ 是时域波形第 $n$ 个采样点值, $X[k]$ 是第 $k$ 个傅里叶频谱值, $N$ 是采样点序列的点数, $K$ 是频谱系数的点数,且 $K\geq N$ 。利用DFT获得的频谱值通常是复数形式,这是因为上式中,
+
+\begin{equation}
+ e^{-\frac{j2\pi kn}{K}}=\mathop{cos}(\frac{2\pi kn}{K})-j\mathop{sin}(\frac{2\pi kn}{K})
+\end{equation}
+
+则
+
+\begin{equation}
+ X[k]=X_{real}[k]-jX_{imag}[k]
+\end{equation}
+
+其中,
+
+\begin{equation}
+ X_{real}[k]=\sum_{n=0}^{N-1}x[n]\mathop{cos}(\frac{2\pi kn}{K})
+\end{equation}
+
+\begin{equation}
+ X_{imag}[k]=\sum_{n=0}^{N-1}x[n]\mathop{sin}(\frac{2\pi kn}{K})
+\end{equation}
+
+$N$ 个采样点序列组成的时域信号经过DFT之后,对应 $K$ 个频率点。经DFT变换得到信号的频谱表示,其频谱幅值和相位随着频率变化而变化。
+
+在语音信号处理中主要关注信号的频谱幅值,也称为振幅频谱/振幅谱:
+
+\begin{equation}
+ X_{magnitude}[k]=\sqrt{X_{real}[k]^2+X_{imag}[k]^2}
+\end{equation}
+
+能量频谱/能量谱是振幅频谱的平方:
+
+\begin{equation}
+ X_{power}[k]=X_{real}[k]^2+X_{imag}[k]^2
+\end{equation}
+
+各种声源发出的声音大多由许多不同强度、不同频率的声音组成复合音,在复合音中,不同频率成分与能量分布的关系称为声音的频谱,利用频谱图表示各频率成分与能量分布之间的关系,频谱图横轴是频率(Hz),纵轴是幅度(dB)。
+
+通过对频域信号进行逆傅里叶变换(IDFT),可以恢复时域信号:
+
+\begin{equation}
+ x[n]=\frac{1}{K}\sum_{k=0}^{K-1}X[k]e^{\frac{j2\pi kn}{N}},\quad n=0,1,...,N-1
+\end{equation}
+
+离散傅里叶变换(DFT)的计算复杂度为 $O(N^2)$ ,可以采用快速傅里叶变换(FFT),简化计算复杂度,在 $O(N\mathop{log}_2 N)$ 的时间内计算出DFT。在实际应用中,对语音信号进行分帧加窗处理,将其分割成一帧帧的离散序列,可视为短时傅里叶变换(STFT):
+
+\begin{equation}
+ X[k,l]=\sum_{n=0}^{N-1} x_l[n]e^{-\frac{j2\pi nk}{K}}=\sum_{n=0}^{N-1} w[n]x[n+lL]e^{-\frac{j2\pi nk}{K}}
+\end{equation}
+
+其中, $K$ 是DFT后的频率点个数, $k$ 是频率索引, $0\leq k< K$ 。$X[k,l]$ 建立起索引为 $lL$ 的时域信号,与索引为 $k$ 的频域信号之间的关系。
+
+\section{听觉特性}
+
+\subsection{梅尔滤波}
+
+人类对不同频率的语音有不同的感知能力:
+
+\begin{enumerate}
+ \item 1kHz以下,人耳感知与频率成线性关系。
+ \item 1kHz以上,人耳感知与频率成对数关系。
+\end{enumerate}
+
+因此,人耳对低频信号比高频信号更为敏感。因此根据人耳的特性提出了一种mel刻度,即定义1个mel刻度相当于人对1kHz音频感知程度的千分之一,mel刻度表达的是,从线性频率到“感知频率”的转换关系:
+
+\begin{equation}
+ mel(f)=2595\mathop{lg}(1+\frac{f}{700})
+\end{equation}
+
+\begin{lstlisting}
+ from matplotlib import pyplot as plt
+ import numpy as np
+
+ x = np.linspace(0, 5000, 50000)
+ y = 2595*np.log10(1+x/700)
+ x0 = 1000
+ y0 = 2595*np.log10(1+x0/700)
+ plt.plot(x, y)
+ plt.scatter(x0, y0)
+ plt.plot([x0, x0], [0, y0], 'k--')
+ plt.plot([0, x0], [x0, y0], 'k--')
+ plt.xlabel('f (Hz)')
+ plt.ylabel('Mel(f)')
+ plt.title('relationship between linear and mel scale')
+ plt.xlim(0, x[-1])
+ plt.ylim(0, y[-1])
+ plt.savefig('mel_vs_f.png')
+ plt.show()
+\end{lstlisting}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{mel_vs_f.png}
+ \caption{mel刻度和频率之间的关系 \label{fig:mel_vs_f}}
+\end{figure}
+
+人们根据一系列心理声学实验得到了类似耳蜗作用的滤波器组,用于模拟人耳不同频段声音的感知能力,也就是多个三角滤波器组成的mel频率滤波器组。每个滤波器带宽不等,线性频率小于1000Hz的部分为线性间隔,而线性频率大于1000Hz的部分为对数间隔。同样地,将梅尔频率转换到线性频率的公式为:
+
+\begin{equation}
+ f_{mel}^{-1}=700\cdot (10^{\frac{f_{mel}}{2595}}-1)
+\end{equation}
+
+\subsection{Bark滤波}
+
+声音的响度,反映人对不同频率成分声强/声音强弱的主观感受。响度与声强、频率的关系可以用\lstinline{等响度轮廓曲线}表示。
+
+人耳对响度的感知有一个范围,当声音低于某个响度时,人耳是无法感知到的,这个响度值称为听觉阈值,或称听阈。在实际环境中,但一个较强信号(掩蔽音)存在时,听阈就不等于安静时的阈值,而是有所提高。这意味着,邻近频率的两个声音信号,弱响度的声音信号会被强响度的声音信号所掩蔽(Mask),这就是\lstinline{频域掩蔽}。
+
+根据听觉频域分辨率和频域掩蔽的特点,定义能够引起听觉主观变化的频率带宽为一个\lstinline{临界频带}。一个临界频带的宽度被称为一个Bark,Bark频率 $Z(f)$ 和线性频率 $f$ 的对应关系定义如下:
+
+\begin{equation}
+ Z(f)=6\mathop{ln}(\frac{f}{600}+((\frac{f}{600})^2+1)^{\frac{1}{2}})
+\end{equation}
+
+其中,线性频率 $f$ 的单位为Hz,临界频带 $Z(f)$ 的单位为Bark。
+
+\section{倒谱分析}
+
+语音信号的产生模型包括发生源(Source)和滤波器(Filter)。人在发声时,肺部空气受到挤压形成气流,气流通过声门(声带)振动产生声门源激励 $e[n]$ 。对于浊音,激励 $e[n]$ 是以基音周期重复的单位冲激;对于清音, $e[n]$ 是平稳白噪声。该激励信号 $e[n]$ 经过咽喉、口腔形成声道的共振和调制,特别是舌头能够改变声道的容积,从而改变发音,形成不同频率的声音。气流、声门可以等效为一个激励源,声道等效为一个时变滤波器,语音信号 $x[n]$ 可以被看成激励信号 $e[n]$ 与时变滤波器的单位响应 $v[n]$ 的卷积:
+
+\begin{equation}
+ x[n]=e[n]*v[n]
+\end{equation}
+
+已知语音信号 $x[n]$ ,待求出上式中参与卷积的各个信号分量,也就是解卷积处理。除了线性预测方法外,还可以采用\lstinline{倒谱分析}实现解卷积处理。倒谱分析,又称为\lstinline{同态滤波},采用时频变换,得到对数功率谱,再进行逆变换,分析出倒谱域的倒谱系数。
+
+同态滤波的处理过程如下:
+
+\begin{enumerate}
+ \item 傅里叶变换。将时域的卷积信号转换为频域的乘积信号:
+ \begin{equation}
+ {\rm DFT}(x[n])=X[z]=E[z]V[z]
+ \end{equation}
+ \item 对数运算。将乘积信号转换为加性信号:
+ \begin{equation}
+ {\rm log} X[z]={\rm log}E[z]+{\rm log}V[z]=\hat{E}[z]+\hat{V}[z]=\hat{X}[z]
+ \end{equation}
+ \item 傅里叶反变换。得到时域的语音信号\lstinline{倒谱}。
+ \begin{equation}
+ Z^{-1}(\hat{X}[z])=Z^{-1}(\hat{E}[z]+\hat{V}[z])=\hat{e}[n]+\hat{v}[z]\approx \hat{x}[n]
+ \end{equation}
+\end{enumerate}
+
+在实际应用中,考虑到离散余弦变换(DCT)具有最优的去相关性能,能够将信号能量集中到极少数的变换系数上,特别是能够将大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分。一般采用DCT反变换代替傅里叶反变换,上式可以改写成:
+
+\begin{equation}
+ \hat{c}[m]=\sum_{k=1}^N{\rm log}X[k]{\rm cos}(\frac{\pi (k-0.5)m}{N}),\quad m=1,2,...,M
+\end{equation}
+
+其中,$X[k]$是DFT变换系数, $N$ 是DFT系数的个数, $M$ 是DCT变换的个数。
+
+此时, $\hat{x}[n]$ 是复倒谱信号,可采用逆运算,恢复出语音信号,但DCT不可逆,从倒谱信号 $\hat{c}[m]$ 不可还原出语音 $x[n]$ 。
+
+\section{常见的声学特征}
+
+在语音合成中,常用的声学特征有梅尔频谱(Mel-Spectrogram)/滤波器组(Filter-bank,Fank),梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficient,MFCC)等。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{text_to_speech_acoustic_feature.png}
+ \caption{常用的声学特征 \label{fig:acoustic_feature}}
+\end{figure}
+
+接下来重点介绍FBank和MFCC的计算过程。
+
+\subsection{FBank}
+
+FBank的特征提取过程如下:
+
+\begin{enumerate}
+ \item 将信号进行预加重、分帧、加窗,然后进行短时傅里叶变换(STFT)获得对应的\lstinline{频谱}。
+ \item 求频谱的平方,即\lstinline{能量谱}。进行梅尔滤波,即将每个滤波频带内的能量进行叠加,第 $k$ 个滤波器输出功率谱为 $X[k]$ 。
+ \item 将每个滤波器的输出取对数,得到相应频带的对数功率谱。
+
+ \begin{equation}
+ Y_{\rm FBank}[k]={\rm log}X[k]
+ \end{equation}
+\end{enumerate}
+
+FBank特征本质上是对数功率谱,包括低频和高频信息。相比于语谱图,FBank经过了梅尔滤波,依据人耳听觉特性进行了压缩,抑制了一部分人耳无法感知的冗余信息。
+
+\subsection{MFCC}
+
+MFCC和FBank唯一的不同就在于,获得FBank特征之后,再经过反离散余弦变换,就得到 $L$ 个MFCC系数。在实际操作中,得到的 $L$ 个MFCC特征值可以作为\lstinline{静态特征},再对这些静态特征做一阶和二阶差分,得到相应的静态特征。
+
+\section{具体操作}
+
+\subsection{利用librosa读取音频}
+
+\begin{lstlisting}
+ from matplotlib import pyplot as plt
+ import numpy as np
+ import librosa
+
+ # 利用librosa读取音频
+ input_wav_path = r'test.wav'
+ y, sr = librosa.load(input_wav_path)
+ y_num = np.arange(len(y))
+
+ # 截取前0.3s的音频
+ sample_signal = y[0:int(sr*0.3)]
+ sample_num = np.arange(len(sample_signal))
+
+ plt.figure(figsize=(11, 7), dpi=500)
+ plt.subplot(211)
+ plt.plot(y_num/sr, y, color='black')
+ plt.plot(sample_num/sr, sample_signal, color='blue')
+ plt.xlabel('Time (sec)')
+ plt.ylabel('Amplitude')
+ plt.title('Waveform')
+
+ plt.subplot(212)
+ plt.plot(sample_num/sr, sample_signal, color='blue')
+ plt.xlabel('Time (sec)')
+ plt.ylabel('Amplitude')
+ plt.title('0~0.3s waveform')
+ plt.tight_layout()
+ plt.savefig('waveform.png', dpi=500)
+ plt.show()
+\end{lstlisting}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{waveform.png}
+ \caption{波形图 \label{fig:waveform}}
+\end{figure}
+
+
+音频有不同的编码类型,librosa默认采取浮点格式读取,即读取的样本点均是 $[-1,-1]$ 之间的浮点值。更详细的文档参见\href{http://sox.sourceforge.net/sox.html}{SoX}的\lstinline{Input & Output File Format Options}部分。
+
+\begin{table}[htbp]
+ \centering
+ \caption{SoX音频个数}
+ \begin{tabular}{llll}
+ \toprule
+ 选项 & 描述 & 常见可选项 \\
+ \midrule
+ b & 每个编码样本所占的数据位数(位深) & 8/16/32 \\
+ c & 音频文件包含的通道数 & 1/2 \\
+ e & 音频文件的编码类型 & signed-integer/unsigned-integer/floating-point \\
+ r & 音频文件的采样率 & 16k/16000/22050 \\
+ t & 音频文件的文件类型 & raw/mp3 \\
+ \bottomrule
+ \end{tabular}%
+\end{table}%
+
+\subsection{提取梅尔频谱}
+
+\begin{lstlisting}
+ sample_rate = 16000
+ preemphasis = 0.97
+ n_fft = 1024
+ frame_length = 0.05 # ms
+ frame_shift = 0.01 # ms
+ fmin = 0
+ fmax = sample_rate/2
+ eps = 1e-10
+ n_mel = 80
+ win_length = int(sample_rate*frame_length)
+ hop_length = int(sample_rate*frame_shift)
+ mel_basis = librosa.filters.mel(
+ sample_rate, n_fft, n_mel, fmin=fmin, fmax=fmax)
+
+
+ def get_spectrogram(input_wav_path):
+ y, sr = librosa.load(input_wav_path)
+ y = np.append(y[0], y[1:]-preemphasis*y[:-1])
+ linear = librosa.stft(
+ y=y, n_fft=n_fft, hop_length=hop_length, win_length=win_length)
+ mag = np.abs(linear)
+ mel = np.dot(mel_basis, mag)
+ mel = np.log10(np.maximum(eps, mel))
+ mel = mel.T.astype(np.float32) # (T,n_mels)
+ return mel
+
+ # plt.switch_backend('agg')
+
+
+ def plot_spectrogram(spectrogram, file_path):
+ spectrogram = spectrogram.T
+ fig = plt.figure(figsize=(16, 9))
+ plt.imshow(spectrogram, aspect='auto', origin='lower')
+ plt.colorbar()
+ plt.xlabel('frames')
+ plt.tight_layout()
+ plt.savefig(file_path, dpi=500)
+ plt.show()
+
+
+ mel_spec = get_spectrogram(input_wav_path)
+ plot_spectrogram(mel_spec, 'mel_spectrogram.png')
+\end{lstlisting}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{mel_spectrogram.png}
+ \caption{梅尔频谱 \label{fig:mel_spectrogram}}
+\end{figure}
+
+\subsection{提取MFCC}
+
+\begin{lstlisting}
+ mfcc = dct(mel_spec)
+ plot_spectrogram(mfcc, 'mfcc.png')
+\end{lstlisting}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{mfcc.png}
+ \caption{MFCC \label{fig:mfcc}}
+\end{figure}
+
+
+
+\chapter{音库制作和文本前端}
+
+\section{音库制作}
+
+\subsection{音库制作概述}
+
+音库的制作一般包括发音人选型、录音文本收集、音频录制、语料整理和标注5个步骤。音库的制作对整个语音合成系统的建设较为重要,音库如果建设较差,比如发音人风格难以接受、标注和实际音频不符,之后的努力只会事倍功半。
+
+\subsection{发音人选型}
+
+发音人选型,顾名思义,就是根据应用场景选择录音风格、发音人等。首先,语音合成系统在不同场景下,对训练语料的要求有所不同。比如新闻播报场景下,要求发音人播报风;有声书合成场景下,要求发音人抑扬顿挫,富有感情;在车载等领域,则要求交互风;在情感语音合成则要求录制不同情感的语音;甚至在一些特定场景下,比如二次元领域,则要求可爱风等等。其次,不同的发音人对最终的合成语音自然度也有影响,部分发音人发音苍老、低沉,即使同样的文本、声学模型和声码器,最优的超参数,母语者也倾向于给予较低的自然度打分。因此,在音库录音之初,就可以发布有关于录音样品的平均意见得分评测,让母语者或者需求方选择合适的发音人和录音风格。虽然目前后端模型有一些迁移风格、说话人的能力,但最好从源头就做好。
+
+\subsection{录音文本收集}
+
+在一个语种的语音合成建设之初,就可以同步收集该语种对应的大文本。大文本不仅仅可以筛选录音文本,还可以从中提取词条、统计词频、制作词典、标注韵律、构建测试集等等。录音文本的选择一般遵循以下几个原则:
+
+\begin{enumerate}
+ \item 音素覆盖。这就要求在录音开始之前,就需要构建起来一套基础的文本前端,最起码要有简单的文本转音素(G2P)系统。大部分语种的字符或者字符组合会有较为固定的发音,比如英语中的h总是会发[h]的音,o总是会发[əʊ]的音,如果找不到公开、即时可用的文本转音素系统,可以根据规则构建。用于录音的文本要保持多样性,音素或者音素组合要尽可能覆盖全,可以统计音素序列中的N-Gram,确保某些音素或者音素组合出现频次过高,而某些音素或音素组合又鲜少出现。
+ \item 场景定制。如果是通用语音合成,需要确保百科、新闻、对话、高频词、基数词和序数词等数字串、包含常用外来词(如包含英语单词)的句子要有所覆盖;如果是特定场景,比如车载领域,则可以收集车载播报的常用话术、专业术语(比如油量、胎压等)、音乐名或歌手名、地名和新闻播报,在特定场景下,需要对业务有一定的理解,并且在一开始就要和需求方紧密沟通。
+ \item 文本正确性。录音文本确保拼写无误,内容正确,比如需要删除脏话、不符合宗教信仰或政治不正确的语句等。
+\end{enumerate}
+
+\subsection{音频录制}
+
+音频的录制对合成语音的表现较为重要,较差的语音甚至会导致端到端声学模型无法正常收敛。用于训练的录音至少要保证录音环境和设备始终保持一致,无混响、背景噪音;原始录音不可截幅;如果希望合成出来的语音干净,则要删除含口水音、呼吸音、杂音、模糊等,但对于目前的端到端合成模型,有时会学习到在合适的位置合成呼吸音、口水音,反而会增加语音自然度。录音尽可能不要事先处理,语速的调节尚可,但调节音效等有时会造成奇怪的问题,甚至导致声学模型无法收敛。音频的录制可以参考录音公司的标准,购买专业麦克风,并保持录音环境安静即可。在音库录制过程中,可尽早提前尝试声学模型,比如音库录制2个小时语音后,就可尝试训练基线语音合成系统,以防止录音不符合最终的需求。
+
+\subsection{语料整理}
+
+检查文本和录制的语音是否一一对应,录制的音频本身一句话是否能量渐弱,参与训练的语音前后静音段要保持一致,能量要进行规范化。可使用预训练的语音活动检测(Voice Activity Detection,VAD)工具,或者直接根据语音起止的电平值确定前后静音段。可以使用一些开源的工具,比如\href{https://github.com/csteinmetz1/pyloudnorm}{pyloudnorm}统一所有语音的整体能量,这将有助于声学模型的收敛。当然,在声学模型模型训练时,首先就要对所有语料计算均值方差,进行统一的规范化,但是这里最好实现统一能量水平,防止一句话前后能量不一致。能量规整的示例代码如下。
+
+\begin{lstlisting}
+def normalize_wav(wav_path, sample_rate, target_loudness=-24.0)
+ y, sr = librosa.load(YOUR_WAV_PATH, sr=SAMPLE_RATE)
+ meter = pyln.Meter(sr) # create BS.1770 meter
+ loudness = meter.integrated_loudness(y)
+ y = pyln.normalize.loudness(y, loudness, target_loudness)
+ peak = np.abs(y).max()
+ if peak >= 1:
+ y = y / peak * 0.999
+ return y
+\end{lstlisting}
+
+\subsection{标注}
+
+标注是所有模型都会遇到的问题,但语音合成中所有语料,特别是音素、音素时长让人类一一标注是不现实的,一般是利用文本前端产生一个基线的音素序列和音素时长,然后让人类参与检查。语音合成中的标注要检查以下几点:
+
+\begin{enumerate}
+ \item 音素层级。检查语音和音素的一致性;检查重音或音调标注;调整音素边界。
+ \item 单词层级。检查单词的弱化读音情形,比如car[r]某些发音人完全弱读[r],根据录音删除该音素[r],或者给予一个新的音素;外来词和缩略词的发音情况,不同音库可能有不同的处理方法;调整单词边界。
+ \item 句子层级。增删停顿,确保和实际录音一致。
+\end{enumerate}
+
+标注人员可以采用\href{https://www.fon.hum.uva.nl/praat/}{Praat}进行可视化标注和检查,如图\ref{fig:sample_praat}所示为利用Praat标注语料的示例。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{sample_praat.png}
+ \caption{利用Praat标注歌唱合成的语料 \label{fig:sample_praat}}
+\end{figure}
+
+总而言之,录音完成后,音素序列跟着录音走,语音如何发音,音素序列就严格按照语音标注,实在不行就发回重录。在语音合成中,同样的音频,不同场景的标注有可能是有细微变化的。比如在新闻播报场景下,发音风格比较平淡,某些细微的停顿和韵律变化可以不用在意,标注上也可以不体现;但是在交互或者小说领域,发音风格的变化较为丰富,对韵律和情感控制要求较高,因此标注可能更为精细,甚至会增加额外的标注信息,停顿、韵律等信息的标注可能和播报风有所不同。
+
+常见的语音合成专业数据提供商有\href{http://www.speechocean.com/welcome.html}{海天瑞声}、\href{https://www.data-baker.com/}{标贝科技}、\href{http://www.aishelltech.com/}{希尔贝壳}等。
+
+\section{文本前端}
+
+\subsection{文本前端在语音合成中扮演的角色}
+
+语音合成,顾名思义,是一项将文本转化为语音的技术。以Google的\href{https://google.github.io/tacotron/}{Tacotron}系列为代表的端到端语音合成技术大大降低了语音合成的技术门槛。对于表音语言比如英法西德意等语种,甚至可以直接输入文本,让模型自行学习如何将文本转化到语音。但是在实际的生产环境中,直接文本到语音会带来较大的不可控风险,比如“love”/lʌv/读成了/lɪv/,如何快速纠正类似的发音错误;“2kg”如何指定模型读成“两千克”,而非“二kg”等。因此在实际的语音合成系统中,通常会为语音合成系统添加文本前端,主要作用是将文本转换为音素,甚至会添加一些韵律标识构成语言学特征(linguistic feature),以便声学模型更好地建立文本到语音的映射。
+
+\subsection{文本前端的主要组成}
+
+文本前端一般遵循文本,到规范化文本,到音素这3个基本步骤,同时会从文本和规范化文本中预测韵律。音素和韵律标识统称为语言学特征(linguistic feature)。文本前端的输出作为下游声学模型和声码器的输入,如果发生发音错误等问题,大部分情况下直接修正音素序列即可,大大降低了问题解决的难度。一般来说,文本前端可分为以下五个部分:
+
+\begin{enumerate}
+ \item 文本预处理:主要是解决文本中书写错误、一些语种中同形异码等问题。
+ \item 文本归一化:主要解决文本中的特殊符号读法,比如“2kg”转换为“两千克”,另外还要处理一些语种比如波兰语、俄语中的性数格变化。
+ \item 分词:一些语种比如中文、藏语、日语、泰语、越南语、维吾尔语、朝鲜语等并非以空格作为词边界,通常需要分词以便后续的处理,但世界上大部分语种都以空格为词边界,该步骤可省略。
+ \item 文本转音素(G2P):将文本转换为注音,比如“中国”转化为“zhong1 guo2”。
+ \item 韵律分析:语音中每个音素的发音时长不同,停顿也不同。将文本转换为音素之后,通常会加入一定的韵律信息,以帮助声学模型提升合成语音的自然度,加入的韵律信息可以分为音素(L0)、单词(L1)、breath break(L3)和句子(L4)四个韵律层级。
+\end{enumerate}
+
+\subsection{Unicode调研和文本预处理}
+
+开展一个新语种的文本前端的开发,首要是调研该语种文字的字形、读音等,了解世界各语种的好去处无疑是\href{https://unicode.org/main.html}{Unicode官网}和维基百科。Unicode将世界上所有的字符均分配唯一数字标识,同时为了兼容和节省空间,常常采用“统一码转换格式-8”(UTF-8)、“统一码转换格式-16”(UTF-16)等具体实现该编码。具体来说,可以进入\href{https://www.unicode.org/charts/}{Unicode Code Charts}查询各个语种的编码。以最广泛使用的拉丁字符为例,\href{https://www.unicode.org/charts/PDF/U0000.pdf}{Basic Latin (ASCII)}文档中,首先是一页版权声明,之后展示了该类字符的Unicode码,最后是各个字符的简短介绍,帮助快速了解该语种。在介绍时,对于每一个字符,比如“!”,首先给出它的Unicode编码“0021”($\backslash$u0021),然后是该字符的字形如“!”,接下来一般是该字符的简介比如“EXCLAMATION MARK”,之后会给出一些补充信息,比如“=”表示该字符的其它含义, $\to$ 表示该字符的相关字符, $\equiv$ 表示该字符的同形异码。同形异码在多语种的文本前端中尤其需要注意,例如\href{https://www.unicode.org/charts/PDF/U0100.pdf}{Latin Extended-A}中,$\backslash$u0100的同形异码为$\backslash$u0041$\backslash$u0304,这种同形异码的字符需要统一处理为一种字符,用户的输入看起来相同,但在计算机中的表示是完全不同的。
+
+文本前端中的文本预处理模块主要是处理非法输入、同形异码的替换等。文本前端收到输入之后,可以限制一些边界条件,比如防止用户将音视频输入文本前端,限制输入的字符串长度和种类等;之后就进入包括同形异码替换的文本清理模块。首先是确定输入文本的语种(可要求用户提供或者限制本语音合成系统的主要输入语种);之后是通用处理规则,比如删除“$\backslash$u200B”、“$\backslash$u200C”等不可见字符,统一标点符号,全角转半角,一些特殊数字如$\backslash$u00BD替换为“1/2”等等;然后是本语系的处理规则,此时主要对同形异码进行替换;然后是本语种的处理规则,主要是处理本语种的外来字符,比如在意大利语中,将奇形怪状的外来字符“Á”、“Ô、“Ä”、“Å”统一替换为“A”,连接词“Æ”替换为“AE”;最后是针对不同语种定制的后处理规则。逐级处理的好处是代码、层次清晰,当然为了方便,可以统一进行处理和替换。
+
+相关的参考资料:
+
+\begin{enumerate}
+ \item \href{https://unicode-table.com/cn}{Unicdoe搜索}
+ \item \href{https://unicode.org/main.html}{Unicode官网}
+ \item \href{https://www.unicode.org/terminology/term_zh_Hans_CN_en.html}{Unicode术语表(中英互译)}
+ \item \href{https://www.unicode.org/unibook}{Unicode实用工具}
+\end{enumerate}
+
+\subsection{文本规范化}
+
+归一化目前是文本前端中的难点,学术界和工业界最普遍和精确的方法还是靠人肉堆规则,当然也逐渐出现了规则和模型混合的归一化系统,比如\href{https://arxiv.org/abs/1911.04128}{A Hybrid Text Normalization System Using Multi-Head Self-Attention For Mandarin}、\href{https://aclanthology.org/2020.emnlp-main.258/}{Cold-Start and Interpretability: Turning Regular Expressions into Trainable Recurrent Neural Networks}。
+
+一个基础的归一化模块至少应覆盖以下几类规则:物理量、货币、缩略语、常用机构名或专有名词、数字(分数/百分数/科学计数法/小数点/基数词/序数词/数字串)、算术表达式、标点符号、日期(月份/星期)的各种表示、时间、比分、网络用语或外来词等。
+
+相关的参考资料:
+
+\begin{enumerate}
+ \item \href{https://www.cnblogs.com/mengnan/p/13200062.html}{ICASSP 2020中的语音合成}
+ \item \href{https://arxiv.org/abs/1911.04128}{A Hybrid Text Normalization System Using Multi-Head Self-Attention For Mandarin}
+ \item \href{https://aclanthology.org/2020.emnlp-main.258/}{Cold-Start and Interpretability: Turning Regular Expressions into Trainable Recurrent Neural Networks}
+\end{enumerate}
+
+\subsection{分词}
+
+对于世界上大部分的语种来说,空格是天然的单词边界,因此分词并非一个常见任务,仅有中日韩、泰语、越南语等语种需要分词。“最大最长匹配”是简单且常见的分词算法,该算法需要准备一个词典,在对文本进行切分时,根据切分方向的不同,还可分为前向、后向、前后向最长匹配算法。以“前向最长匹配算法”为例,该方法首先设定一个词的最大长度,将待切分文本开始到词最大长度内的字符作为“候选词”,每次扫描时,将该“候选词”和词典中的词进行匹配,如果没有找到,就缩短“候选词”的长度继续寻找,直到匹配到字典中的词或者“候选词”成为单字,然后继续切分剩余文本。为了降低“候选词”和词典匹配的算法复杂度,可以先将词典构建为Trie(称前缀树或字典树),对文本从前到后切分时,每次尝试加入待切分文本的一个字符,并查询当前节点的所有子节点,如果待加入字符存在于子节点中,则沿着该节点继续查询,否则退出该字符,并将之前节点的字符作为切分后的单词,以该字符为起始点作为剩余待切分文本。
+
+为了提高分词的准确率,条件随机场、神经网络等方法也应用到了分词领域并取得了不错的效果。可参考:
+
+\begin{enumerate}
+ \item \href{https://zhuanlan.zhihu.com/p/50444885}{NLP分词算法深度综述}
+ \item \href{https://zhuanlan.zhihu.com/p/33261835}{中文分词算法简介}
+ \item \href{https://zhuanlan.zhihu.com/p/64409753}{五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg,THULAC, HanLP}
+\end{enumerate}
+
+对于日语来说,也有一些流行的开源词典,比如\href{https://unidic.ninjal.ac.jp/}{UniDic}、\href{https://github.com/neologd/mecab-ipadic-neologd}{mecab-ipadic-neologd},同时也有一些开源分词器比如\href{https://taku910.github.io/mecab/}{MeCab}、\href{https://www.atilika.org/}{Kuromoji}、\href{https://github.com/ku-nlp/jumanpp}{jumanpp}、\href{https://github.com/WorksApplications/Sudachi}{Sudachi}等。参见:\href{https://www.codercto.com/a/85083.html}{日语分词器的介绍和比较}。
+
+对于泰语来说,音节、单词和句子都需要切分。\href{https://github.com/ponrawee/ssg}{ssg}使用条件随机场对泰语文本切分音节,\href{https://github.com/vistec-AI/crfcut}{CRF-Cut}同样利用条件随机场对文本进行分句。泰语的分词算法同样也有很多,可参见\href{https://pythainlp.github.io/attacut/benchmark.html}{AttaCut-Benchmark}了解常用泰语分词算法的评测。
+
+\subsection{文本转音素}
+
+文本转音素(G2P/LTS)是将文本转换为注音表示的过程。最简单直白的文本转音素方法无疑是查词典,经过预处理和分词模块之后,文本被切分为一个个单词,利用词典查询单词对应的发音序列。但是对于带有缩略词、外来词的文本来说,情况略微复杂,因为查询缩略词、本语种和外来词词典的优先级不同,输出的音素序列有时也会有所不同。一个较好的处理逻辑是,最特殊、最有可能的单词优先处理。首先处理缩略词的发音,如果存在于缩略词词典中或者单词全大写时,则认为是缩略词,如果缩略词词典中有该词,直接输出音素序列,否则按照规则,比如按照每个字母的发音逐个给出发音;之后处理本土词的发音,如果存在于本土词词典中,则认为是本土词,直接从词典中给出音素序列;接下来处理英语单词,如果是英语收录词,则可以直接从词典中取出该英语词的音素序列,获得英语词的音素序列之后,注意要将英语音素转换为本土音素。当然,词典很难覆盖所有词,特别是语种构建的初期,大部分词都是集外词,需要利用一些规则或模型给出单词的发音。构建文本转音素规则的一般步骤是:1. 调研公开资料,了解该语种是否有重音和声调,并制定字符到音素的转换规则,注意音素要抓对立而非音变,比如cat[k]和fat[f]中的[k/f]就是一组对立,不同发音会导致意思发生改变,而tell[l]和telling[l]中的[l]虽然发音也不同,但是属于音变,发音不同并不会改变单词含义;2. 迭代,文本转音素规则,乃至音素体系都是一个迭代的过程,需要结合给定音素与实际模型合成的发音情况,不断完善音素规则。
+
+利用一个基础的词典,可以训练出一个G2P模型,给出任意一个单词的发音序列。同样有一些开源的G2P模型比如
+
+\begin{enumerate}
+ \item \href{https://montreal-forced-aligner.readthedocs.io/en/stable/model_training.html}{MfaTrainG2p},MfaG2p甚至给出了一些\href{https://github.com/MontrealCorpusTools/mfa-models}{预训练模型}。
+ \item \href{https://github.com/cmusphinx/g2p-seq2seq}{cmusphinx: g2p-seq2seq},基于TensorFlow的Tensor2Tensor库,准确率较高。
+\end{enumerate}
+
+当然,可以直接使用一些序列建模方法或者上面的工具,比如\href{https://github.com/pytorch/fairseq}{Fairseq},类似机器翻译,构建一个G2P模型,以便在语种构建初期,迅速扩充词典。相关的参考资料如下:
+
+\begin{enumerate}
+ \item \href{https://www.cs.cmu.edu/~awb/papers/LREC16_parlikar.pdf}{The Festvox Indic Frontend for Grapheme-to-Phoneme Conversion}
+ \item \href{https://ieeexplore.ieee.org/document/7942536}{A study on rule based approach for Grapheme to Phoneme conversion of Assamese letters in Festival framework}
+\end{enumerate}
+
+在产生音素序列之后,有时候还需要按照规则切分音节,并且给重音。特别是多个连续辅音(Consonant)的情形,不同的语种在切分音节时有不同的规则,比如三辅音情形下,如何分配这些辅音所属音节。重音情形也类似,需要根据语种确定重音规则。这些多个连续辅音分配音节,根据规则给定重音实际都需要配合后端模型进行实验,特别是目前端到端声学模型流行的情形下,一些音节的划分、重音的给定位置也许对声学模型并没有影响,而一些语种就有一定的优劣之分。
+
+\subsection{韵律分析}
+
+韵律分析同样是文本前端的难点之一,一个好的韵律信息可大大提升最终合成语音的自然度。一个简单的韵律规则是,加入单词边界作为L1,句子中标点处作为L3,句末作为L4,但这种规则通常并不是最优的。韵律分析中L3的预测尤为重要,可借助一些简单模型,比如决策树、CRF等,构造L3或者韵律相关的特征,如:前一个单词(L1)内的L0个数、前一个单词(L1)的词性、前前L1内的字符个数、前L1内的字符个数、后L1内的字符个数、后后L1内的字符个数、本字符的ID和前一个空格离本字符的字符距离等。当然也可以使用更为复杂的模型比如LSTM甚至BERT参与韵律分析,将问题转换为对每个字符的二分类(加或不加L3)或者多分类任务(L0/L1/L3)。
+
+\subsection{文本前端的工程实现}
+
+由于文本前端较为依赖资源,比如文本预处理规则文件、文本归一化规则文件、分词和文本转音素常用到的词典、用于韵律分析的模型等,特别是文本前端常常需要没有代码经验的语种专家参与进来,因此要将资源和代码分离开来,便于工程实现和维护。使用正则表达式作为文本归一化规则的具体实现,在大型的文本前端中缺陷凸现明显:难以阅读和维护,并且规则冲突严重。一个折中的做法是自定义规则文件,将一条条规则以优先级、匹配条件和输出的形式呈现。
+
+\section{总结}
+
+本章主要介绍语音合成中音库构建和文本前端。需要说明的是,文本前端甚至整个语音合成系统的构建都不是一蹴而就的,通常需要反复评测迭代。构建一个音素覆盖全、合理的测试集,之后母语者或者学习者进行评测和分析问题,确保评测标准合理。而上线时,就要确保线上线上一致性,文本前端、声学模型、声码器一个模块一个模块对齐一致,才能最终呈现出一个性能良好的语音合成系统。
+
+
+
+
+
+
+
+
+\chapter{声学模型}
+
+现代工业级神经网络语音合成系统主要包括三个部分:文本前端、声学模型和声码器,文本输入到文本前端中,将文本转换为音素、韵律边界等文本特征。文本特征输入到声学模型,转换为对应的声学特征。声学特征输入到声码器,重建为原始波形。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{text_to_speech-语音合成工作流.png}
+ \caption{神经网络TTS的三个主要部件 \label{fig:main_components_in_tts}}
+\end{figure}
+
+主要采用的声学模型包括Tacotron系列、FastSpeech系列等,目前同样出现了一些完全端到端的语音合成模型,也即是直接由字符/音素映射为波形。
+
+\section{Tacotron}
+
+\subsection{Tacotron-2简介}
+
+以最常使用的Tacotron-2声学模型为例。原始论文参见:
+
+\begin{enumerate}
+ \item \href{https://arxiv.org/abs/1703.10135}{Tacotron: Towards End-to-End Speech Synthesis}
+ \item \href{https://arxiv.org/abs/1712.05884}{Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions}
+\end{enumerate}
+
+此外,谷歌在语音合成领域,特别是端到端语音合成领域做出了开创性的共享,该组会将最新的论文汇总在\href{https://google.github.io/tacotron/}{Tacotron (/täkōˌträn/): An end-to-end speech synthesis system by Google}.
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{tacotron2_arch.png}
+ \caption{Tacotron-2模型结构 \label{fig:tacotron2_arch}}
+\end{figure}
+
+\subsection{声学特征建模网络}
+
+Tacotron-2的声学模型部分采用典型的序列到序列结构。编码器是3个卷积层和一个双向LSTM层组成的模块,卷积层给予了模型类似于N-gram感知上下文的能力,并且对不发音字符更加鲁棒。经词嵌入的注音序列首先进入卷积层提取上下文信息,然后送入双向LSTM生成编码器隐状态。编码器隐状态生成后,就会被送入注意力机制,以生成编码向量。我们利用了一种被称为位置敏感注意力(Location Sensitive Attention,LSA),该注意力机制的对齐函数为:
+
+\begin{equation}
+ score(s_{i-1},h_j)=v_a^T{\rm tanh}(Ws_{i-1}+Vh_j+Uf_{i,j}+b)
+\end{equation}
+
+其中, $v_a,W,V,U$为待训练参数, $b$ 是偏置值, $s_{i-1}$ 为上一时间步 $i-1$ 的解码器隐状态, $h_j$ 为当前时间步 $j$ 的编码器隐状态, $f_{i,j}$ 为上一个解码步的注意力权重 $\alpha_{i-1}$ 经卷积获得的位置特征,如下式:
+
+\begin{equation}
+ f_{i,j}=F*\alpha_{i-1}
+\end{equation}
+
+其中, $\alpha_{i-1}$ 是经过softmax的注意力权重的累加和。位置敏感注意力机制不但综合了内容方面的信息,而且关注了位置特征。解码过程从输入上一解码步或者真实音频的频谱进入解码器预处理网络开始,到线性映射输出该时间步上的频谱帧结束,模型的解码过程如下图所示。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{tacotron2_decoder.png}
+ \caption{Tacotron2解码过程 \label{fig:tacotron2_decoder}}
+\end{figure}
+
+频谱生成网络的解码器将预处理网络的输出和注意力机制的编码向量做拼接,然后整体送入LSTM中,LSTM的输出用来计算新的编码向量,最后新计算出来的编码向量与LSTM输出做拼接,送入映射层以计算输出。输出有两种形式,一种是频谱帧,另一种是停止符的概率,后者是一个简单二分类问题,决定解码过程是否结束。为了能够有效加速计算,减小内存占用,引入缩减因子r(Reduction Factor),即每一个时间步允许解码器预测r个频谱帧进行输出。解码完成后,送入后处理网络处理以生成最终的梅尔频谱,如下式所示。
+
+\begin{equation}
+ s_{final}=s_i+s_i'
+\end{equation}
+
+其中, $s_i$ 是解码器输出, $s_{final}$ 表示最终输出的梅尔频谱, $s_i'$ 是后处理网络的输出,解码器的输出经过后处理网络之后获得 $s_i'$ 。
+
+在Tacotron-2原始论文中,直接将梅尔频谱送入声码器WaveNet生成最终的时域波形。但是WaveNet计算复杂度过高,几乎无法实际使用,因此可以使用其它声码器,比如Griffin-Lim、HiFiGAN等。
+
+\subsection{损失函数}
+
+Tacotron2的损失函数主要包括以下4个方面:
+
+\begin{enumerate}
+ \item 进入后处理网络前后的平方损失。
+ \begin{equation}
+ {\rm MelLoss}=\frac{1}{n}\sum_{i=1}^n(y_{real,i}^{mel}-y_{before,i}^{mel})^2+\frac{1}{n}\sum_{i=1}^n(y_{real,i}^{mel}-y_{after,i}^{mel})^2
+ \end{equation}
+ 其中, $y_{real,i}^{mel}$ 表示从音频中提取的真实频谱, $y_{before,i}^{mel},y_{after,i}^{mel}$ 分别为进入后处理网络前、后的解码器输出, $n$ 为每批的样本数。
+ \item 从CBHG模块中输出线性谱的平方损失。
+ \begin{equation}
+ {\rm LinearLoss}=\frac{1}{n}\sum_{i=1}^{n}(y_{real,i}^{linear}-y_{i}^{linear})^2
+ \end{equation}
+ 其中, $y_{real,i}^{linear}$ 是从真实语音中计算获得的线性谱, $y_{i}^{linear}$ 是从CBHG模块输出的线性谱。
+ \item 停止符交叉熵
+ \begin{equation}
+ {\rm StopTokenLoss}=-[y\cdot {\rm log}(p)+(1-y)\cdot {\rm log}(1-p)]
+ \end{equation}
+ 其中, $y$ 为停止符真实概率分布, $p$ 是解码器线性映射输出的预测分布。
+ \item L2正则化
+ \begin{equation}
+ {\rm RegulationLoss}=\frac{1}{K}\sum_{k=1}^K w_k^2
+ \end{equation}
+ 其中, $K$ 为参数总数, $w_k$ 为模型中的参数,这里排除偏置值、RNN以及线性映射中的参数。最终的损失函数为上述4个部分的损失之和,如下式:
+ \begin{equation}
+ {\rm Loss}={\rm MelLoss}+{\rm LinearLoss}+{\rm StopTokenLoss}+{\rm RegulationLoss}
+ \end{equation}
+\end{enumerate}
+
+\section{FastSpeech}
+
+FastSpeech是基于Transformer显式时长建模的声学模型,由微软和浙大提出。原始论文参见:
+
+\begin{enumerate}
+ \item \href{https://arxiv.org/abs/1905.09263}{FastSpeech: Fast, Robust and Controllable Text to Speech}
+ \item \href{https://arxiv.org/abs/2006.04558}{FastSpeech 2: Fast and High-Quality End-to-End Text to Speech}
+\end{enumerate}
+
+相对应地,微软在语音合成领域的论文常常发布在\href{https://speechresearch.github.io/}{Microsoft-Speech Research}。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{fastspeech_arch_paper.png}
+ \caption{FastSpeech 2整体结构 \label{fig:fastspeech_arch_paper}}
+\end{figure}
+
+\subsection{模型结构}
+
+FastSpeech 2和上代FastSpeech的编解码器均是采用FFT(feed-forward Transformer,前馈Transformer)块。编解码器的输入首先进行位置编码,之后进入FFT块。FFT块主要包括多头注意力模块和位置前馈网络,位置前馈网络可以由若干层Conv1d、LayerNorm和Dropout组成。
+
+论文中提到语音合成是典型的一对多问题,同样的文本可以合成无数种语音。上一代FastSpeech主要通过目标侧使用教师模型的合成频谱而非真实频谱,以简化数据偏差,减少语音中的多样性,从而降低训练难度;向模型提供额外的时长信息两个途径解决一对多的问题。在语音中,音素时长自不必说,直接影响发音长度和整体韵律;音调则是影响情感和韵律的另一个特征;能量则影响频谱的幅度,直接影响音频的音量。在FastSpeech 2中对这三个最重要的语音属性单独建模,从而缓解一对多带来的模型学习目标不确定的问题。
+
+在对时长、基频和能量单独建模时,所使用的网络结构实际是相似的,在论文中称这种语音属性建模网络为变量适配器(Variance Adaptor)。时长预测的输出也作为基频和能量预测的输入。最后,基频预测和能量预测的输出,以及依靠时长信息展开的编码器输入元素加起来,作为下游网络的输入。变量适配器主要是由2层卷积和1层线性映射层组成,每层卷积后加ReLU激活、LayerNorm和Dropout。代码摘抄自\href{https://github.com/ming024/FastSpeech2}{FastSpeech2},添加了一些注释。
+
+\begin{lstlisting}
+class VariancePredictor(nn.Module):
+ """ Duration, Pitch and Energy Predictor """
+ def __init__(self):
+ super(VariancePredictor, self).__init__()
+
+ self.input_size = hp.encoder_hidden
+ self.filter_size = hp.variance_predictor_filter_size
+ self.kernel = hp.variance_predictor_kernel_size
+ self.conv_output_size = hp.variance_predictor_filter_size
+ self.dropout = hp.variance_predictor_dropout
+
+ self.conv_layer = nn.Sequential(OrderedDict([
+ ("conv1d_1", Conv(self.input_size,
+ self.filter_size,
+ kernel_size=self.kernel,
+ padding=(self.kernel-1)//2)),
+ ("relu_1", nn.ReLU()),
+ ("layer_norm_1", nn.LayerNorm(self.filter_size)),
+ ("dropout_1", nn.Dropout(self.dropout)),
+ ("conv1d_2", Conv(self.filter_size,
+ self.filter_size,
+ kernel_size=self.kernel,
+ padding=1)),
+ ("relu_2", nn.ReLU()),
+ ("layer_norm_2", nn.LayerNorm(self.filter_size)),
+ ("dropout_2", nn.Dropout(self.dropout))
+ ]))
+
+ self.linear_layer = nn.Linear(self.conv_output_size, 1)
+
+ def forward(self, encoder_output, mask):
+ '''
+ :param encoder_output: Output of encoder. [batch_size,seq_len,encoder_hidden]
+ :param mask: Mask for encoder. [batch_size,seq_len]
+ '''
+ out = self.conv_layer(encoder_output)
+ out = self.linear_layer(out)
+ out = out.squeeze(-1)
+
+ if mask is not None:
+ out = out.masked_fill(mask, 0.)
+
+ return out
+\end{lstlisting}
+
+利用该变量适配器对时长、基频和能量进行建模。
+
+\begin{lstlisting}
+class VarianceAdaptor(nn.Module):
+ """ Variance Adaptor """
+
+ def __init__(self):
+ super(VarianceAdaptor, self).__init__()
+ self.duration_predictor = VariancePredictor()
+ self.length_regulator = LengthRegulator()
+ self.pitch_predictor = VariancePredictor()
+ self.energy_predictor = VariancePredictor()
+
+ self.pitch_bins = nn.Parameter(torch.exp(torch.linspace(
+ np.log(hp.f0_min), np.log(hp.f0_max), hp.n_bins-1)), requires_grad=False)
+ self.energy_bins = nn.Parameter(torch.linspace(
+ hp.energy_min, hp.energy_max, hp.n_bins-1), requires_grad=False)
+ self.pitch_embedding = nn.Embedding(hp.n_bins, hp.encoder_hidden)
+ self.energy_embedding = nn.Embedding(hp.n_bins, hp.encoder_hidden)
+
+ def forward(self, x, src_mask, mel_mask=None, duration_target=None, pitch_target=None, energy_target=None, max_len=None, d_control=1.0, p_control=1.0, e_control=1.0):
+ '''
+ :param x: Output of encoder. [batch_size,seq_len,encoder_hidden]
+ :param src_mask: Mask of encoder, can get src_mask form input_lengths. [batch_size,seq_len]
+ :param duration_target, pitch_target, energy_target: Ground-truth when training, None when synthesis. [batch_size,seq_len]
+ '''
+ log_duration_prediction = self.duration_predictor(x, src_mask)
+ if duration_target is not None:
+ x, mel_len = self.length_regulator(x, duration_target, max_len)
+ else:
+ duration_rounded = torch.clamp(
+ (torch.round(torch.exp(log_duration_prediction)-hp.log_offset)*d_control), min=0)
+ x, mel_len = self.length_regulator(x, duration_rounded, max_len)
+ mel_mask = utils.get_mask_from_lengths(mel_len)
+
+ pitch_prediction = self.pitch_predictor(x, mel_mask)
+ if pitch_target is not None:
+ pitch_embedding = self.pitch_embedding(
+ torch.bucketize(pitch_target, self.pitch_bins))
+ else:
+ pitch_prediction = pitch_prediction*p_control
+ pitch_embedding = self.pitch_embedding(
+ torch.bucketize(pitch_prediction, self.pitch_bins))
+
+ energy_prediction = self.energy_predictor(x, mel_mask)
+ if energy_target is not None:
+ energy_embedding = self.energy_embedding(
+ torch.bucketize(energy_target, self.energy_bins))
+ else:
+ energy_prediction = energy_prediction*e_control
+ energy_embedding = self.energy_embedding(
+ torch.bucketize(energy_prediction, self.energy_bins))
+
+ x = x + pitch_embedding + energy_embedding
+
+ return x, log_duration_prediction, pitch_prediction, energy_prediction, mel_len, mel_mask
+\end{lstlisting}
+
+同样是通过长度调节器(Length Regulator),利用时长信息将编码器输出长度扩展到频谱长度。具体实现就是根据duration的具体值,直接上采样。一个音素时长为2,就将编码器输出复制2份,给3就直接复制3份,拼接之后作为最终的输出。实现代码:
+
+\begin{lstlisting}
+class LengthRegulator(nn.Module):
+ """ Length Regulator """
+
+ def __init__(self):
+ super(LengthRegulator, self).__init__()
+
+ def LR(self, x, duration, max_len):
+ '''
+ :param x: Output of encoder. [batch_size,phoneme_seq_len,encoder_hidden]
+ :param duration: Duration for phonemes. [batch_size,phoneme_seq_len]
+ :param max_len: Max length for mel-frames. scaler
+
+ Return:
+ output: Expanded output of encoder. [batch_size,mel_len,encoder_hidden]
+ '''
+ output = list()
+ mel_len = list()
+ for batch, expand_target in zip(x, duration):
+ # batch: [seq_len,encoder_hidden]
+ # expand_target: [seq_len]
+ expanded = self.expand(batch, expand_target)
+ output.append(expanded)
+ mel_len.append(expanded.shape[0])
+
+ if max_len is not None:
+ output = utils.pad(output, max_len)
+ else:
+ output = utils.pad(output)
+
+ return output, torch.LongTensor(mel_len).to(device)
+
+ def expand(self, batch, predicted):
+ out = list()
+
+ for i, vec in enumerate(batch):
+ # expand_size: scaler
+ expand_size = predicted[i].item()
+ # Passing -1 as the size for a dimension means not changing the size of that dimension.
+ out.append(vec.expand(int(expand_size), -1))
+ out = torch.cat(out, 0)
+
+ return out
+
+ def forward(self, x, duration, max_len):
+ output, mel_len = self.LR(x, duration, max_len)
+ return output, mel_len
+\end{lstlisting}
+
+对于音高和能量的预测,模块的主干网络相似,但使用方法有所不同。以音高为例,能量的使用方式相似。首先对预测出的实数域音高值进行分桶,映射为一定范围内的自然数集,然后做嵌入。
+
+\begin{lstlisting}
+pitch_prediction = self.pitch_predictor(x, mel_mask)
+if pitch_target is not None:
+ pitch_embedding = self.pitch_embedding(
+ torch.bucketize(pitch_target, self.pitch_bins))
+else:
+ pitch_prediction = pitch_prediction*p_control
+ pitch_embedding = self.pitch_embedding(
+ torch.bucketize(pitch_prediction, self.pitch_bins))
+\end{lstlisting}
+
+这里用到了Pytorch中一个不是特别常见的函数\href{https://pytorch.org/docs/master/generated/torch.bucketize.html}{torch.bucketize}。这是Pytorch中的分桶函数,boundaries确定了各个桶的边界,是一个单调递增向量,用于划分input,并返回input所属桶的索引,桶索引从0开始。
+
+能量嵌入向量的计算方法与之类似。至此,获得了展开之后的编码器输出x,基频嵌入向量\lstinline{pitch_embedding}和能量嵌入向量\lstinline{energy_embedding}之后,元素加获得最终编解码器的输入。
+
+\subsection{损失函数}
+
+FastSpeech 2的目标函数由PostNet前后的频谱均方差,时长、音高和能量的均方差组成。时长映射到指数域(时长预测器输出的数值 $x$ 作为指数,最终的预测时长为 $e^x$ ),音高映射到对数域(音高预测器输出的数值 $x$ 做对数,作为最终的音高 ${\rm log} x$ ),而能量直接采用能量预测器的输出值。整体的损失函数为:
+
+\begin{equation}
+ {\rm Loss}={\rm Loss}_{mel}+{\rm Loss}_{mel}^{post}+{\rm Loss}_{duration}+{\rm Loss}_{pitch}+{\rm Loss}_{energy}
+\end{equation}
+
+频谱的损失函数形式采用均方差(MSE),时长、基频和能量采用平均绝对误差(MAE),具体的实现如下:
+
+\begin{lstlisting}
+log_d_target.requires_grad = False
+p_target.requires_grad = False
+e_target.requires_grad = False
+mel_target.requires_grad = False
+
+log_d_predicted = log_d_predicted.masked_select(src_mask)
+log_d_target = log_d_target.masked_select(src_mask)
+p_predicted = p_predicted.masked_select(mel_mask)
+p_target = p_target.masked_select(mel_mask)
+e_predicted = e_predicted.masked_select(mel_mask)
+e_target = e_target.masked_select(mel_mask)
+
+mel = mel.masked_select(mel_mask.unsqueeze(-1))
+mel_postnet = mel_postnet.masked_select(mel_mask.unsqueeze(-1))
+mel_target = mel_target.masked_select(mel_mask.unsqueeze(-1))
+
+mel_loss = self.mse_loss(mel, mel_target)
+mel_postnet_loss = self.mse_loss(mel_postnet, mel_target)
+
+d_loss = self.mae_loss(log_d_predicted, log_d_target)
+p_loss = self.mae_loss(p_predicted, p_target)
+e_loss = self.mae_loss(e_predicted, e_target)
+
+total_loss = mel_loss + mel_postnet_loss + d_loss + p_loss + e_loss
+\end{lstlisting}
+
+\subsection{小结}
+
+FastSpeech系列的声学模型将Transformer引入语音合成领域,并且显式建模语音中的重要特征,比如时长、音高和能量等。实际上,微软首次在\href{https://arxiv.org/abs/1809.08895}{Neural Speech Synthesis with Transformer Network}将Transformer作为主干网络,实现语音合成的声学模型,这一思想同样被\href{https://arxiv.org/abs/2006.06873}{FastPitch: Parallel Text-to-speech with Pitch Prediction}采用,相关的开源代码:\href{https://github.com/as-ideas/TransformerTTS}{as-ideas/TransformerTTS}。
+
+\section{VITS}
+
+VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种结合变分推理(variational inference)、标准化流(normalizing flows)和对抗训练的高表现力语音合成模型。和Tacotron和FastSpeech不同,Tacotron / FastSpeech实际是将字符或音素映射为中间声学表征,比如梅尔频谱,然后通过声码器将梅尔频谱还原为波形,而VITS则直接将字符或音素映射为波形,不需要额外的声码器重建波形,真正的端到端语音合成模型。VITS通过隐变量而非之前的频谱串联语音合成中的声学模型和声码器,在隐变量上进行建模并利用随机时长预测器,提高了合成语音的多样性,输入同样的文本,能够合成不同声调和韵律的语音。VITS合成音质较高,并且可以借鉴之前的FastSpeech,单独对音高等特征进行建模,以进一步提升合成语音的质量,是一种非常有潜力的语音合成模型。
+
+\subsection{模型整体结构}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vits_arch.png}
+ \caption{VITS整体结构 \label{fig:vits_arch}}
+\end{figure}
+
+VITS包括三个部分:
+
+\begin{enumerate}
+ \item 后验编码器。如上图(a)的左下部分所示,在训练时输入线性谱,输出隐变量 $z$ ,推断时隐变量 $z$ 则由 $f_\theta$ 产生。VITS的后验编码器采用WaveGlow和Glow-TTS中的非因果WaveNet残差模块。应用于多人模型时,将说话人嵌入向量添加进残差模块,\lstinline{仅用于训练}。这里的隐变量 $z$ 可以理解为Tacotron / FastSpeech中的梅尔频谱。
+ \item 解码器。如上图(a)左上部分所示,解码器从提取的隐变量 $z$ 中生成语音波形,这个解码器实际就是声码器HiFi-GAN V1的生成器。应用于多人模型时,在说话人嵌入向量之后添加一个线性层,拼接到 $f_\theta$ 的输出隐变量 $z$ 。
+ \item 先验编码器。如上图(a)右侧部分所示,先验编码器结构比较复杂,作用类似于Tacotron / FastSpeech的声学模型,只不过VITS是将音素映射为中间表示 $z$ ,而不是将音素映射为频谱。包括文本编码器和提升先验分布复杂度的标准化流 $f_\theta$ 。应用于多人模型时,向标准化流的残差模块中添加说话人嵌入向量。
+ \item 随机时长预测器。如上图(a)右侧中间橙色部分。从条件输入 $h_{text}$ 估算音素时长的分布。应用于多人模型时,在说话人嵌入向量之后添加一个线性层,并将其拼接到文本编码器的输出 $h_{text}$ 。
+ \item 判别器。实际就是HiFi-GAN的多周期判别器,在上图中未画出,\lstinline{仅用于训练}。目前看来,对于任意语音合成模型,加入判别器辅助都可以显著提升表现。
+\end{enumerate}
+
+\subsection{变分推断}
+
+VITS可以看作是一个最大化变分下界,也即ELBO(Evidence Lower Bound)的条件VAE。
+
+\begin{enumerate}
+ \item 重建损失
+
+ VITS在训练时实际还是会生成梅尔频谱以指导模型的训练,重建损失中的目标使用的是梅尔频谱而非原始波形:
+ \begin{equation}
+ {\rm L}_{recon}=||x_{mel}-\hat{x}_{mel}||_1
+ \end{equation}
+ 但在推断时并不需要生成梅尔频谱。在实现上,不上采样整个隐变量 $z$ ,而只是使用部分序列作为解码器的输入。
+
+ \item KL散度
+
+ 先验编码器 $c$ 的输入包括从文本生成的音素 $c_{text}$ ,和音素、隐变量之间的对齐 $A$ 。所谓的对齐就是 $|c_{text}|\times |z|$ 大小的严格单调注意力矩阵,表示每一个音素的发音时长。因此KL散度是:
+ \begin{equation}
+ {\rm L}_{kl}={\rm log}q_{\phi}(z|x_{lin})-{\rm log}p_\theta (z|c_{text},A)
+ \end{equation}
+ 其中, $q_{\phi}(z|x_{lin})$ 表示给定输入 $x$ 的后验分布, $p_\theta(z|c)$ 表示给定条件 $c$ 的隐变量 $z$ 的先验分布。其中隐变量 $z$ 为:
+ \begin{equation}
+ z\sim q_\phi(z|x_{lin})=\mathbb{N}(z;\mu_\phi(x_{lin}),\sigma_\phi(x_{lin}))
+ \end{equation}
+ 为了给后验编码器提供更高分辨率的信息,使用线性谱而非梅尔频谱作为后验编码器 $\phi_\theta$ 的输入。同时,为了生成更加逼真的样本,提高先验分布的表达能力比较重要,因此引入标准化流,在文本编码器产生的简单分布和复杂分布间进行可逆变换。也就是说,在经过上采样的编码器输出之后,加入一系列可逆变换:
+ \begin{equation}
+ p_\theta(z|c)=\mathbb{N}(f_\theta(z);\mu_\theta(c),\sigma_\theta(c))|{\rm det}\frac{\partial f_\theta(z)}{\partial z}|
+ \end{equation}
+ 其中,上式中的 $c$ 就是上采样的编码器输出:
+ \begin{equation}
+ c=[c_{text},A]
+ \end{equation}
+\end{enumerate}
+
+
+\subsection{对齐估计}
+
+由于在训练时没有对齐的真实标签,因此在训练的每一次迭代时都需要估计对齐。
+
+\begin{enumerate}
+ \item 单调对齐搜索
+
+ 为了估计文本和语音之间的对齐 $A$ ,VITS采用了类似于Glow-TTS中的单调对齐搜索(Monotonic Alignment Search,MAS)方法,该方法寻找一个最优的对齐路径以最大化利用标准化流 $f$ 参数化数据的对数似然:
+ \begin{equation}
+ A=\underset{\hat{A}}{\rm argmax}{\rm log}p(x|c_{text},\hat{A})=\underset{\hat{A}}{\rm argmax}{\rm log}\mathbb{N}(f(x);\mu(c_{text},\hat{A}),\sigma(c_{text},\hat{A}))
+ \end{equation}
+ MAS约束获得的最优对齐必须是单调且无跳过的。但是无法直接将MAS直接应用到VITS,因为VITS优化目标是ELBO而非确定的隐变量 $z$ 的对数似然,因此稍微改变了一下MAS,寻找最优的对齐路径以最大化ELBO:
+ \begin{equation}
+ \underset{\hat{A}}{\rm argmax}{\rm log}p_\theta (x_{mel}|z)-{\rm log}\frac{q_\theta(z|x_{lin})}{p_\theta (z|c_{text},\hat{A})}
+ \end{equation}
+
+ \item 随机时长预测器
+
+ 随机时长预测器是一个基于流的生成模型,训练目标为音素时长对数似然的变分下界:
+ \begin{equation}
+ {\rm log}p_\theta (d|c_{text}\geq \mathbb{E}_{q_\theta (u,v|d,c_{text})}[{\rm log}\frac{p_\theta (d-u,v|c_{text})}{q_\phi (u,v|d,c_{text})}]
+ \end{equation}
+ 在训练时,断开随机时长预测器的梯度反传,以防止该部分的梯度影响到其它模块。音素时长通过随机时长预测器的可逆变换从随机噪音中采样获得,之后转换为整型值。
+
+\end{enumerate}
+
+\subsection{对抗训练}
+
+引入判别器 $D$ 判断输出是解码器 $G$ 的输出,还是真实的波形 $y$ 。VITS用于对抗训练的损失函数包括两个部分,第一部分是用于对抗训练的最小二乘损失函数(least-squares loss function):
+
+\begin{equation}
+ {\rm L}_{adv}(D)=\mathbb{E}_{(y,z)}[(D(y)-1)^2+(D(G(z)))^2]
+\end{equation}
+
+\begin{equation}
+ {\rm L}_{adv}(G)=\mathbb{E}_z[(D(G(z))-1)^2]
+\end{equation}
+
+第二部分是仅作用于生成器的特征匹配损失(feature-matching loss):
+
+\begin{equation}
+ {\rm L}_{fm}(G)=\mathbb{E}_{(y,c)}[\sum_{l=1}^T\frac{1}{N_l}||D^l(y)-D^l(G(z))||_1]
+\end{equation}
+
+其中, $T$ 表示判别器的层数, $D^l$ 表示第 $l$ 层判别器的特征图(feature map), $N_l$ 表示特征图的数量。特征匹配损失可以看作是重建损失,用于约束判别器中间层的输出。
+
+\subsection{总体损失}
+
+VITS可以看作是VAE和GAN的联合训练,因此总体损失为:
+
+\begin{equation}
+ {\rm L}_{vae}={\rm L}_{recon}+{\rm L}_{kl}+{\rm L}_{dur}+{\rm L}_{adv}+{\rm L}_{fm}(G)
+\end{equation}
+
+\subsection{总结}
+
+VITS是一种由字符或音素直接映射为波形的端到端语音合成模型,该语音合成模型采用对抗训练的模式,生成器多个模块基于标准化流。模型较大,合成质量优异。VITS的想法相当有启发,但是理解起来确实比较难,特别是标准化流,可参考:\href{https://github.com/janosh/awesome-normalizing-flows}{Awesome Normalizing Flows}。
+
+
+
+
+% 声码器部分
+\chapter{声码器}
+
+声码器(Vocoder),又称语音信号分析合成系统,负责对声音进行分析和合成,主要用于合成人类的语音。声码器主要由以下功能:
+
+\begin{enumerate}
+ \item 分析Analysis
+ \item 操纵Manipulation
+ \item 合成Synthesis
+\end{enumerate}
+
+分析过程主要是从一段原始声音波形中提取声学特征,比如线性谱、MFCC;操纵过程是指对提取的原始声学特征进行压缩等降维处理,使其表征能力进一步提升;合成过程是指将此声学特征恢复至原始波形。人类发声机理可以用经典的源-滤波器模型建模,也就是输入的激励部分通过线性时不变进行操作,输出的声道谐振部分作为合成语音。输入部分被称为激励部分(Source Excitation Part),激励部分对应肺部气流与声带共同作用形成的激励,输出结果被称为声道谐振部分(Vocal Tract Resonance Part),对应人类发音结构,而声道谐振部分对应于声道的调音部分,对声音进行调制。
+
+声码器的发展可以分为两个阶段,包括用于统计参数语音合成(Statistical Parameteric Speech Synthesis,SPSS)基于信号处理的声码器,和基于神经网络的声码器。常用基于信号处理的声码器包括Griffin-Lim\footnote{Griffin D. and Lim J. (1984). "Signal Estimation from Modified Short-Time Fourier Transform". IEEE Transactions on Acoustics, Speech and Signal Processing. 32 (2): 236–243. doi:10.1109/TASSP.1984.1164317},STRAIGHT\footnote{Kawahara H. Speech representation and transformation using adaptive interpolation of weighted spectrum: vocoder revisited[C]. 1997 IEEE International Conference on Acoustics, Speech, and Signal Processing. IEEE, 1997, 2: 1303-1306.}和WORLD\footnote{Morise M, Yokomori F, Ozawa K. World: a vocoder-based high-quality speech synthesis system for real-time applications[J]. IEICE TRANSACTIONS on Information and Systems, 2016, 99(7): 1877-1884.}。早期神经声码器包括WaveNet、WaveRNN等,近年来神经声码器发展迅速,涌现出包括MelGAN、HiFiGAN、LPCNet、NHV等优秀的工作。
+
+\section{Griffin-Lim声码器}
+
+在早期的很多Tacotron开源语音合成模型中均采用Griffin-Lim声码器,同时也有一些专门的开源实现,比如\href{https://github.com/bkvogel/griffin_lim}{GriffinLim}。
+
+\subsection{算法原理}
+
+原始的音频很难提取特征,需要进行傅里叶变换将时域信号转换到频域进行分析。音频进行傅里叶变换后,结果为复数,复数的绝对值就是幅度谱,而复数的实部与虚部之间形成的角度就是相位谱。经过傅里叶变换之后获得的幅度谱特征明显,可以清楚看到基频和对应的谐波。基频一般是声带的频率,而谐波则是声音经过声道、口腔、鼻腔等器官后产生的共振频率,且频率是基频的整数倍。
+
+Griffin-Lim将幅度谱恢复为原始波形,但是相比原始波形,幅度谱缺失了原始相位谱信息。音频一般采用的是短时傅里叶变化,因此需要将音频分割成帧(每帧20ms~50ms),再进行傅里叶变换,帧与帧之间是有重叠的。Griffin-Lim算法利用两帧之间有重叠部分的这个约束重构信号,因此如果使用Griffin-Lim算法还原音频信号,就需要尽量保证两帧之间重叠越多越好,一般帧移为每一帧长度的25\%左右,也就是帧之间重叠75\%为宜。
+
+Griffin-Lim在已知幅度谱,不知道相位谱的情况下重建语音,算法的实现较为简单,整体是一种迭代算法,迭代过程如下:
+
+\begin{enumerate}
+ \item 随机初始化一个相位谱;
+ \item 用相位谱和已知的幅度谱经过逆短时傅里叶变换(ISTFT)合成新语音;
+ \item 对合成的语音做短时傅里叶变换,得到新的幅度谱和相位谱;
+ \item 丢弃新的幅度谱,用相位谱和已知的幅度谱合成语音,如此重复,直至达到设定的迭代轮数。
+\end{enumerate}
+
+在迭代过程中,预测序列与真实序列幅度谱之间的距离在不断缩小,类似于EM算法。推导过程参见:\href{https://zhuanlan.zhihu.com/p/102539783}{Griffin Lim算法的过程和证明}和\href{https://zhuanlan.zhihu.com/p/66809424}{Griffin Lim声码器介绍}。
+
+
+\subsection{代码实现}
+
+摘抄自\href{https://zhuanlan.zhihu.com/p/25002923}{Build End-To-End TTS Tacotron: Griffin Lim 信号估计算法}。
+
+\begin{lstlisting}
+def griffin_lim(stftm_matrix, shape, min_iter=20, max_iter=50, delta=20):
+ y = np.random.random(shape)
+ y_iter = []
+
+ for i in range(max_iter):
+ if i >= min_iter and (i - min_iter) % delta == 0:
+ y_iter.append((y, i))
+ stft_matrix = librosa.core.stft(y)
+ stft_matrix = stftm_matrix * stft_matrix / np.abs(stft_matrix)
+ y = librosa.core.istft(stft_matrix)
+ y_iter.append((y, max_iter))
+
+ return y_iter
+\end{lstlisting}
+
+具体使用:
+
+\begin{lstlisting}
+# assume 1 channel wav file
+sr, data = scipy.io.wavfile.read(input_wav_path)
+
+# 由 STFT -> STFT magnitude
+stftm_matrix = np.abs(librosa.core.stft(data))
+# + random 模拟 modification
+stftm_matrix_modified = stftm_matrix + np.random.random(stftm_matrix.shape)
+
+# Griffin-Lim 估计音频信号
+y_iters = griffin_lim(stftm_matrix_modified, data.shape)
+\end{lstlisting}
+
+
+\section{STRAIGHT声码器}
+
+\subsection{概述}
+
+STARIGHT(Speech Transformation and Representation using Adaptive Interpolation of weiGHTed spectrum),即利用自适应加权谱内插进行语音转换和表征。STRAIGHT将语音信号解析成相互独立的频谱参数(谱包络)和基频参数(激励部分),能够对语音信号的基频、时长、增益、语速等参数进行灵活的调整,该模型在分析阶段仅针对语音基音、平滑功率谱和非周期成分3个声学参数进行分析提取,在合成阶段利用上述3个声学参数进行语音重构。
+
+STRAIGHT采用源-滤波器表征语音信号,可将语音信号看作激励信号通过时变线性滤波器的结果。
+
+\begin{note}
+ 对于能量信号和周期信号,其傅里叶变换收敛,因此可以用频谱(Spectrum)来描述;对于随机信号,傅里叶变换不收敛,因此不能用频谱进行描述,而应当使用功率谱(PSD),不严谨地说,功率谱可以看作是随机信号的频谱,参见\href{https://zhuanlan.zhihu.com/p/417454806}{功率谱密度(PSD)}。
+\end{note}
+
+\subsection{特征提取}
+
+\begin{enumerate}
+ \item 平滑功率谱的提取,包括低频带补偿和清音帧处理等过程。STRAIGHT分析阶段的一个关键步骤是进行自适应频谱分析,获取无干扰且平滑的功率谱。自适应加权谱的提取关键在于对提取出来的功率谱进行一系列的平滑和补偿。对输入信号进行:语音信号预处理->功率谱提取->低频噪声补偿->过平滑补偿->静音帧谱图的处理,最后得到自适应功率谱。
+ \item 非周期成分提取。
+ \item 通过小波时频分析的方式,提取基频轨迹。首先通过对语音信号中的基频信息进行解析,然后计算出相应的瞬时基频值,最后在频域进行谐波解析,并在频率轴进行平滑处理,获得语音信号的各个基频参数。
+\end{enumerate}
+
+\subsection{语音合成}
+
+STARIGHT采用PSOLA技术和最小相位脉冲响应相结合的方式,在合成语音时输入待合成语音的基音频率轨迹和去除了周期性的二维短时谱包络。
+
+开源的STRAIGHT声码器大多是MATLAB实现,比如\href{https://github.com/HidekiKawahara/legacy_STRAIGHT}{Legacy STRAIGHT},\href{https://github.com/ashmanmode/StraightRepo}{StraightRepo}。在开源语音合成系统\href{https://github.com/CSTR-Edinburgh/merlin}{merlin}中存在可用的STRAIGHT工具,参见\href{https://github.com/CSTR-Edinburgh/merlin/blob/master/misc/scripts/vocoder/straight/copy_synthesis.sh}{StraightCopySynthesis}。
+
+\section{WORLD声码器}
+
+\subsection{声学特征}
+
+WORLD通过获取三个声学特征合成原始语音,这三个声学特征分别是:基频(fundamental frequency,F0),频谱包络(Spectrum Envelop,也称频谱参数Spectrum Parameter,SP)和非周期信号参数(Aperiodic Parameter,AP)。
+
+\begin{enumerate}
+ \item 基频F0
+
+ 基频F0决定浊音,对应激励部分的周期脉冲序列,如果将声学信号分为周期和非周期信号,基频F0部分包含了语音的韵律信息和结构信息。对于一个由振动而发出的声音信号,这个信号可以看作是若干组频率不同的正弦波叠加而成,其中频率最低的正弦波即为\lstinline{基频},其它则为\lstinline{泛音}。
+
+ WORLD提取基频的流程:首先,利用低通滤波器对原始信号进行滤波;之后,对滤波之后的信号进行评估,由于滤波之后的信号应该恰好是一个正弦波,每个波段的长度应该恰好都是一个周期长度,因此通过计算这四个周期的标准差,可以评估此正弦波正确与否;最后选取标准差最小周期的倒数作为最终的基频。
+
+ \item 频谱包络SP
+
+ 频谱包络SP决定音色,对应声道谐振部分时不变系统的冲激响应,可以看作通过此线性时不变系统之后,声码器会对激励与系统响应进行卷积。将不同频率的振幅最高点通过平滑的曲线连接起来,就是频谱包络,求解方法有多种,在求解梅尔倒谱系数时,使用的是倒谱法。
+
+ \begin{note}
+ 倒频谱(Cepstrum)也称为倒谱、二次谱和对数功率谱等,倒频谱的工程定义为:信号功率谱对数值进行傅里叶逆变换的结果,也就是:信号->求功率谱->求对数->求傅里叶逆变换。参见\href{https://zhuanlan.zhihu.com/p/34989414}{信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析)}。
+ \end{note}
+
+ \item 非周期信号参数AP
+
+ 非周期信号参数AP决定清音,对应混合激励部分的非周期脉冲序列,一般的语音都是由周期和非周期信号组成,因此除了上述的周期信号的声学参数,还需要非周期信号参数,才能够恢复出原始信号。混合激励可以通过AP来控制浊音段中周期激励和噪音(非周期)成分的相对比重。
+
+\end{enumerate}
+
+\subsection{WORLD的分析功能}
+
+WORLD包含3个语音分析模块,语音分析模型包括DIO模块、CheapTrick模块,PLATINUM模块。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_world_arch.png}
+ \caption{WORLD声码器整体结构 \label{fig:vocoder_world_arch}}
+\end{figure}
+
+WORLD可以提取原始波形中的基频F0,基频包络SP和非周期信号AP,这三种声学特征对应三种提取算法:DIO输入波形提取基频,CheapTrick输入基频、波形提取频谱包络,D4C输入基频、频谱包络和波形提取非周期信号。最终,通过这三种声学特征通过最小相位谱与激励信号卷积后,输出恢复的原始波形。
+
+\subsection{DIO算法提取基频F0}
+
+F0是周期信号最长持续时间的倒数,反过来,周期是基频的整数分之一。基频会产生二次谐波、三次谐波等,最长的周期理论上对应着频率最低的部分,也就是在语谱图上对应最下面的亮线,能量最高的部分。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.8]{vocoder_pitch_harmonic.png}
+ \caption{基频和谐波 \label{fig:vocoder_pitch_harmonic}}
+\end{figure}
+
+有很多的算法估计基频F0,可以分为两类:一个是利用时域特征,比如自相关;一个利用频谱特征,比如倒谱cepstrum。WORLD使用DIO估计基频F0,比YIN、SWIPE要快,性能依然较好,DIO分为以下三步。
+
+\begin{enumerate}
+ \item 低通滤波器对原始信号进行滤波。使用不同频带的低通滤波器:因为不知道基频的位置,因此这一步包含不同周期的sin低通滤波器。
+
+ \item 取4个周期计算置信度。计算获得的各个可能基频F0的置信度,因为由基频分量组成的sin信号包含4个间隔(2个顶点、2个过零点)。如果滤波器得到的间隔长度一致,则说明是一个基波,如图\ref{fig:vocoder_world_dio1}。
+
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_world_dio1.png}
+ \caption{取四个间隔计算候选F0及其置信度 \label{fig:vocoder_world_dio1}}
+ \end{figure}
+
+ \item 从某个时间点的正弦波中提取出四个周期信号,并计算置信度,也就是标准差。然后选择标准差最低,也就是置信度最高的基波。
+\end{enumerate}
+
+\subsection{CheapTrick算法提取频谱包络SP}
+
+声音包含不同频率的信号,覆盖0到18000Hz,每个频率都有其振幅,定义每种频率中波的振幅最高点连线形成的图形为\lstinline{包络}。频谱包络是个重要的参数,在频率-振幅图中,用平滑的曲线将所有共振峰连接起来,这个平滑的曲线就是频谱包络。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_world_sp.png}
+ \caption{取四个间隔计算候选F0及其置信度 \label{fig:vocoder_world_sp}}
+\end{figure}
+
+提取频谱包络SP的典型算法有线性预测编码(Linear Predictive Coding,LPC)和Cepstrum。线性预测编码LPC的原理是用若干个历史语音采样点的加权线性求和去不断逼近当前的语音采样点;Cepstrum则是基于复数倒谱拥有频谱幅度与相位信息的原理,通过对一个信号进行快速傅里叶变换FFT->取绝对值->取对数->相位展开->逆快速傅里叶变换IFFT的变换处理,从而得到对应的倒谱图。
+
+WORLD采用CheapTrick做谱分析,思想来自于音高同步分析(pitch synchronous analysis),其过程是:先将不同基频进行自适应加窗操作,以及功率谱平滑操作,随后将信号在频域上进行同态滤波。
+
+\subsection{PLANTINUM提取非周期信号}
+
+混合激励和非周期信号参数AP经常应用到合成中,在Legacy-STRAIGHT和TANDEM-STRAIGHT算法中,aperiodicity被用于合成周期和非周期的信号。WORLD直接通过PLANTINUM从波形、F0和谱包络中得到混合激励的非周期信号。
+
+\subsection{WORLD的合成算法}
+
+TANDEM-STRAIGHT直接使用周期响应计算声带的振动,而Legacy-STRAIGHT则操纵组延迟(group delay)以避免嗡嗡声。在WORLD中,利用最小相位响应和激励信号的卷积来计算声带的振动,从下图\ref{fig:vocoder_world_synthesis},可以看到,WORLD的卷积比STAIGHT要少,因此计算量更少。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_world_synthesis.png}
+ \caption{WORLD合成算法 \label{fig:vocoder_world_synthesis}}
+\end{figure}
+
+\subsection{使用示例}
+
+WORLD声码器有较为成熟的\href{https://github.com/mmorise/World}{开源实现},并且有对应的Python封装:\href{https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder}{PyWORLD: A Python wrapper of WORLD Vocoder},另有\href{http://ml.cs.yamanashi.ac.jp/world/english}{官方实现}。以下示例包括了通过\lstinline{PyWorld}提取声学参数,合成原始音频,修改部分声学参数,编辑原始音频。
+
+\begin{lstlisting}
+import pyworld as pw
+from scipy.io import wavfile
+import matplotlib.pyplot as plt
+import numpy as np
+import os
+import soundfile as sf
+
+# 提取语音特征
+x, fs = sf.read(WAV_FILE_PATH)
+
+# f0 : ndarray
+# F0 contour. 基频等高线
+# sp : ndarray
+# Spectral envelope. 频谱包络
+# ap : ndarray
+# Aperiodicity. 非周期性
+f0, sp, ap = pw.wav2world(x, fs) # use default options
+
+# 分别提取声学参数
+# 使用DIO算法计算音频的基频F0
+_f0, t = pw.dio(x, fs, f0_floor= 50.0, f0_ceil= 600.0, channels_in_octave= 2, frame_period=pw.default_frame_period)
+
+# 使用CheapTrick算法计算音频的频谱包络
+_sp = pw.cheaptrick(x, _f0, t, fs)
+
+# 计算aperiodic参数
+_ap = pw.d4c(x, _f0, t, fs)
+
+# 基于以上参数合成原始音频
+_y = pw.synthesize(_f0, _sp, _ap, fs, pw.default_frame_period)
+
+# 1.变高频-更类似女性
+high_freq = pw.synthesize(f0*2.0, sp, ap, fs)
+
+# 2.直接修改基频,变为机器人发声
+robot_like_f0 = np.ones_like(f0)*100
+robot_like = pw.synthesize(robot_like_f0, sp, ap, fs)
+
+# 3.提高基频,同时频谱包络后移 -> 更温柔的女性?
+female_like_sp = np.zeros_like(sp)
+for f in range(female_like_sp.shape[1]):
+ female_like_sp[:, f] = sp[:, int(f/1.2)]
+female_like = pw.synthesize(f0*2, female_like_sp, ap, fs)
+
+# 4.转换基频(不能直接转换)
+x2, fs2 = sf.read(WAV_FILE_PATH2)
+f02, sp2, ap2 = pw.wav2world(x2, fs2)
+f02 = f02[:len(f0)]
+print(len(f0),len(f02))
+other_like = pw.synthesize(f02, sp, ap, fs)
+\end{lstlisting}
+
+\section{Neural Homomorphic Vocoder (NHV)}
+
+\subsection{源滤波器合成原理}
+
+如图\ref{fig:vocoder_nhv_source_filter}所示,基于源-滤波器的参数合成中,合成器的工作流程主要可分为三步。
+
+\begin{enumerate}
+ \item 根据待合成音节的声调特性构造相应的声门波激励源。
+ \item 再根据协同发音、速度变换(时长参数)等音变信息在原始声道的基础上构造出新的声道参数模型。
+ \item 最后将声门波激励源送入新的声道模型中,输出就是结合给定韵律特性的合成语音。
+\end{enumerate}
+
+共振峰合成和LPC(线性预测分析)合成是上述源-滤波器结构的参数合成中最常用的两种方法,实现原理类似,只是使用的声道模型不同。同时针对声道模型的特性,在源的选取上也略有区别。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[scale=0.7]{vocoder_nhv_source_filter.png}
+ \caption{源-滤波器合成结构框图 \label{fig:vocoder_nhv_source_filter}}
+\end{figure}
+
+\subsection{共振峰合成方法}
+
+与线性预测方法类似,共振峰合成方法也是对声源-声道模型的模拟,但它更侧重于对声道谐振特性的模拟。它把人的声道看作一个谐振腔,腔体的谐振特性决定所发出语音信号的频谱特性,也即共振峰特性。音色各异的语音有不同的共振峰模式,用每个共振峰以及其带宽作为参数可以构成一个共振峰滤波器,将多个共振峰滤波器组合起来模拟声道的传输特性,根据这个特性对声源发生器产生的激励信号进行调制,经过辐射模型后,就可以得到合成语音。
+
+语音学的研究结果表明,决定语音感知的声学特征主要是语音的共振峰,因此如果合成器的结构和参数设置正确,则这种方法能够合成高音质、高可懂度的语音。
+
+\begin{enumerate}
+ \item 激励源模型
+
+ 一般共振峰合成器的激励源有三种类型:合成浊音时用周期激励序列;合成清音时用伪随机噪音;合成浊擦音时用周期激励调制的噪音。发浊音时,声带不断地张开和关闭,产生间隙的脉冲波,开始时声门闭合幅度为零,接着声门逐渐打开,幅度缓慢上升,然后快速下降,当再次降低到零之后,有一个导数不连续点,相当于声门突然关闭。因此浊音时激励函数形式有三角波、多项式波和滤波器激励响应激励函数。
+
+ \item 共振峰声道模型
+
+ 对于声道模型,声学理论表明,语音信号谱中的谐振特性(对应声道传递函数中的极点)完全由声道的形状决定,与激励源的位置无关。
+\end{enumerate}
+
+\subsection{NHV概述}
+
+许多神经声码器旨在提升源-滤波器(source-filter)模型中对源(source)的建模能力,包括LPCNet、GELP和GlotGAN——通过神经网络仅建模源(比如建模线性预测的残差信号),而通过时变滤波器直接生成语音。不同于仅对源进行建模,神经源滤波器(Neural Source-Filter,NSF)框架将经典框架中的线性滤波器替换为卷积神经网络,其中DDSP\footnote{J. Engel, L. H. Hantrakul, C. Gu, and A. Roberts, "DDSP:
+Differentiable digital signal processing," in Proc. ICLR, 2020.}通过神经网络控制谐波加性噪声(Harmonic plus Noise)生成音频。
+
+NHV论文地址:\href{Neural Homomorphic Vocoder}{https://speechlab.sjtu.edu.cn/papers/2020/zjl00-liu-is2020.pdf}。神经同态声码器(Neural Homomorphic Vocoder,NHV)通过线性时变滤波器对脉冲串和噪音进行滤波后生成语音。给定声学特征,神经网络通过估计时变脉冲响应的复数谱控制线性时变(Linear Time-Varying,LTV)滤波器,并利用多尺度STFT和对抗损失函数进行训练。
+
+\subsection{整体结构}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_nhv_arch.png}
+ \caption{源-滤波器示意图 \label{fig:vocoder_nhv_arch}}
+\end{figure}
+
+源-滤波器示意图如图\ref{fig:vocoder_nhv_arch}所示, ${e[n]}$ 表示源(source), $h[n]$ 为滤波器, $s[n]$ 则是重建的样本点。在NHV中,神经网络负责建模源-滤波器模型中的线性时变(Linear Time-Varying,LTV)滤波器。类似于谐波噪音加性模型(Harmonic plus Noise model),NHV分别生成谐波和噪音成分。谐波部分,主要是通过线性时变脉冲串(LTV filtered impulse trains)建模发音部分的周期性振动;噪音部分,包括背景噪音、不发音成分、以及发音部分中的随机成分,通过线性时变滤波噪音建模。将原始的语音信号 $x$ 和重建信号 $s$ 切分为若干个帧长 $L$ 的不重叠帧, $m$ 为帧索引, $n$ 为样本点索引, $c$ 为特征索引,因此总帧数和总样本点数满足:
+
+\begin{equation}
+ N=M\times L
+\end{equation}
+
+上式中, $N$ 表示样本点总数, $M$ 表示不重叠帧帧数, $L$ 表示每个帧中的样本点个数。
+
+脉冲响应 $h$ 是因果的,谐波脉冲响应 $h_h$ 和噪音脉冲响应 $h_n$ 无限长, $n\in \mathbb{Z}$ 。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_nhv_inference.png}
+ \caption{NHV的语音合成过程 \label{fig:vocoder_nhv_inference}}
+\end{figure}
+
+NHV的语音生成过程如上图\ref{fig:vocoder_nhv_inference}所示,首先通过帧级别基频 $f_0[m]$ 生成脉冲串 $p[n]$ ,从高斯分布中采样得到噪音信号 $u[n]$ ;接着神经网络利用对数域梅尔谱 $S[m,c]$ 估计出每一帧的谐波脉冲响应 $h_h[m,n]$ 和噪音脉冲响应 $h_n[m,n]$ ;接着脉冲串 $p[n]$ 和噪音信号 $u[n]$ 通过LTV线性时变滤波器获得谐波成分 $s_h[n]$ 和噪音成分 $s_n[n]$ ;最后, $s_h[n]$ 和 $s_n[n]$ 加起来,并通过可训练的因果有限冲激响应滤波器 $h[n]$ 滤波,获得最终的语音样本点 $s[n]$ 。
+
+\subsection{脉冲串生成器}
+
+利用低通正弦波的和生成脉冲串:
+
+\begin{equation}
+ p(t)=\left\{\begin{array}{l}
+ \sum_{k=1}^{2kf_0(t)0 \\
+ 0,\quad if\ f_0(t)=0
+ \end{array}\right.
+\end{equation}
+
+
+其中,通过zero-order hold或者线性插值从 $f_0[m]$ 中重建 $f_0(t)$ ,且 $p[n]=p(n/f_s)$ , $f_s$ 为采样率。
+
+由于加性生成时,根据采样率和帧移需要加和200个正弦函数,计算量较大,因此可以采用近似算法:将基频周期四舍五入到采样周期的倍数,此时离散脉冲序列是稀疏的,然后可以按顺序生成,一次生成一个音高。
+
+\subsection{神经网络滤波估计器(Neural Network Filter Estimator)}
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_nhv_nn_filter_estimator.png}
+ \caption{NHV的语音合成过程 \label{fig:vocoder_nhv_nn_filter_estimator}}
+\end{figure}
+
+使用复数谱 $\hat{h}_h$ 和 $\hat{h}_n$ 作为冲激响应 $h_h$ 和 $h_n$ 的中间表示,复数谱同时描述了幅度响应和滤波器的组延迟(group delay),滤波器的组延迟会影响语音的音色。不同于使用线性相位或最小相位滤波器,NHV使用符合相位滤波器,从数据中学习相位特性。限制复倒谱的长度相当于限制幅度和相位响应的分辨率,这提供了控制滤波器复杂性的简单方法——神经网络只预测低频带系数,高频带谱系数设置为零。实验中,每帧预测两个10ms复数谱。实现上,无限冲激响应IIR,比如 $h_h[m,n]$ 和 $h_n[m,n]$ 通过有限冲激响应FIR近似,离散傅里叶变换的窗长必须足够大,以避免混叠现象,实验中窗长设置为 $N=1024$ 。
+
+\subsection{线性时变(LTV)滤波器和可训练的有限冲激响应(FIRs)}
+
+FIR(有限冲激响应)常用于音频信号处理,FIR和IIR(无限冲激响应)最直观的区别就体现在结构形式上,IIR的方程中,当前的输出$y(n)$是由当前输入$x(n)$,过去输入$x(n-1),x(n-2)$和过去输出$y(n-2),y(n-1)$这三类值决定。而在FIR方程中,则没有过去输出这项。IIR的差分方程如下:
+
+\begin{equation}
+ y(n)=\sum_{k=1}^N a_ky(n-k)+\sum_{k=0}^M b_kx(n-k)
+\end{equation}
+
+而FIR的差分方程为:
+
+\begin{equation}
+ y(n)=\sum_{k=0}^M b_k x(n-k)
+\end{equation}
+
+由于IIR的当前输出受到以前输出值的影响,因此它是有反馈的,或者说输出值是递归的;而FIR就是无反馈,非递归的。
+
+谐波部分的线性时变滤波器定义如下式所示:
+
+\begin{equation}
+ s_h[n]=\sum_{m=0}^{M}(w_L[n-mL]\cdot p[n])*h_h[m,n]
+\end{equation}
+
+卷积可以在时域和频域上应用,可训练的FIR滤波器 $h[n]$ 可以应用到语音生成的最后一步,谐波部分的卷积过程如下图所示。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.6\textwidth]{vocoder_nhv_harmonic_sample.png}
+ \caption{谐波部分的卷积过程 \label{fig:vocoder_nhv_harmonic_sample}}
+\end{figure}
+
+\subsection{神经网络的训练}
+
+\begin{enumerate}
+ \item 多尺度STFT损失
+
+ 因为要求原始信号 $x$ 和重建信号 $s$ 的声门激励(Glottal Closure Instants,GCIs)完全对齐,因此在重建信号 $x[n]$ 和原始信号 $s[n]$ 之间无法施加点级损失,而多尺度STFT计算损失时允许信号间相位错位。类似于多子带MelGAN\footnote{Yang G, Yang S, Liu K, et al. Multi-band MelGAN: Faster waveform generation for high-quality text-to-speech[C]. 2021 IEEE Spoken Language Technology Workshop (SLT). IEEE, 2021: 492-498.},多尺度STFT损失定义为不同参数下原始和重建幅度谱之间的L1距离之和:
+
+ \begin{equation}
+ {\rm L}_R=\frac{1}{C}\sum_{i=0}^{C-1}\frac{1}{K_i}(||X_i-S_i||_1+||{\rm log}X_i-{\rm log}S_i||_1)
+ \end{equation}
+
+ 上式中, $X_i$ 和 $S_i$ 分别为原始信号 $x$ 和重建信号 $s$ 在参数 $i$ 设置下计算获得的幅度谱,每个幅度谱包括 $K_i$ 个值,共 $C$ 组STFT参数配置,组数越多,重建信号的混叠问题一般越少。
+
+ \item 对抗损失函数
+
+ NHV采取合页损失函数形式:
+
+ \begin{equation}
+ {\rm L}_D=\mathbb{E}_{x,S}[{\rm max}(0,1-D(x,S))]+\mathbb{E}_{f_0,S}[{\rm max}(0,1+D(G(f_0,S),S))]
+ \end{equation}
+ \begin{equation}
+ {\rm G}=\mathbb{E}_{f_0,S}[-D(G(f_0,S),S)]
+ \end{equation}
+
+ 上式中, $D(x,S)$ 表示判别器网络, $D$ 输入原始信号 $x$ 或重建信号 $s$ ,以及真实log域梅尔频谱 $S$ , $f_0$ 表示基频,生成器 $G(f_0,S)$ 输出重建信号 $s$ 。
+\end{enumerate}
+
+\subsection{小结}
+
+NHV是基于源-滤波器的神经声码器,通过神经网络建模线性时变滤波器(LTV),对脉冲串和噪音进行滤波后生成语音,并结合多尺度STFT和对抗损失进行训练。
+
+\section{HiFiGAN}
+
+\subsection{HiFiGAN概述}
+
+HiFiGAN是近年来在学术界和工业界都较为常用的声码器,能够将声学模型产生的频谱转换为高质量的音频,这种声码器采用生成对抗网络(Generative Adversial Networks,GAN)作为基础生成模型,相比于之前相近的MelGAN,改进点在于:
+
+\begin{enumerate}
+ \item 引入了多周期判别器(Multi-Period Discriminator,MPD)。HiFiGAN同时拥有多尺度判别器(Multi-Scale Discriminator,MSD)和多周期判别器,尽可能增强GAN判别器甄别合成或真实音频的能力,从而提升合成音质。
+ \item 生成器中提出了多感受野融合模块。WaveNet为了增大感受野,叠加带洞卷积,音质虽然很好,但是也使得模型较大,推理速度较慢。HiFiGAN则提出了一种残差结构,交替使用带洞卷积和普通卷积增大感受野,保证合成音质的同时,提高推理速度。
+\end{enumerate}
+
+\subsection{HiFiGAN生成器简介}
+
+HiFiGAN的生成器主要有两块,一个是上采样结构,具体由一维转置卷积组成;二是所谓的多感受野融合(Multi-Receptive Field Fusion,MRF)模块,主要负责对上采样获得的采样点进行优化,具体由残差网络组成。
+
+\subsection{上采样结构}
+
+作为声码器的生成器,不但需要负责将频谱从频域转换到时域,而且要进行上采样(upsampling)。以80维梅尔频谱合成16kHz的语音为例,假设帧移为10ms,则每个帧移内有160个语音样本点,需要通过80个梅尔频谱值获得,因此,需要利用卷积网络不断增加输出“长度”,降低输出“通道数”,直到上采样倍数达到160,通道数降低为1即可。
+
+对于上采样操作,可以使用插值算法进行处理,比如最近邻插值(Nearest neighbor interpolation)、双线性插值(Bi-Linear interpolation)、双立方插值(Bi-Cubic interpolation)等,但是这些插值算法说到底是人工规则,而神经网络可以自动学习合适的变换,\href{https://pytorch.org/docs/master/generated/torch.nn.ConvTranspose1d.html}{转置卷积(ConvTransposed)},也称反卷积Deconvolution、微步卷积Fractionally-strided Convolution,则是合适的上采样结构。一般的卷积中,每次卷积操作都是对输入张量和卷积核的每个元素进行相乘再加和,卷积的输入和输出是\lstinline{多对一}的映射关系,而转置卷积则反过来,是\lstinline{一对多}的映射关系。从计算机的内部实现来看,定义:
+
+\begin{enumerate}
+ \item $X$ 为输入张量,大小为 $X_{width}\times X_{height}$
+ \item $Y$ 为输出张量,大小为 $Y_{width}\times Y_{height}$
+ \item $C$ 为卷积核,大小为 $C_{width}\times C_{height}$
+\end{enumerate}
+
+经过普通的卷积运算之后,将大张量 $X$ “下采样”到小张量 $Y$ 。具体来说,首先将输入张量展平为向量,也即是 $[X_{width}\times X_{height},1]$ ,同时也将卷积核展平成向量到输入张量 $X$ 的大小:由于卷积核小于输入张量,在行和列上都用0填充至输入张量大小,然后展平,则卷积核向量大小为 $[1,X_{width}\times X_{height}]$ ;同时按照步长,左侧填充0偏移该卷积核向量,最终,卷积核向量的个数为输出张量元素个数,则构成的卷积核张量大小为 $[Y_{width}\times Y_{height},X_{width}\times X_{height}]$ ,卷积核张量和输入张量矩阵乘,获得输出张量 $[Y_{width}\times Y_{height},1]$ ,重塑大小为 $C_{width},C_{height}$ 。
+
+此时,如果使用卷积核张量的转置 $[X_{width}\times X_{height},Y_{width}\times Y_{height}]$ 矩阵乘展平的 $[Y_{width}\times Y_{height},1]$ ,得到的结果就是 $[X_{width}\times X_{height},1]$ ,和刚刚的输入张量大小相同,这就完成了一次\lstinline{转置卷积}。但实际上,上述操作并非可逆关系,卷积将输入张量“下采样”到输出张量,本质是有损压缩的过程,由于在卷积中使用的\lstinline{卷积核张量}并非可逆矩阵,转置卷积操作之后并不能恢复到原始的数值,仅仅是恢复到原始的形状。这其实也就是线性谱与梅尔频谱关系,加权求和得到梅尔频谱之后就回不来了,顶多求梅尔滤波器组的伪逆,近似恢复到线性谱。
+
+此外,在使用转置卷积时需要注意棋盘效应(Checkboard artifacts)。棋盘效应主要是由于转置卷积的“不均匀重叠”(Uneven overlap)造成的,输出中每个像素接受的信息量与相邻像素不同,在输出上找不到连续且均匀重叠的区域,表现是图像中一些色块的颜色比周围色块要深,像棋盘上的方格,参见\href{https://distill.pub/2016/deconv-checkerboard}{Deconvolution and Checkerboard Artifacts}。避免棋盘效应的方法主要有:kernel\_size的大小尽可能被stride整除,尽可能使用stride=1的转置卷积;堆叠转置卷积减轻重叠;网络末尾使用 $1\times 1$ 的转置卷积等。
+
+通过上述的原理部分,可以看出卷积和转置卷积是对偶运算,输入变输出,输出变输入,卷积的输入输出大小关系为:
+
+\begin{equation}
+ L_{out}=\frac{L_{in}+2\times padding-kernel\_size}{stride}+1
+\end{equation}
+
+那么转置卷积的输入输出大小则为:
+
+\begin{equation}
+ L_{out}=(L_{in}-1)\times stride+kernel\_size-2\times padding
+\end{equation}
+
+当然,加入dilation之后,大小计算稍复杂些,参见\href{https://pytorch.org/docs/master/generated/torch.nn.ConvTranspose1d.html}{Pytorch-ConvTranspose1d},\href{https://pytorch.org/docs/master/generated/torch.nn.Conv1d.html}{Pytorch-Conv1d}。
+
+该部分参考文献:
+
+\begin{enumerate}
+ \item \href{https://www.zhihu.com/question/48279880/answer/1682194600}{怎样通俗易懂地解释反卷积?}
+ \item \href{https://zhuanlan.zhihu.com/p/158933003}{一文搞懂反卷积,转置卷积}
+ \item \href{https://distill.pub/2016/deconv-checkerboard}{Deconvolution and Checkerboard Artifacts}
+ \item \href{https://www.zhihu.com/question/436832427/answer/1679396968}{如何去除生成图片产生的棋盘伪影?}
+ \item \href{https://arxiv.org/abs/1603.07285}{A guide to convolution arithmetic for deep learning}
+ \item \href{https://pytorch.org/docs/master/generated/torch.nn.ConvTranspose1d.html}{Pytorch-ConvTranspose1d}
+ \item \href{https://pytorch.org/docs/master/generated/torch.nn.Conv1d.html}{Pytorch-Conv1d}
+\end{enumerate}
+
+转置卷积实现的上采样层定义为:
+
+\begin{lstlisting}
+self.ups = nn.ModuleList()
+for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):
+ self.ups.append(weight_norm(ConvTranspose1d(h.upsample_initial_channel//(2**i),
+ h.upsample_initial_channel//(2**(i+1)),kernel_size=k,
+ stride=u, padding=(k-u)//2)))
+\end{lstlisting}
+
+对于hop\_size=256来说,h.upsample\_rates和h.upsample\_kernel\_sizes分别为:
+
+\begin{enumerate}
+ \item "upsample\_rates": [8,8,2,2],
+ \item "upsample\_kernel\_sizes": [16,16,4,4],
+\end{enumerate}
+
+根据转置卷积的输入输出大小关系:
+
+\begin{equation}
+ L_{out}=(L_{in}-1)\times stride-2\times padding+dilation\times (kernel\_size-1)+output\_padding+1
+\end{equation}
+
+用于上采样的转置卷积,通过设置合适的padding,配合卷积核大小(kernel\_size)和步进(stride),就可以实现输出与输入大小呈“步进倍数”的关系,在这里,卷积核(upsample\_kernel\_sizes)设置为步进(upsample\_rates)的2倍。设置参数时,必须保持帧移点数,是各个卷积层步进(或者代码中所谓的上采样率update\_rates)的乘积,在上例中,也就是:
+
+\begin{equation}
+ hop\_length=256=8\times 8\times 2\times 2
+\end{equation}
+
+\subsection{多感受野融合}
+
+转置卷积的上采样容易导致棋盘效应,因此每次转置卷积上采样之后,都会跟着一个多感受野融合(MRF)的残差网络,以进一步提升样本点的生成质量。多感受野融合模块是一种利用带洞卷积和普通卷积提高生成器感受野的结构,带洞卷积的扩张倍数逐步递增,如dilation=1,3,5,每个带洞卷积之后,跟着卷积核大于1的普通卷积,从而实现带洞卷积和普通卷积的交替使用。带洞卷积和普通卷积的输入输出大小保持不变,在一轮带洞和普通卷积完成之后,原始输入跳连到卷积的结果,从而实现一轮“多感受野融合”。多感受野融合的具体实现上,论文中提出了两种参数量不同的残差网络。一种是参数量较多,多组带洞卷积(dilation=1,3,5)和普通卷积交替使用,HiFiGAN v1 (config\_v1.json)和HiFiGAN v2 (config\_v2.json)均使用该种多感受野融合(MRF)模块。:
+
+\begin{lstlisting}
+class ResBlock1(torch.nn.Module):
+ def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5)):
+ super(ResBlock1, self).__init__()
+ self.h = h
+ self.convs1 = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1,
+ dilation=dilation[0],padding=get_padding(kernel_size, dilation[0]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1,
+ dilation=dilation[1], padding=get_padding(kernel_size, dilation[1]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1,
+ dilation=dilation[2], padding=get_padding(kernel_size, dilation[2]))),
+ ])
+ self.convs1.apply(init_weights)
+
+ self.convs2 = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1)))
+ ])
+ self.convs2.apply(init_weights)
+
+ def forward(self, x):
+ for c1, c2 in zip(self.convs1, self.convs2):
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ xt = c1(xt)
+ xt = F.leaky_relu(xt, LRELU_SLOPE)
+ xt = c2(xt)
+ x = xt + x
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs1:
+ remove_weight_norm(l)
+ for l in self.convs2:
+ remove_weight_norm(l)
+\end{lstlisting}
+
+另外一种MRF大大减少了参数量,仅由两层带洞卷积(dilation=1,3)组成,但依然保持了跳跃连接的结构:
+
+\begin{lstlisting}
+class ResBlock2(torch.nn.Module):
+ def __init__(self, h, channels, kernel_size=3, dilation=(1, 3)):
+ super(ResBlock2, self).__init__()
+ self.h = h
+ self.convs = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1,
+ dilation=dilation[0], padding=get_padding(kernel_size, dilation[0]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1,
+ dilation=dilation[1], padding=get_padding(kernel_size, dilation[1]))),
+ ])
+ self.convs.apply(init_weights)
+
+ def forward(self, x):
+ for c in self.convs:
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ xt = c(xt)
+ x = xt + x
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs:
+ remove_weight_norm(l)
+\end{lstlisting}
+
+注意到两种MRF都使用了weight\_norm对神经网络的权重进行规范化,相比于batch\_norm,weight\_norm不依赖mini-batch的数据,对噪音数据更为鲁棒;并且,可以应用于RNN等时序网络上;此外,weight\_norm直接对神经网络的权重值进行规范化,前向和后向计算时,带来的额外计算和存储开销都较小。weight\_norm本质是利用方向 $v$ 和幅度张量 $g$ 替代权重张量 $w$ :
+
+\begin{equation}
+ w=g\frac{v}{||v||}
+\end{equation}
+
+方向张量 $v$ 和 $w$ 大小相同,幅度张量 $g$ 比 $w$ 少一维,使得 $w$ 能够比较容易地整体缩放。不直接优化 $w$ ,而是训练 $v$ 和 $g$ 。
+
+同时注意到,在推理时需要remove\_weight\_norm,这是因为训练时需要计算权重矩阵的方向和幅度张量,而在推理时,参数已经优化完成,要恢复回去,所以在推理时就直接移除weight\_norm机制。
+
+每个卷积核的0填充个数都调用了get\_padding函数,利用填充保证输入输出的长宽大小一致,该填充大小的计算方法:
+
+\begin{equation}
+ padding=(kernel\_size-1)*padding//2
+\end{equation}
+
+\subsection{HiFiGAN判别器简介}
+
+HiFiGAN的判别器有两个,分别是多尺度和多周期判别器,从两个不同角度分别鉴定语音。多尺度判别器源自MelGAN声码器的做法,不断平均池化语音序列,逐次将语音序列的长度减半,然后在语音的不同尺度上施加若干层卷积,最后展平,作为多尺度判别器的输出。多周期判别器则是以不同的序列长度将一维的音频序列折叠为二维平面,在二维平面上施加二维卷积。
+
+\subsection{多尺度判别器}
+
+多尺度判别器的核心是多次平均池化,缩短序列长度,每次序列长度池化至原来的一半,然后进行卷积。具体来说,多尺度判别器首先对原样本点进行一次“原尺寸判别”,其中“原尺寸判别”模块中一维卷积的参数规范化方法为谱归一化(spectral\_norm);接着对样本点序列进行平均池化,依次将序列长度减半,然后对“下采样”的样本点序列进行判别,该模块中一维卷积的参数规范化方法为权重归一化(weight\_norm)。在每一个特定尺度的子判别器中,首先进行若干层分组卷积,并对卷积的参数进行规范化;接着利用leaky\_relu进行激活;在经过多个卷积层之后,最后利用输出通道为1的卷积层进行后处理,展平后作为输出。
+
+\begin{lstlisting}
+class MultiScaleDiscriminator(torch.nn.Module):
+ def __init__(self):
+ super(MultiScaleDiscriminator, self).__init__()
+ self.discriminators = nn.ModuleList([
+ DiscriminatorS(use_spectral_norm=True),
+ DiscriminatorS(),
+ DiscriminatorS(),
+ ])
+ self.meanpools = nn.ModuleList([
+ AvgPool1d(4, 2, padding=2),
+ AvgPool1d(4, 2, padding=2)
+ ])
+
+ def forward(self, y, y_hat):
+ y_d_rs = []
+ y_d_gs = []
+ fmap_rs = []
+ fmap_gs = []
+ for i, d in enumerate(self.discriminators):
+ if i != 0:
+ y = self.meanpools[i-1](y)
+ y_hat = self.meanpools[i-1](y_hat)
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ fmap_rs.append(fmap_r)
+ y_d_gs.append(y_d_g)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+\end{lstlisting}
+
+上述代码中y\_d\_rs和y\_d\_gs分别是真实和生成样本的多尺度判别器展平后的整体输出,fmap\_rs和y\_d\_gs分别是真实和生成样本经过每一层卷积的特征图(feature map)。子判别器DiscriminatorS由若干层卷积组成,最后一层输出通道为1,之后对输出进行展平。注意到,与MelGAN不同,多尺度判别器的第一个子判别器DiscriminatorS使用谱归一化spectral\_norm,之后两个子判别器则是正常使用权重归一化weight\_norm规整可训练参数。谱归一化实际是在每次更新完可训练参数 $W$ 之后,都除以 $W$ 的奇异值,以保证整个网络满足利普希茨连续性,使得GAN的训练更稳定。参见\href{https://kaizhao.net/posts/spectral-norm}{GAN 的谱归一化(Spectral Norm)和矩阵的奇异值分解(Singular Value Decompostion)}。DiscriminatorS的具体实现如下:
+
+\begin{lstlisting}
+class DiscriminatorS(torch.nn.Module):
+ def __init__(self, use_spectral_norm=False):
+ super(DiscriminatorS, self).__init__()
+ norm_f = weight_norm if use_spectral_norm == False else spectral_norm
+ self.convs = nn.ModuleList([
+ norm_f(Conv1d(1, 128, 15, 1, padding=7)),
+ norm_f(Conv1d(128, 128, 41, 2, groups=4, padding=20)),
+ norm_f(Conv1d(128, 256, 41, 2, groups=16, padding=20)),
+ norm_f(Conv1d(256, 512, 41, 4, groups=16, padding=20)),
+ norm_f(Conv1d(512, 1024, 41, 4, groups=16, padding=20)),
+ norm_f(Conv1d(1024, 1024, 41, 1, groups=16, padding=20)),
+ norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),
+ ])
+ self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))
+
+ def forward(self, x):
+ fmap = []
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+\end{lstlisting}
+
+x是子判别器展平后的整体输出,大小为[B,l];fmap是经过卷积后的特征图(feature map),类型为list,元素个数为卷积层数,上述代码中有8个卷积层,则fmap元素个数为8,每个元素均是大小为[B,C,l']的张量。
+
+\subsection{多周期判别器}
+
+多周期判别器的重点是将一维样本点序列以一定周期折叠为二维平面,例如一维样本点序列[1,2,3,4,5,6],如果以3为周期,折叠成二维平面则是[[1,2,3],[4,5,6]],然后对这个二维平面施加二维卷积。具体来说,每个特定周期的子判别器首先进行填充,保证样本点数是周期的整倍数,以方便“折叠”为二维平面;接下来进入多个卷积层,输出通道数分别为[32,128,512,1024],卷积之后利用leaky\_relu激活,卷积层参数规范化方法均为权重归一化(weight\_norm);然后经过多个卷积层之后,利用一个输入通道数为1024,输出通道为1的卷积层进行后处理;最后展平,作为多周期判别器的最终输出。多周期判别器包含多个周期不同的子判别器,在论文代码中周期数分别设置为[2,3,5,7,11]。
+
+\begin{lstlisting}
+class MultiPeriodDiscriminator(torch.nn.Module):
+ def __init__(self):
+ super(MultiPeriodDiscriminator, self).__init__()
+ self.discriminators = nn.ModuleList([
+ DiscriminatorP(2),
+ DiscriminatorP(3),
+ DiscriminatorP(5),
+ DiscriminatorP(7),
+ DiscriminatorP(11),
+ ])
+
+ def forward(self, y, y_hat):
+ y_d_rs = []
+ y_d_gs = []
+ fmap_rs = []
+ fmap_gs = []
+ for i, d in enumerate(self.discriminators):
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ fmap_rs.append(fmap_r)
+ y_d_gs.append(y_d_g)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+\end{lstlisting}
+
+上述代码中y\_d\_rs和y\_d\_gs分别是真实和生成样本的多周期判别器输出,fmap\_rs和fmap\_gs分别是真实和生成样本经过每一层卷积后输出的特征图(feature map)。子判别器DiscriminatorP由若干层二维卷积组成:
+
+\begin{lstlisting}
+class DiscriminatorP(torch.nn.Module):
+ def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):
+ super(DiscriminatorP, self).__init__()
+ self.period = period
+ norm_f = weight_norm if use_spectral_norm == False else spectral_norm
+ self.convs = nn.ModuleList([
+ norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(2, 0))),
+ ])
+ self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))
+
+ def forward(self, x):
+ fmap = []
+
+ # 1d to 2d
+ b, c, t = x.shape
+ if t % self.period != 0: # pad first
+ n_pad = self.period - (t % self.period)
+ x = F.pad(x, (0, n_pad), "reflect")
+ t = t + n_pad
+ x = x.view(b, c, t // self.period, self.period)
+
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+\end{lstlisting}
+
+x是子判别器展平后的整体输出,大小为[B,l];fmap是经过每一层卷积后的特征图(feature map),类型为list,元素个数为卷积层数,上述代码中有6个卷积层,则fmap元素个数为6,每个元素是大小为[B,C,l',period]的张量。
+
+\subsection{损失函数简介}
+
+HiFiGAN的损失函数主要包括三块,一个是GAN原始的生成对抗损失(GAN Loss);第二是梅尔频谱损失(Mel-Spectrogram Loss),将生成音频转换回梅尔频谱之后,计算真实和生成音频对应梅尔频谱之间的L1距离;第三是特征匹配损失(Feature Match Loss),主要是对比真实和合成音频在中间卷积层上的差异。
+
+\subsection{生成对抗损失}
+
+HiFiGAN仍然是一个生成对抗网络,判别器计算输入是真实样本的概率,生成器生成以假乱真的样本,最终达到生成器合成接近真实的样本,以致于判别器无法区分真实和生成样本。HiFiGAN使用\href{https://zhuanlan.zhihu.com/p/25768099}{最小二乘GAN(LS-GAN)},将原始GAN中的二元交叉熵替换为最小二乘损失函数。判别器的生成对抗损失定义为:
+
+\begin{equation}
+ {\rm L}_{Adv}(D;G)=\mathbb{E}_{(x,s)}[(D(x)-1)^2+(D(G(s)))^2]
+\end{equation}
+
+对应的代码实现:
+
+\begin{lstlisting}
+def discriminator_loss(disc_real_outputs, disc_generated_outputs):
+ loss = 0
+ r_losses = []
+ g_losses = []
+ for dr, dg in zip(disc_real_outputs, disc_generated_outputs):
+ r_loss = torch.mean((dr-1)**2)
+ g_loss = torch.mean(dg**2)
+ loss += (r_loss + g_loss)
+ r_losses.append(r_loss.item())
+ g_losses.append(g_loss.item())
+
+ return loss, r_losses, g_losses
+\end{lstlisting}
+
+生成器的生成对抗损失定义为:
+
+\begin{equation}
+ {\rm L}_{Adv}(G;D)=\mathbb{E}_{s}[(D(G(s))-1)^2]
+\end{equation}
+
+其中, $x$ 表示真实音频, $s$ 表示梅尔频谱。
+
+对应的生成器代码实现:
+
+\begin{lstlisting}
+def generator_loss(disc_outputs):
+ loss = 0
+ gen_losses = []
+ for dg in disc_outputs:
+ l = torch.mean((dg-1)**2)
+ gen_losses.append(l)
+ loss += l
+
+ return loss, gen_losses
+\end{lstlisting}
+
+更详尽关于GAN的理论参见:\href{https://zhuanlan.zhihu.com/p/58812258}{GAN万字长文综述}
+
+\subsection{梅尔频谱损失}
+
+借鉴Parallel WaveGAN等前人工作,向GAN中引入重建损失和梅尔频谱损失可以提高模型训练初期的稳定性、生成器的训练效率和合成语音的自然度。具体来说,梅尔频谱损失就是计算合成和真实语音对应频谱之间的L1距离:
+
+\begin{equation}
+ {\rm L}_{Mel}(G)=E_{(x,s)}[||\phi(x)-\phi(G(s))||_1]
+\end{equation}
+
+其中, $\phi$ 表示将语音转换为梅尔频谱的映射函数。
+
+对应的损失函数实现:
+
+\begin{lstlisting}
+ loss_mel = F.l1_loss(y_mel, y_g_hat_mel)
+\end{lstlisting}
+
+上述代码中,y\_mel表示真实语音对应的梅尔频谱,y\_g\_hat\_mel表示梅尔频谱合成语音之后,合成语音又转换回来得到的梅尔频谱。
+
+\subsection{特征匹配损失}
+
+特征匹配损失是用来度量神经网络从真实和合成语音中提取的特征差异,具体来说,就是计算真实和合成语音经过特征提取层之后输出之间的L1距离:
+
+\begin{equation}
+ {\rm L}_{FM}(G;D)=\mathbb{E}_{x,s}[\sum_{i=1}^T\frac{1}{N_i}||D^i(x)-D^i(G(s))||_1]
+\end{equation}
+
+其中, $T$ 表示判别器中特征提取层的层数, $D^i$ 表示提取的特征, $N_i$ 表示第 $i$ 层判别器网络提取的特征数量。对应的代码为:
+
+\begin{lstlisting}
+def feature_loss(fmap_r, fmap_g):
+ loss = 0
+ for dr, dg in zip(fmap_r, fmap_g):
+ for rl, gl in zip(dr, dg):
+ loss += torch.mean(torch.abs(rl - gl))
+
+ return loss
+\end{lstlisting}
+
+\subsection{整体损失}
+
+\begin{enumerate}
+ \item 生成器的整体损失为:
+
+ \begin{equation}
+ {\rm L}_G={\rm L}_{Adv}(G;D)+\lambda_{fm}{\rm L}_{FM}(G;D)+\lambda_{mel}{\rm L}_{Mel}(G)
+ \end{equation}
+
+ 其中, $\lambda_{fm}$ 和 $\lambda_{mel}$ 分别为特征匹配和梅尔频谱损失的加权系数,实验中 $\lambda_{fm}=2,\lambda_{mel}=45$。
+
+ 因为HiFiGAN的判别器是由多尺度判别器和多周期判别器组成,因此生成器的总体损失又可以写作:
+
+ \begin{equation}
+ {\rm L}_G=\sum_{k=1}^K[{\rm L}_{Adv}(G;D_k)+\lambda_{fm}{\rm L}_{FM}(G;D_k)]+\lambda_{mel}{\rm L}_{Mel}(G)
+ \end{equation}
+
+ 其中, $K$ 为多尺度判别器和多周期判别器的个数, $D_k$ 表示第 $k$ 个MPD和MSD的子判别器。
+
+ 对应的代码为:
+
+ \begin{lstlisting}
+ # L1 Mel-Spectrogram Loss
+ loss_mel = F.l1_loss(y_mel, y_g_hat_mel) * 45
+
+ y_df_hat_r, y_df_hat_g, fmap_f_r, fmap_f_g = mpd(y, y_g_hat)
+ y_ds_hat_r, y_ds_hat_g, fmap_s_r, fmap_s_g = msd(y, y_g_hat)
+ loss_fm_f = feature_loss(fmap_f_r, fmap_f_g)
+ loss_fm_s = feature_loss(fmap_s_r, fmap_s_g)
+ loss_gen_f, losses_gen_f = generator_loss(y_df_hat_g)
+ loss_gen_s, losses_gen_s = generator_loss(y_ds_hat_g)
+ loss_gen_all = loss_gen_s + loss_gen_f + loss_fm_s + loss_fm_f + loss_mel
+ \end{lstlisting}
+
+ \item 判别器的整体损失为:
+
+ \begin{equation}
+ {\rm L}_D={\rm L}_{Adv}(D;G)
+ \end{equation}
+
+ 类似于生成器,由于HiFiGAN拥有多个判别器,因此判别器的整体损失可以写作:
+
+ \begin{equation}
+ {\rm L}_D=\sum_{k=1}^K{\rm L}_{Adv}(D_k;G)
+ \end{equation}
+
+ 其中, $K$ 为多尺度判别器和多周期判别器的个数, $D_k$ 表示第 $k$ 个MPD和MSD的子判别器。
+
+ 对应的代码为:
+
+ \begin{lstlisting}
+ # MPD
+ y_df_hat_r, y_df_hat_g, _, _ = mpd(y, y_g_hat.detach())
+ loss_disc_f, losses_disc_f_r, losses_disc_f_g = discriminator_loss(y_df_hat_r, y_df_hat_g)
+
+ # MSD
+ y_ds_hat_r, y_ds_hat_g, _, _ = msd(y, y_g_hat.detach())
+ loss_disc_s, losses_disc_s_r, losses_disc_s_g = discriminator_loss(y_ds_hat_r, y_ds_hat_g)
+
+ loss_disc_all = loss_disc_s + loss_disc_f
+ \end{lstlisting}
+
+\end{enumerate}
+
+
+
+
+
+\chapter{语音合成知识结构}
+
+语音合成知识结构如下。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.9\textwidth]{text_to_speech_knowledge.png}
+ \caption{语音合成知识结构 \label{fig:text_to_speech_knowledge}}
+\end{figure}
+
+\section{基本组成}
+
+语音合成(Speech Synthesis)将文本转换为可听的声音信息,它赋予了像人一样说话的能力,是人机交互的重要接口。一般来说,语音合成的概念比文语转换(Text-to-Speech,TTS)的涵盖范围更广,语音合成包括TTS、歌唱合成等领域,但大多数情况下可以混用。\href{https://github.com/seungwonpark/awesome-tts-samples}{awesome-tts-samples}提供了一些端到端语音合成模型的样例,可以简单感受下目前语音合成的发展。
+
+人类可以通过一整套发音器官合成语音,具体来说,肺相当于动力源,喉相当于调制器,声道相当于滤波器,口唇相当于扩音器。研究人员提出了以源-滤波器(source-filter)模型为代表的多种模型建模该过程,语音中存在清音和浊音,分别由声带周期性振动对应的周期声源和声带不振动时紊乱气流对应的非周期声源产生。
+
+当代工业界主流语音合成系统包括文本前端和声学后端两个部分。文本前端将输入文本转换为层次化的语音学表征,主要包括文本规范化、韵律分析和文本转音素等模块。声学后端基于文本前端给出的层次化语言学表征(linguistics feature)来生成语音,主要技术路线包括单元挑选波形拼接、统计参数和端到端语音合成方法,当代主要采用端到端声学后端。端到端声学后端一般包括声学模型和声码器两部分,同时也出现了直接从音素映射为波形的完全端到端语音合成系统。声学模型负责将语言学特征转换为中间声学特征,比如梅尔频谱,直接决定合成语音的韵律;声码器将中间声学特征转换为语音波形,直接决定合成语音的音质。
+
+语音合成与语音识别、机器翻译等问题类似,本质是序列到序列的建模问题,另一方面,语音合成是生成类问题,因此自回归生成、VAE、GAN、Flow、扩散模型等生成模型在语音合成上均有应用。
+
+\section{声音转换}
+
+狭义上说,将一个说话人(source speaker)的语音转换到另一个目标说话人(target speaker)的语音,这种语音处理技术称之为声音转换(Voice Conversion,VC)。声音转换包括平行和非平行两种,平行语音转换指的是源、目标语音的内容相同,相对应地,非平行语音转换只改变语音的音色,而对语音内容没有要求。声音转换可以借鉴图像中风格转换的成果,比如StarGAN-VC等模型。更有效的方法是利用语音识别模型提取说话人无关的中间表征,将该中间表征和说话人信息输入生成模型中,生成具有目标说话人音色的语音,可以借鉴TTS的研究成果,将VITS等作为高质量合成模型。在声音转换中,基频是一个重要特征。参见:\href{https://arxiv.org/abs/2008.03648}{An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning}
+
+\section{多语种语音合成}
+
+多语种语音合成的难点主要有五点:
+
+\begin{enumerate}
+ \item 音库制作和构建。
+ \item 文本前端的构建。需要制定适用于一个语种语音合成的音素体系,构建该语种的文本规范化规则等,特别地,比如俄语、波斯语、阿拉伯语等语种有性数格的变化,提高了文本前端的复杂性。不同语种间文本前端模块也会有所不同,比如中泰越日等语种需要添加分词模块。
+ \item 语种中特殊发音现象。西班牙语、俄语等语种的升降调对合成语音自然度影响显著,具体来说,在标点处发音会产生较为明显的上扬、下降、先升后降、先降后升和平调现象。因此文本前端最好给出该升降调信息,声学后端需要将该升降调信息作为重要特征,输入到模型的多个模块中,以协助模型产生准确自然的升降调语音。与此同时,由于升降调是一个语块整体的表现,而非仅仅一个字母或者单词的发音变化,比如西班牙语可以将升降调信息标注到整个L3块上,而俄语更适合于仅仅标注到中心词上。
+ \item 跨语种语音合成。当代语种混杂的语言现象愈发明显,比如中文中夹杂英语单词,这就需要实现语种切换(code-switch)和跨语种(cross-lingual)语音合成。如果语料中存在单说话人跨语种语料,一般来说,直接训练就可以产生跨语种合成效果。实践中,如果跨语种语料较少,比如仅有200句跨语种语料,多个语种混训时共享语种间的音素能够获得更好的合成效果;如果跨语种语料较多,可以仅采用主要语种和跨语种语料进行训练,加入其它语种进行混训相反可能会产生较差的效果。如果没有跨语种语料,可以尝试数据增强方法伪造跨语种语料,比如对单语种语料进行拼接,构造跨语种语料;利用跨语种语音合成大模型伪造训练语料,训练跨语种语音合成模型。
+ \item 低资源语音合成。语料数量的增加可显著提升合成语音的效果\footnote{Latorre J, Bailleul C, Morrill T, et al. Combining Speakers of Multiple Languages to Improve Quality of Neural Voices[J]. arXiv preprint arXiv:2108.07737, 2021.},但世界上的语种数量较多,大部分语种并不存在大量高质量语音合成语料。主要的解决方案有跨语种迁移、跨说话人迁移、语音识别和合成对偶学习,以及无监督训练。参见\href{https://zhuanlan.zhihu.com/p/413274637}{论文速览:低资源语音合成}。
+\end{enumerate}
+
+\section{进阶}
+
+语音合成存在比较多的扩展应用,比如:
+
+\begin{enumerate}
+ \item 高表现力语音合成。
+ \item 个性化语音合成。
+ \item 情感合成和韵律迁移。
+ \item 方言迁移。
+ \item 歌唱合成。
+ \item 有声人脸合成(talking face synthesis)。
+ \item 语音合成的稳定性。
+ \item 语音合成的效率优化。
+\end{enumerate}
+
+本部分可参考相关论文和\href{https://arxiv.org/abs/2106.15561}{A Survey on Neural Speech Synthesis}了解具体技术方案。
+
+\subsection{高表现力语音合成}
+
+在交互、小说阅读等应用场景中,对合成语音的表现力要求较高,而表现力由内容、说话人音色、韵律、情感和风格等多个因素决定,因此高表现力语音合成实际涵盖了内容、音色、韵律、情感和风格的建模、分离和控制。
+
+语音中包含的信息可以分为如下四类:
+
+\begin{enumerate}
+ \item 字符或音素,也就是语音的内容。可以通过预训练词嵌入增强合成语音的表现力和质量,或者加入一些额外的信息,比如升降调信息、采用fulllab能够增强模型表现力和稳定性。fulllab及传统语音合成采用的文本、声学特征参见:\href{https://github.com/r9y9/jsut-lab}{jsut lab}、\href{https://github.com/feelins/HTS-Project/blob/master/data/README}{HTS Data README}。
+ \item 说话人或音色。多说话人语音合成模型可以通过说话人嵌入向量或单独的说话人编码器(speaker encoder)对音色特征进行建模。
+ \item 韵律、风格和情感。这些特征表示“如何说出文本”,表征语音中的语调、重音和说话节奏,韵律、风格和情感是高表现力语音合成的建模重点。
+ \item 录音设备和环境噪音。这些倒是与语音内容、韵律无关,但会显著影响语音质量,因此可以尝试对语音中的噪音等进行控制和分离。对训练语料本身可以提前进行去噪处理,在模型中可以标识带噪语料,以便在合成语音中去除噪音部分。
+\end{enumerate}
+
+利用模型建模这些信息的方法很多,有语种、说话人、风格嵌入向量以及音高、时长、能量编码器等显式建模方法,也有reference encoder、VAE、GAN/Flow/Diffusion、文本预训练等隐式建模方法。
+
+\subsection{个性化语音合成}
+
+个性化语音合成是语音合成中较为热门的方向,主要应用于定制化场景中,利用任意用户的音色合成语音,又称为语音自适应(Voice Adaptation)、语音克隆(Voice Cloning)、定制化语音(Custom Voice)等,通常要求利用1分钟以内甚至几秒钟的语料,就可以实现合成目标说话人的任意语音。目前个性化语音合成的难点如下:
+
+\begin{enumerate}
+ \item 相似度。仅利用少量语料,很难覆盖完全目标说话人一个语种的所有音素发音,因此要求模型需要拥有一定的泛化能力。实践中,利用目标语料微调整个模型或者声学模型的解码器往往能够大幅提升合成语音的相似度,也有一些工作尝试不进行微调,但相似度一般较低。
+ \item 稳定性。个性化语音合成在推断时,目标音色一般不在训练集中,因此会让原本脆弱的端到端后端模型合成失败,如果采用微调方案,则尤甚。因此一些带有先验的注意力机制,或者直接利用时长模型替代注意力机制的模型,在这种场景下拥有一定优势。
+ \item 微调效率。如上所述,整体或解码器微调往往能够提升相似度,但模型微调会带来一定的模型训练时间。
+\end{enumerate}
+
+\subsection{方言迁移}
+
+方言迁移一般是指跨方言迁移目标说话人的音色,比如利用普通话发音人说上海话、四川话或粤语,与说话人迁移有些类似,但任务难度比跨语种说话人迁移要简单一些。可以采用“多方言编码器+说话人梯度反转+共享解码器+VAE+多方言混训”的方案解决,也可以尝试类似声音转换的方案:利用语音识别声学模型提取说话人无关的发音内容,然后利用语音合成模型输入该说话人无关的发音内容特征,并加入目标音色,从而实现方言迁移。
+
+\subsection{歌唱合成}
+
+音乐是一个复杂的学科,而音乐合成几乎是另一个领域。
+
+旋律、和声、节奏是音乐的三要素。旋律是音乐的主线,它决定了音乐的调性、曲式和进程,是音乐的灵魂。但如果只有主旋律的话,音乐就显得单调。和声用来哄托主旋律,丰富乐曲的“厚度”,节奏强化风格。音乐的创作过程包括:作词作曲(Lyric/Melody),伴奏/谱曲,歌唱合成/乐音合成,混音四个基本步骤,而歌唱合成仅仅探讨第三步,利用已有的乐谱合成人类歌唱的声音。
+
+\begin{enumerate}
+ \item 歌唱合成的任务定义:
+ \begin{enumerate}
+ \item 输入:歌词、音高(基频)、节拍(时长)
+ \item 输出:歌唱声音
+ \end{enumerate}
+
+ \item 和TTS相比:
+ \begin{enumerate}
+ \item 增加了额外的输入:音高、节拍(时长),输出更广范围的声调,更多变化的音素
+ \item 更加侧重于感情和表达,而非语音本身的内容
+ \end{enumerate}
+
+ \item 困难点:
+ \begin{enumerate}
+ \item 数据
+ \begin{enumerate}
+ \item 数据量少
+ \item 质量要求高(歌唱与指定音高、时长的符合程度要求高),标注困难
+ \item 难以全面覆盖所有的音高,歌手的声音范围有限,无法覆盖所有的音高
+ \end{enumerate}
+
+ \item 容错率低
+ \begin{enumerate}
+ \item 音调准确率要求高,简谱基本决定了基频,先验比较强,“跑调”容易听出来
+ \item 卡拍子
+ \end{enumerate}
+
+ \item 歌唱额外的特点:比如颤音,转调等
+ \end{enumerate}
+\end{enumerate}
+
+歌唱合成实际和语音合成十分类似,只是文本输入信息更为丰富,因此可以引入单独的模块建模音高和时长,实际上语音合成中FastSpeech 2这些显式建模语音中音高、时长特征的声学模型,可以直接拿来作为歌唱合成的基线,当然也出现了更好的歌唱合成技术方案,参见\href{https://zhuanlan.zhihu.com/p/481137047}{歌唱合成:数据集的构建,以Opencpop为例}、\href{https://zhuanlan.zhihu.com/p/481154682}{歌唱合成:基于VITS的歌唱合成声学模型VISinger}、\href{https://zhuanlan.zhihu.com/p/481158408}{歌唱合成:高品质歌唱合成声码器SingGAN}、\href{https://github.com/microsoft/muzic}{muzic}等。
+
+\subsection{语音合成的稳定性}
+
+端到端语音合成自然度优势明显,但容易出现合成无法停止、调字、重复等合成缺陷,这在生产上是致命的。可以尝试从如下三个方面入手:
+
+\begin{enumerate}
+ \item 训练数据。训练语料中的音频尽量降低背景噪音;控制前后静音段和句中静音,每个句子的前后静音段尽可能一致,句中L1/L3的停顿时长尽可能裁剪统一;确保文本标注和实际音频一一对应。
+ \item 模型。合成语音的正确性是语音合成的基本要求,因此语音合成的稳定性有较多的研究工作。主要思路有:
+
+ \begin{enumerate}
+ \item 增强注意力机制。由于语音合成任务具有单调性的特点,也就是输入音素一定是从左到右合成,因此可以利用该特点加入先验知识进行合成。
+ \item 利用时长模型取代注意力机制。
+ \item 增强自回归过程。比如减少训练、推断时的不匹配,知识蒸馏,教师强制等方法。
+ \item 采用非自回归合成方法。输入序列进来之后一把出,防止自回归生成带来的累积误差。
+ \end{enumerate}
+
+ \item 后处理。比如统计音库中平均音素时长,合成时统计输入音素个数,计算该句子“平均时长”,合成语音的时长超过“平均时长”的30\%则认为合成没有正常停止,裁剪该合成语音。
+\end{enumerate}
+
+\subsection{语音合成的效率优化}
+
+语音合成在投入使用时,除了纯工程的优化之外,模型侧也可以进行效率优化。主要的思路有:
+
+\begin{enumerate}
+ \item 并行生成。该方法对于利用GPU推断的云端模型效果较好,但是对于CPU推断的端侧模型效果一般。
+ \item 轻量化模型。删除模型中不必要的模块,缩减网络节点数,进行模型裁剪、量化和剪枝。
+ \item 引入领域知识。利用沉淀已久的信号处理方法加速语音合成过程,比如线性预测、多子带建模、多帧并行预测、小尺度预测(subscale prediction)。
+\end{enumerate}
+
+
+
+
+
+\end{document}
diff --git a/text_to_speech.toc b/text_to_speech.toc
new file mode 100644
index 0000000..dc98071
--- /dev/null
+++ b/text_to_speech.toc
@@ -0,0 +1,307 @@
+\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {1}语音合成概述}{1}{chapter.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.1}背景和概述}{1}{section.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.1.1}背景介绍}{1}{subsection.1.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.1.2}语音合成概述}{1}{subsection.1.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.1.3}语音合成的历史}{1}{subsection.1.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.1.4}当代语音合成框架}{3}{subsection.1.1.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.2}Awesome List}{4}{section.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.3}参考书籍}{4}{section.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.4}语音相关的会议、期刊、比赛和公司}{4}{section.1.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.1}会议}{4}{subsection.1.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.2}期刊}{5}{subsection.1.4.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.3}最新论文}{5}{subsection.1.4.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.4}比赛}{5}{subsection.1.4.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.5}公司}{5}{subsection.1.4.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.4.6}微信公众号}{5}{subsection.1.4.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.5}开源资料}{6}{section.1.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.1}中文数据集}{6}{subsection.1.5.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.2}英文数据集}{6}{subsection.1.5.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.3}情感数据集}{7}{subsection.1.5.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.4}其它数据集}{7}{subsection.1.5.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.5}开源工具}{7}{subsection.1.5.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.5.6}开源项目}{7}{subsection.1.5.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.6}语音合成评价指标}{8}{section.1.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {1.7}平均意见得分的测评要求与方法}{9}{section.1.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.7.1}实验要求}{9}{subsection.1.7.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.7.2}实验方法}{9}{subsection.1.7.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.7.3}实验步骤}{9}{subsection.1.7.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.7.4}实验设计}{9}{subsection.1.7.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {1.7.5}实验数据处理}{10}{subsection.1.7.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {2}语音信号基础}{11}{chapter.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.1}参考资料}{11}{section.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.2}语音基本概念}{11}{section.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.1}能量}{11}{subsection.2.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.2}短时能量}{11}{subsection.2.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.3}声强和声强级}{11}{subsection.2.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.4}响度}{11}{subsection.2.2.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.5}过零率}{12}{subsection.2.2.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.6}共振峰}{12}{subsection.2.2.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.7}基频和基音周期}{12}{subsection.2.2.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.8}音高}{13}{subsection.2.2.8}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.2.9}MFCC和语谱图}{13}{subsection.2.2.9}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.3}语言学}{14}{section.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.3.1}国际音标简介}{15}{subsection.2.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.3.2}IPA的字母和发音}{15}{subsection.2.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.3.3}音系学}{17}{subsection.2.3.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.3.4}参考资料}{17}{subsection.2.3.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.4}音频格式}{18}{section.2.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.5}数字信号处理}{18}{section.2.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.5.1}模数转换}{18}{subsection.2.5.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.5.2}频谱泄露}{18}{subsection.2.5.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {2.5.3}频率分辨率}{18}{subsection.2.5.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {2.6}其它概念}{18}{section.2.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {3}语音特征提取}{20}{chapter.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.1}预处理}{20}{section.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.1.1}预加重}{20}{subsection.3.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.1.2}分帧}{20}{subsection.3.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.1.3}加窗}{20}{subsection.3.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.2}短时傅里叶变换}{21}{section.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.3}听觉特性}{22}{section.3.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.3.1}梅尔滤波}{22}{subsection.3.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.3.2}Bark滤波}{23}{subsection.3.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.4}倒谱分析}{23}{section.3.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.5}常见的声学特征}{24}{section.3.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.5.1}FBank}{24}{subsection.3.5.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.5.2}MFCC}{25}{subsection.3.5.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {3.6}具体操作}{25}{section.3.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.6.1}利用librosa读取音频}{25}{subsection.3.6.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.6.2}提取梅尔频谱}{26}{subsection.3.6.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {3.6.3}提取MFCC}{27}{subsection.3.6.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {4}音库制作和文本前端}{29}{chapter.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {4.1}音库制作}{29}{section.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.1}音库制作概述}{29}{subsection.4.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.2}发音人选型}{29}{subsection.4.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.3}录音文本收集}{29}{subsection.4.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.4}音频录制}{29}{subsection.4.1.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.5}语料整理}{30}{subsection.4.1.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.1.6}标注}{30}{subsection.4.1.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {4.2}文本前端}{31}{section.4.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.1}文本前端在语音合成中扮演的角色}{31}{subsection.4.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.2}文本前端的主要组成}{31}{subsection.4.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.3}Unicode调研和文本预处理}{31}{subsection.4.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.4}文本规范化}{32}{subsection.4.2.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.5}分词}{32}{subsection.4.2.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.6}文本转音素}{33}{subsection.4.2.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.7}韵律分析}{33}{subsection.4.2.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {4.2.8}文本前端的工程实现}{33}{subsection.4.2.8}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {4.3}总结}{34}{section.4.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {5}声学模型}{35}{chapter.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {5.1}Tacotron}{35}{section.5.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.1.1}Tacotron-2简介}{35}{subsection.5.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.1.2}声学特征建模网络}{36}{subsection.5.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.1.3}损失函数}{37}{subsection.5.1.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {5.2}FastSpeech}{37}{section.5.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.2.1}模型结构}{37}{subsection.5.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.2.2}损失函数}{42}{subsection.5.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.2.3}小结}{42}{subsection.5.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {5.3}VITS}{42}{section.5.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.1}模型整体结构}{43}{subsection.5.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.2}变分推断}{43}{subsection.5.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.3}对齐估计}{44}{subsection.5.3.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.4}对抗训练}{44}{subsection.5.3.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.5}总体损失}{45}{subsection.5.3.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {5.3.6}总结}{45}{subsection.5.3.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {6}声码器}{46}{chapter.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {6.1}Griffin-Lim声码器}{46}{section.6.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.1.1}算法原理}{46}{subsection.6.1.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.1.2}代码实现}{47}{subsection.6.1.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {6.2}STRAIGHT声码器}{47}{section.6.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.2.1}概述}{47}{subsection.6.2.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.2.2}特征提取}{48}{subsection.6.2.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.2.3}语音合成}{48}{subsection.6.2.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {6.3}WORLD声码器}{48}{section.6.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.1}声学特征}{48}{subsection.6.3.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.2}WORLD的分析功能}{48}{subsection.6.3.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.3}DIO算法提取基频F0}{49}{subsection.6.3.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.4}CheapTrick算法提取频谱包络SP}{50}{subsection.6.3.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.5}PLANTINUM提取非周期信号}{50}{subsection.6.3.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.6}WORLD的合成算法}{51}{subsection.6.3.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.3.7}使用示例}{51}{subsection.6.3.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {6.4}Neural Homomorphic Vocoder (NHV)}{52}{section.6.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.1}源滤波器合成原理}{52}{subsection.6.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.2}共振峰合成方法}{53}{subsection.6.4.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.3}NHV概述}{53}{subsection.6.4.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.4}整体结构}{53}{subsection.6.4.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.5}脉冲串生成器}{54}{subsection.6.4.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.6}神经网络滤波估计器(Neural Network Filter Estimator)}{54}{subsection.6.4.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.7}线性时变(LTV)滤波器和可训练的有限冲激响应(FIRs)}{55}{subsection.6.4.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.8}神经网络的训练}{56}{subsection.6.4.8}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.4.9}小结}{56}{subsection.6.4.9}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {6.5}HiFiGAN}{56}{section.6.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.1}HiFiGAN概述}{56}{subsection.6.5.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.2}HiFiGAN生成器简介}{56}{subsection.6.5.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.3}上采样结构}{57}{subsection.6.5.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.4}多感受野融合}{58}{subsection.6.5.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.5}HiFiGAN判别器简介}{60}{subsection.6.5.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.6}多尺度判别器}{60}{subsection.6.5.6}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.7}多周期判别器}{62}{subsection.6.5.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.8}损失函数简介}{63}{subsection.6.5.8}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.9}生成对抗损失}{63}{subsection.6.5.9}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.10}梅尔频谱损失}{64}{subsection.6.5.10}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.11}特征匹配损失}{65}{subsection.6.5.11}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {6.5.12}整体损失}{65}{subsection.6.5.12}%
+\defcounter {refsection}{0}\relax
+\contentsline {chapter}{\numberline {7}语音合成知识结构}{67}{chapter.7}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {7.1}基本组成}{67}{section.7.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {7.2}声音转换}{68}{section.7.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {7.3}多语种语音合成}{68}{section.7.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {section}{\numberline {7.4}进阶}{68}{section.7.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.1}高表现力语音合成}{69}{subsection.7.4.1}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.2}个性化语音合成}{69}{subsection.7.4.2}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.3}方言迁移}{69}{subsection.7.4.3}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.4}歌唱合成}{69}{subsection.7.4.4}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.5}语音合成的稳定性}{70}{subsection.7.4.5}%
+\defcounter {refsection}{0}\relax
+\contentsline {subsection}{\numberline {7.4.6}语音合成的效率优化}{70}{subsection.7.4.6}%