You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2020/11/01 02:04:22 UTC

[iotdb] 01/02: remove doller chars in markdown, add latex template for exporting docs to pdf

This is an automated email from the ASF dual-hosted git repository.

hxd pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit f25cbd1d5a1aea7ce38a868eb79ae4f2b871f40a
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Sat Oct 31 16:57:29 2020 +0800

    remove doller chars in markdown, add latex template for exporting docs to pdf
---
 docs/Development/ContributeGuide.md        |   2 +
 docs/UserGuide/Server/ServerFileList.md    |  38 +++---
 docs/zh/UserGuide/Server/ServerFileList.md |  38 +++---
 docs/zh/UserGuide/System Tools/NodeTool.md |  48 +++++++
 docs/zh/chinese-render-template.latex      | 201 +++++++++++++++++++++++++++++
 5 files changed, 289 insertions(+), 38 deletions(-)

diff --git a/docs/Development/ContributeGuide.md b/docs/Development/ContributeGuide.md
index 541d700..2d57c1f 100644
--- a/docs/Development/ContributeGuide.md
+++ b/docs/Development/ContributeGuide.md
@@ -80,6 +80,8 @@ Correspondence between versions and branches on the official website:
 Precautions:
 
 * Images in Markdown can be uploaded to https://github.com/thulab/iotdb/issues/543 for url
+* Do not use special Unicode chars, e.g., U+FF1A 
+* Do not use the character of dollar (as we will use Latex to generate pdf files)
 
 ## Contributing code
 
diff --git a/docs/UserGuide/Server/ServerFileList.md b/docs/UserGuide/Server/ServerFileList.md
index 30ac4f8..766f52e 100644
--- a/docs/UserGuide/Server/ServerFileList.md
+++ b/docs/UserGuide/Server/ServerFileList.md
@@ -62,32 +62,32 @@
 
 #### WAL
 > under directory basedir/wal
-1. ${StorageGroupName}-${TsFileName}/wal1
+1. {StorageGroupName}-{TsFileName}/wal1
     + every storage group has several wal files, and every memtable has one associated wal file before it is flushed into a TsFile 
 
 #### TsFile
-> under directory data/sequence or unsequence/${StorageGroupName}/${TimePartitionId}/
-1. ${time}-${version}-${mergeCnt}.tsfile
+> under directory data/sequence or unsequence/{StorageGroupName}/{TimePartitionId}/
+1. {time}-{version}-{mergeCnt}.tsfile
     + normal data file
-2. ${TsFileName}-${level}-${time}.vm
+2. {TsFileName}-{level}-{time}.vm
     + virtual merged TsFile
     + to optimize query performance, more details in https://issues.apache.org/jira/browse/IOTDB-706
-3. ${TsFileName}.tsfile.mod
+3. {TsFileName}.tsfile.mod
     + modification file
     + record delete operation
 
 #### TsFileResource
-1. ${TsFileName}.tsfile.resource
+1. {TsFileName}.tsfile.resource
     + descriptor and statistic file of a TsFile
-2. ${TsFileName}.tsfile.resource.temp
+2. {TsFileName}.tsfile.resource.temp
     + temp file
     + avoid damaging the tsfile.resource when updating it
-3. ${TsFileName}.tsfile.resource.closing
+3. {TsFileName}.tsfile.resource.closing
     + close flag file, to mark a tsfile closing so during restarts we can continue to close it or reopen it
 
 #### Version
-> under directory basedir/system/storage_groups/${StorageGroupName}/${TimePartitionId} or upgrade
-1. Version-${version}
+> under directory basedir/system/storage_groups/{StorageGroupName}/{TimePartitionId} or upgrade
+1. Version-{version}
     + version file, record the max version in fileName of a stroage group
 
 #### Upgrade
@@ -96,7 +96,7 @@
     + record which files have been upgraded
 
 #### Merge
-> under directory basedir/system/storage_groups/${StrorageGroup}/
+> under directory basedir/system/storage_groups/{StrorageGroup}/
 1. merge.mods
     + modification file generated during a merge
 2. merge.log
@@ -110,7 +110,7 @@
 
 #### CompressRatio
 > under directory basedir/system/compression_ration
-1. Ration-${compressionRatioSum}-${calTimes}
+1. Ration-{compressionRatioSum}-{calTimes}
     + record compression ratio of each tsfile
 
 ---
@@ -128,16 +128,16 @@
     + the identifier of the local node in a cluster
 2. partitions
     + partition table file, records the distribution of data
-3. ${time}_${random}.task
+3. {time}_{random}.task
     + pullSnapshotTask file, record the slots and owners. When a node joins a cluster,
     it will create pullSnapshotTask file to track which data to be pulled
-    + under directory basedir/raft/${nodeIdentifier}/snapshot_task/
+    + under directory basedir/raft/{nodeIdentifier}/snapshot_task/
 
 ## Raft Related Files
-> under directory basedir/system/raftLog/${nodeIdentifier}/
+> under directory basedir/system/raftLog/{nodeIdentifier}/
 
 ### Raft Log
-1. .data-${version}
+1. .data-{version}
     + raft committed logs, only save the latest 1000(configurable) committed logs
 
 ### Raft Meta
@@ -150,8 +150,8 @@
     + temp file, to avoid damaging the logMeta when updating it
 
 ### Raft Catch Up
-> under directory basedir/remote/${nodeIdentifier}/${storageGroupName}/${partitionNum}/
-1. ${fileName}.tsfile
+> under directory basedir/remote/{nodeIdentifier}/{storageGroupName}/{partitionNum}/
+1. {fileName}.tsfile
     + remote TsFile, will be loaded during snapshot installation
-2. ${fileName}.tsfile.mod
+2. {fileName}.tsfile.mod
     + remote TsFile modification file, will be loaded during snapshot installation
\ No newline at end of file
diff --git a/docs/zh/UserGuide/Server/ServerFileList.md b/docs/zh/UserGuide/Server/ServerFileList.md
index 89fe8af..7a4499d 100644
--- a/docs/zh/UserGuide/Server/ServerFileList.md
+++ b/docs/zh/UserGuide/Server/ServerFileList.md
@@ -62,29 +62,29 @@
 
 #### WAL
 > 在basedir/wal目录下
-1. ${StroageName}-${TsFileName}/wal1
+1. {StroageName}-{TsFileName}/wal1
     + 每个memtable会对应一个wal文件
 
 #### TsFile
-> 在basedir/data/sequence or unsequence/${StorageGroupName}/${TimePartitionId}/目录下
-1. ${time}-${version}-${mergeCnt}.tsfile
+> 在basedir/data/sequence or unsequence/{StorageGroupName}/{TimePartitionId}/目录下
+1. {time}-{version}-{mergeCnt}.tsfile
     + 数据文件
-2. ${TsFileName}-${level}-${time}.vm
+2. {TsFileName}-{level}-{time}.vm
     + 虚拟合并数据文件,用于优化查询,详细请看https://issues.apache.org/jira/browse/IOTDB-706
-3. ${TsFileName}.tsfile.mod
+3. {TsFileName}.tsfile.mod
     + 更新文件,主要记录删除操作
 
 #### TsFileResource
-1. ${TsFileName}.tsfile.resource
+1. {TsFileName}.tsfile.resource
     + TsFile的概要与索引文件
-2. ${TsFileName}.tsfile.resource.temp
+2. {TsFileName}.tsfile.resource.temp
     + 临时文件,用于避免更新tsfile.resource时损坏tsfile.resource
-3. ${TsFileName}.tsfile.resource.closing
+3. {TsFileName}.tsfile.resource.closing
     + 关闭标记文件,用于标记TsFile处于关闭状态,重启后可以据此选择是关闭或继续写入该文件
 
 #### Version
-> 在basedir/system/storage_groups/${StorageGroupName}/${TimePartitionId} or upgrade目录下
-1. Version-${version}
+> 在basedir/system/storage_groups/{StorageGroupName}/{TimePartitionId} or upgrade目录下
+1. Version-{version}
     + 版本号文件,使用文件名来记录当前最大的版本号
 
 #### Upgrade
@@ -93,7 +93,7 @@
     + 记录升级进度
 
 #### Merge
-> 在basedir/system/storage_groups/${StrorageGroup}/目录下
+> 在basedir/system/storage_groups/{StrorageGroup}/目录下
 1. merge.mods
     + 记录合并过程中发生的删除等操作
 2. merge.log
@@ -107,7 +107,7 @@
 
 #### CompressRatio
 > 在basedir/system/compression_ration目录下
-1. Ration-${compressionRatioSum}-${calTimes}
+1. Ration-{compressionRatioSum}-{calTimes}
     + 记录每个文件的压缩率
 
 ---
@@ -125,15 +125,15 @@
     + 本地节点在集群中的唯一标识
 2. partitions
     + 分区表文件,记录数据分布信息
-3. ${time}_${random}.task
+3. {time}_{random}.task
     + pullSnapshotTask文件,记录的是slot和owner,当一个节点加入集群时,会创建这个文件来跟踪数据拉取情况
-    + 在basedir/raft/${nodeIdentifier}/snapshot_task/目录下
+    + 在basedir/raft/{nodeIdentifier}/snapshot_task/目录下
 
 ## Raft相关文件
-> 在basedir/system/raftLog/${nodeIdentifier}/目录下
+> 在basedir/system/raftLog/{nodeIdentifier}/目录下
 
 ### Raft Log
-1. .data-${version}
+1. .data-{version}
     + raft committed log, 默认只保留最新的1000条日志
 
 ### Raft Meta
@@ -146,8 +146,8 @@
     + 临时文件,用于更新logMeta时防止损坏旧的logMeta文件
 
 ### Raft Catch Up
-> 在basedir/remote/${nodeIdentifier}/${storageGroupName}/${partitionNum}/目录下
-1. ${fileName}.tsfile
+> 在basedir/remote/{nodeIdentifier}/{storageGroupName}/{partitionNum}/目录下
+1. {fileName}.tsfile
     + 远程TsFile,拉取完毕会load进对应的存储组数据目录下
-2. ${fileName}.tsfile.mod
+2. {fileName}.tsfile.mod
     + 远程更新文件TsFile.mod,拉取完毕会load进对应的存储组数据目录下
\ No newline at end of file
diff --git a/docs/zh/UserGuide/System Tools/NodeTool.md b/docs/zh/UserGuide/System Tools/NodeTool.md
index ab8e730..a29719c 100644
--- a/docs/zh/UserGuide/System Tools/NodeTool.md	
+++ b/docs/zh/UserGuide/System Tools/NodeTool.md	
@@ -20,11 +20,15 @@
 -->
 
 # 工具介绍
+
 IoTDB集群版为您提供了NodeTool Shell工具用于监控指定集群的工作状态,您可以通过运行多种指令获取集群各项状态。
 
 下面具体介绍每个指令的使用方式及示例,其中$IOTDB_CLUSTER_HOME表示IoTDB分布式的安装目录所在路径。
+
 # 使用说明
+
 ## 运行方式
+
 NodeTool Shell工具启动脚本位于$IOTDB_CLUSTER_HOME/bin文件夹下,启动时可以指定集群运行的IP和PORT。
 
 其中IP为您期望连接的节点的IP,PORT为IoTDB集群启动时指定的JMX服务端口号,分别默认为127.0.0.1和31999。
@@ -32,11 +36,15 @@ NodeTool Shell工具启动脚本位于$IOTDB_CLUSTER_HOME/bin文件夹下,启
 如果您需要监控远程集群或修改了JMX服务端口号,请通过启动参数-h和-p项来使用实际的IP和PORT。
 
 ## 指令说明
+
 在分布式系统中,一个节点由节点IP,元数据端口和数据端口来标识,即Node\<IP:METAPORT:DATAPORT>。
+
 ### 展示节点环
+
 IoTDB集群版采用一致性哈希的方式实现数据分布,用户可以通过打印哈希环信息了解每个节点在环中的位置。
 
 1.输入
+
 > 打印哈希环的指令为ring
 
 2.输出
@@ -71,6 +79,7 @@ Node Identifier                                 Node
 上述输出表示当前集群共有3个节点,按照节点标识从小到大输出结果。
 
 ### 查询数据分区和元数据分区
+
 IoTDB集群版的时间序列元数据按照存储组分给多个数据组,其中存储组和数据组为多对一的关系,
 即同一个存储组的时间序列元数据只存在于同一个数据组,一个数据组可能包含多个存储组的时间序列元数据;
 
@@ -81,6 +90,7 @@ IoTDB集群版的时间序列元数据按照存储组分给多个数据组,其
 通过该指令,用户可以获知某个路径下的元数据或数据具体存储在哪些节点下。
 
 1.输入
+
 > 查询数据分区信息的指令为partition,参数具体说明如下:
 
 |参数名|参数说明|示例|
@@ -104,14 +114,18 @@ IoTDB集群版的时间序列元数据按照存储组分给多个数据组,其
 不同系统的输入指令示例如下:
 
 Linux系统与MacOS系统:
+
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1
 ```
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 DATA<root.guangzhou.d1, 1576723735188, 1576723735188>	->	[127.0.0.1:9003:40010, 127.0.0.1:9004:40011]
 ```
@@ -121,14 +135,19 @@ DATA<root.guangzhou.d1, 1576723735188, 1576723735188>	->	[127.0.0.1:9003:40010,
 不同系统的输入指令示例如下:
 
 Linux系统与MacOS系统:
+
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1 -st 1576624778159 -et 1576724778159
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1 -st 1576624778159 -et 1576724778159
 ```
+
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 DATA<root.guangzhou.d1, 1576627200000, 1576713599999>	->	[127.0.0.1:9005:40012, 127.0.0.1:9003:40010] 
 DATA<root.guangzhou.d1, 1576713600000, 1576724778159>	->	[127.0.0.1:9003:40010, 127.0.0.1:9004:40011] 
@@ -140,23 +159,32 @@ DATA<root.guangzhou.d1, 1576624778159, 1576627199999>	->	[127.0.0.1:9004:40011,
 不同系统的输入指令示例如下:
 
 Linux系统与MacOS系统:
+
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1 -m
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 partition -path root.guangzhou.d1 -m
 ```
+
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 DATA<root.guangzhou.d1, 1576723735188, 1576723735188>	->	[127.0.0.1:9003:40010, 127.0.0.1:9004:40011]
 ```
+
 上述输出表示root.t1.d1所属的数据分区包含2个节点,其中127.0.0.1:9003:40010为header节点。
 
 
 ### 查询节点管理的槽数
+
 IoTDB集群版将哈希环划分为固定数量(默认10000)个槽,并由集群管理组(元数据组)的leader将槽划分各个数据组。通过该指令,用户可以获知数据组管理的槽数。
+
 1. 输入
+
 > 查询节点对应数据分区信息的指令为host,参数具体说明如下:
 
 |参数名|参数说明|示例|
@@ -180,29 +208,39 @@ Linux系统与MacOS系统:
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 host
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 host
 ```
+
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 Raft group                                                 Slot Number
 (127.0.0.1:9003:40010, 127.0.0.1:9004:40011)      ->                3333
 (127.0.0.1:9005:40012, 127.0.0.1:9003:40010)      ->                3334
 ```
+
 + 所有分区
 
 不同系统的输入指令示例如下:
 
 Linux系统与MacOS系统:
+
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 host -a
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 host -a
 ```
+
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 Raft group                                                 Slot Number
 (127.0.0.1:9003:40010, 127.0.0.1:9004:40011)      ->                3333
@@ -211,31 +249,40 @@ Raft group                                                 Slot Number
 ```
 
 ### 查询节点状态
+
 IoTDB集群版包含多个节点,对于任意节点都存在因为网络、硬件等问题导致无法正常提供服务的可能。
 
 通过该指令,用户即可获知集群中所有节点当前的状态。
 
 1.输入
+
 > 查询节点状态的指令为status,无其他参数。
 
 2.输出
+
 > 输出为多行字符串,其中每行字符串为一个键值对,其中键表示节点(IP:METAPORT:DATAPORT),
 > 值表示该节点的状态,“on”为正常,“off”为不正常,格式为\<key -> value>。
 
 3.示例
+
 > 假设当前集群运行在127.0.0.1:9003:40010, 127.0.0.1:9004:40011和127.0.0.1:9005:40012三个节点上, 副本数为2。
 
 不同系统的输入指令示例如下:
 
 Linux系统与MacOS系统:
+
 ```
 Shell > ./bin/nodetool.sh -h 127.0.0.1 -p 31999 status
 ```
+
 Windows系统:
+
 ```
 Shell > .\bin\nodetool.bat -h 127.0.0.1 -p 31999 status
 ```
+
 回车后即可执行指令。示例指令的输出如下:
+
 ```
 Node                                Status 
 127.0.0.1:9003:40010          ->        on 
@@ -243,4 +290,5 @@ Node                                Status
 127.0.0.1:9004:40011          ->        on
 
 ```
+
 上述输出表示127.0.0.1:9003:40010节点和127.0.0.1:9004:40011节点状态正常,127.0.0.1:9005:40012节点无法提供服务。
diff --git a/docs/zh/chinese-render-template.latex b/docs/zh/chinese-render-template.latex
new file mode 100644
index 0000000..b98dc03
--- /dev/null
+++ b/docs/zh/chinese-render-template.latex
@@ -0,0 +1,201 @@
+\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}
+\def\tightlist{}
+\usepackage{booktabs}
+\usepackage{geometry} 		% 設定邊界
+\geometry{
+  top=1in,
+  inner=1in,
+  outer=1in,
+  bottom=1in,
+  headheight=3ex,
+  headsep=2ex
+}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\usepackage{fixltx2e} % provides \textsubscript
+% use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+  \usepackage[utf8]{inputenc}
+$if(euro)$
+  \usepackage{eurosym}
+$endif$
+\else % if luatex or xelatex
+  \usepackage{fontspec} 	% 允許設定字體
+  \usepackage{xeCJK} 		% 分開設置中英文字型
+  \setCJKmainfont{PingFang SC} 	% 設定中文字型
+  \setmainfont{Georgia} 	% 設定英文字型
+  \setromanfont{Georgia} 	% 字型
+  \setmonofont{Courier New}
+  \linespread{1.2}\selectfont 	% 行距
+  \XeTeXlinebreaklocale "zh" 	% 針對中文自動換行
+  \XeTeXlinebreakskip = 0pt plus 1pt % 字與字之間加入0pt至1pt的間距,確保左右對整齊
+  \parindent 0em 		% 段落縮進
+  \setlength{\parskip}{20pt} 	% 段落之間的距離
+  \ifxetex
+    \usepackage{xltxtra,xunicode}
+  \fi
+  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
+  \newcommand{\euro}{€}
+$if(mainfont)$
+    \setmainfont{$mainfont$}
+$endif$
+$if(sansfont)$
+    \setsansfont{$sansfont$}
+$endif$
+$if(monofont)$
+    \setmonofont{$monofont$}
+$endif$
+$if(mathfont)$
+    \setmathfont{$mathfont$}
+$endif$
+\fi
+% use microtype if available
+\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
+$if(geometry)$
+\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
+$endif$
+$if(natbib)$
+\usepackage{natbib}
+\bibliographystyle{plainnat}
+$endif$
+$if(biblatex)$
+\usepackage{biblatex}
+$if(biblio-files)$
+\bibliography{$biblio-files$}
+$endif$
+$endif$
+$if(listings)$
+\usepackage{listings}
+$endif$
+$if(lhs)$
+\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
+$endif$
+$if(highlighting-macros)$
+$highlighting-macros$
+$endif$
+$if(verbatim-in-note)$
+\usepackage{fancyvrb}
+$endif$
+$if(tables)$
+\usepackage{longtable}
+$endif$
+$if(graphics)$
+\usepackage{graphicx}
+% We will generate all images so they have a width \maxwidth. This means
+% that they will get their normal width if they fit onto the page, but
+% are scaled down if they would overflow the margins.
+\makeatletter
+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
+\else\Gin@nat@width\fi}
+\makeatother
+\let\Oldincludegraphics\includegraphics
+\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}
+$endif$
+\ifxetex
+  \usepackage[setpagesize=false, % page size defined by xetex
+              unicode=false, % unicode breaks when used with xetex
+              xetex]{hyperref}
+\else
+  \usepackage[unicode=true]{hyperref}
+\fi
+\hypersetup{breaklinks=true,
+            bookmarks=true,
+            pdfauthor={$author-meta$},
+            pdftitle={$title-meta$},
+            colorlinks=true,
+            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
+            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
+            pdfborder={0 0 0}}
+\urlstyle{same}  % don't use monospace font for urls
+$if(links-as-notes)$
+% Make links footnotes instead of hotlinks:
+\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
+$endif$
+$if(strikeout)$
+\usepackage[normalem]{ulem}
+% avoid problems with \sout in headers with hyperref:
+\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
+$endif$
+\setlength{\parindent}{0pt}
+%\setlength{\parskip}{6pt plus 2pt minus 1pt}
+\setlength{\emergencystretch}{3em}  % prevent overfull lines
+
+\title{\huge 在OSX平台上的XeLaTeX中文測試} % 設置標題,使用巨大字體
+\author{FoolEgg.com} 		% 設置作者
+\date{February 2013} 		% 設置日期
+\usepackage{titling}
+\setlength{\droptitle}{-8em} 	% 將標題移動至頁面的上面
+
+\usepackage{fancyhdr}
+\usepackage{lastpage}
+\pagestyle{fancyplain}
+
+$if(numbersections)$
+\setcounter{secnumdepth}{5}
+$else$
+\setcounter{secnumdepth}{0}
+$endif$
+$if(verbatim-in-note)$
+\VerbatimFootnotes % allows verbatim text in footnotes
+$endif$
+$if(lang)$
+\ifxetex
+  \usepackage{polyglossia}
+  \setmainlanguage{$mainlang$}
+\else
+  \usepackage[$lang$]{babel}
+\fi
+$endif$
+$for(header-includes)$
+$header-includes$
+$endfor$
+
+$if(title)$
+\title{$title$}
+$endif$
+\author{$for(author)$$author$$sep$ \and $endfor$}
+\date{$date$}
+
+\begin{document}
+$if(title)$
+\maketitle
+$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+$if(toc)$
+{
+\hypersetup{linkcolor=black}
+\setcounter{tocdepth}{$toc-depth$}
+\tableofcontents
+}
+$endif$
+$body$
+
+$if(natbib)$
+$if(biblio-files)$
+$if(biblio-title)$
+$if(book-class)$
+\renewcommand\bibname{$biblio-title$}
+$else$
+\renewcommand\refname{$biblio-title$}
+$endif$
+$endif$
+\bibliography{$biblio-files$}
+
+$endif$
+$endif$
+$if(biblatex)$
+\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
+
+$endif$
+$for(include-after)$
+$include-after$
+
+$endfor$
+\end{document}