努力地往前飞,再累也无所谓
这是一个tikz绘制的图形,取自tikzexample
1 | \documentclass[border=10pt,tikz]{standalone} |
最近可能是吃饱了没事做,看着一本张宇张宇线性代数9讲,萌生了一种想法,我给他重排一份?算了,战线可能无限期拉长。不过,折腾了一番,总算有所收获,大体上定制出了一份LaTeX的格式,当然,有部分格式并不与原书一致。在这里,实现了同一章节的习题与答案之间的交叉引用,带超链接的那种,不过并没有用我博客/知乎上的方法,感觉直接这么搞起来更容易一点。然后呢,绘制了一个封面,还是比较人模狗样的。至于目录的话,大家可以选择直接用\tableofcontents
输出,也可以用我放在正文中的tcolorbox
定制的环境输出。为了实现一些方正书版的输出格式,我也是费了不少力气。把封面以及第二章的代码分享给大家,算是自己做的第一个模板吧
1 | \documentclass[openany]{ctexbook} |
这是我把SSMA
杂志合并以后的pdf
School Science and Mathematics Association 数学杂志
在LaTeX中,有很多中文的数学符号都是没有的,所以有必要进行特殊定制,首先我们来看一些常见的数学符号的定制,这里直接引用前人已经借助tikz
包定制过的符号1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76\usepackage{tikz}
%平行
\newcommand\pxx{%
\mathrel{\tikz[baseline] \draw (0em,-0.3ex) -- (.4em,1.7ex) (.2em,-0.3ex) -- (.6em,1.7ex);%
}}
%平行且等于
\newcommand*\pxqdy{%
\mathrel{\tikz[baseline]
\draw (.1em,0ex) -- (.9em,0ex)
(.1em,-.25ex) -- (.9em,-.25ex)
(.375em,.1ex) -- (.675em,1.5ex)
(.525em,.1ex) -- (.825em,1.5ex);%
}}
%新的平行且等于
\newcommand*\pxdy{%
\mathrel{\tikz[baseline]
\draw (.1em,0ex) -- (.9em,0ex)
(.1em,.3ex) -- (.9em,.3ex)
(.375em,.4ex) -- (.675em,1.8ex)
(.55em,.4ex) -- (.85em,1.8ex);}%
}
%相似
\newcommand*\xiangs{%
\mathrel{%
\tikz \draw[baseline] (-.25em,1.15ex) .. controls (-.55em,1.15ex) and (-.51em,.23ex) .. (-.275em,.23ex) .. controls (0,.23ex) and (0,1.15ex) .. (.275em,1.15ex) .. controls (.51em,1.15ex) and (.55em,.23ex) .. (.25em,.23ex);%
}}
%全等
\newcommand*\quand{%
\mathrel{%
\tikz \draw[baseline] (-.2em,1.35ex) .. controls (-.46em,1.6ex) and (-.54em,.65ex) .. (-.25em,.65ex) .. controls (-.06em,.65ex) and (.06em,1.35ex) .. (.25em,1.35ex) .. controls (.54em,1.35ex) and (.46em,.4ex) .. (.2em,.65ex) (-.46em,.4ex) -- (.46em,.4ex) (-.46em,0ex) -- (.46em,0ex);%
}}
%中文真子集
\newcommand*\zhziji{%
\mathrel{\tikz
\draw[baseline] (.6636em,1.57ex) -- (.192em,1.57ex) arc (90:270:0.4022ex) -- (.6636em,.7674ex) (0,.2558ex) -- (.6636em,.2558ex) (0,.5116ex) -- (.6636em,.5116ex) (.2323em,0ex) -- (.4313em,.7674ex);%
}%
}
%中文子集
\newcommand*\ziji{%
\mathrel{\raisebox{.15ex}{\tikz
\draw[baseline] (.6636em,1.57ex) -- (.20235em,1.57ex) arc (90:270:0.4797ex) -- (.6636em,.61ex) (0,.305ex) -- (.6636em,.305ex);%
}}%
}
%中文反向子集
\newcommand*\zijif{%
\mathrel{\raisebox{.15ex}{\tikz
\draw[baseline] (-.6636em,1.57ex) -- (-.20235em,1.57ex) arc (90:-90:0.4797ex) -- (-.6636em,.61ex) (-.6636em,.305ex) -- (0,.305ex);%
}}%
}
%中文反向真子集
\newcommand*\zhzijif{%
\mathrel{\tikz
\draw[baseline] (-.6636em,1.57ex) -- (-.192em,1.57ex) arc (90:-90:0.4022ex) -- (-.6636em,.7674ex) (0,.2558ex) -- (-.6636em,.2558ex) (0,.5116ex) -- (-.6636em,.5116ex) (-.4313em,0ex) -- (-.2323em,.7674ex);%
}%
}
%平行四边形
\newcommand*\Pxsbx[1][1]{%
\mathord{%
\tikz[baseline,scale=#1]
\draw (0,.1ex) -- (.8em,.1ex) -- (1em,1.4ex) -- (.2em,1.4ex) -- cycle;}}
\newcommand*\pxsbx{
\mathchoice{\Pxsbx}{\Pxsbx}{\Pxsbx[0.6]}{\Pxsbx[0.4]}
}
% 圆符号的重新定制
\newcommand*\Odot[1][1.1]{
\mathord{%
\tikz[baseline,scale=#1]
{\draw(0,0.32em) circle(0.35em);
\fill(0,0.32em) circle(0.7pt);}
}
}
\renewcommand*\odot{
\mathchoice{\Odot}{\Odot}{\Odot[0.7]}{\Odot[0.7]}
}
这些符号是非常常见的中文数学符号,尤其是在高中阶段用处颇多,除此之外还有很多数学的音符,我们也用tikz
绘制一些数学音符,虽然有些音符在某些字体宏包中也有定义,但是引入宏包的后果就是会改变其他数学符号的字体,当然,如果你会提取宏包中某个特定符号的定义也行,这里统一给出tikz
的方法。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
%%圆弧
\def\wideparen#1{\mathord{
\begin{tikzpicture}
\node[inner sep=0pt] (a) {$#1$};
\fill (a.north west)[bend left=25]to(a.north east)
[bend right=33]to(a.north west);
\end{tikzpicture}
}
}
%%带箭头的弧
\def\xwideparen#1{\mathord{
\begin{tikzpicture}
\node[inner sep=0pt] (a) {$#1$};
\fill (a.north west)[bend left=25]to(a.north east)
[bend right=33]to(a.north west);
\draw[line width=0pt,-{Stealth[width=1.8pt]}](a.north west)[bend left=29]to(a.north east);
\end{tikzpicture}
}
}
%%集合的势,顶部双横线,
\def\xbar#1{\mathord{
\begin{tikzpicture}
\node[inner sep=0pt](a){$#1$};
\draw([shift={(0.2ex,0.2ex)}]a.north west)--
([shift={(-0.2ex,0.2ex)}]a.north east);
\draw([shift={(0.2ex,0.5ex)}]a.north west)--
([shift={(-0.2ex,0.5ex)}]a.north east);
\end{tikzpicture}
}
}
%%带箭头的帽子
\def\xhat#1{\mathord{
\begin{tikzpicture}
\node[inner sep=0pt](a){$#1$};
\draw[{Stealth[width=0.4ex,length=0.5ex]}-{Stealth[width=0.4ex,length=0.5ex]}]
([shift={(0.6ex,0.2ex)}]a.north west)--++(0,1ex)--([shift={(-0.6ex,1.2ex)}]a.north east)--++(0,-1ex);
\end{tikzpicture}
}
}
\begin{document}
\[\wideparen{ABC}\xbar{A}\xwideparen{AB}\xhat{ABC}\]
\end{document}
用类似的方法,大家也可以自定义出许多自己所需要的符号,这里就不再赘述。
很多人在投稿杂志的时候经常碰到杂志所给的论文模板书双栏的,双栏模板有个比较麻烦的问题就是公式一般不能写的太长,否则就会跨栏使得文字互相覆盖,比如下面的爱思唯尔官方模板中的公式就出现了这样的问题.
但是有时候确实不得不插入比较长的公式,所以试图在双栏模板下插入通栏公式.
带星号的浮动体figure*
和table*
环境可以在双栏模板中使用,例如我们以IEEEtran为例,插入通栏公式1
2
3
4
5
6
7
8
9
10
11
12\documentclass{IEEEtran}
\usepackage{amsmath,lipsum}
\begin{document}
\lipsum[1]
\begin{figure*}
\begin{align}
a&=b+c=b+c=b+c=b+c=b+c=b+c\\
&=b+c=b+c=b+c=b+c=b+c=b+c
\end{align}
\end{figure*}
\lipsum[1-10]
\end{document}
可以发现,这样确实实现了公式的通栏,但是这个带星号的浮动体只会出现在下一页的顶部,无法出现在当前位置,所以会使得公式的顺序紊乱,如果手动将公式提前,使得它出现在当前页的顶部,会使得公式的编号紊乱,需要手动更改计数器equation
的值,这样并不是一个最好的方法.
cuted
包提供的strip
环境cuted
包可以说是完全解决了一个这样的问题,把公式环境用strip
环境包裹,可以直接在当前位置插入通栏公式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20\documentclass{IEEEtran}
\usepackage{amsmath,lipsum}
\usepackage{cuted}%%\stripsep-3pt
\begin{document}
\lipsum[1-2]
\begin{strip}
\begin{align}
a&=b+c=b+c=b+c=b+c=b+c=b+c\\
&=b+c=b+c=b+c=b+c=b+c=b+c
\end{align}
\end{strip}
\lipsum[1]
\begin{strip}
\begin{align}
a&=b+c=b+c=b+c=b+c=b+c=b+c\\
&=b+c=b+c=b+c=b+c=b+c=b+c
\end{align}
\end{strip}
\lipsum[1-2]
\end{document}
效果如下
不过大家发现这里的公式上下似乎出现了不小的间距,小问题,在我的代码中有一个带注释的命令\stripsep
,这个命令就是strip
环境的前后弹性粘连(间距),它的默认值为15pt plus 2pt minus 2pt
,可以更改它的值来改变这个间距.例如这里的\stripsep-3pt
或者\stripsep=-3pt
将使得strip
环境的前后间距设置为-3pt
,不过我们还是建议大家将这个间距设置为弹性距离,方便在换页时候的排版,例如\stripsep -3pt plus 3pt minus 2pt
.这样的话,cuted
包就彻底解决了双栏模板的通栏公式问题.
对于一些强迫症患者,不仅希望公式当前位置,甚至也希望图表也在当前位置。原则上图表用figure*
和table*
环境可以使得图表在双栏模板下浮动到下一页的顶部,然后实现交叉引用即可,但是如果借助cuted
包也可以实现将图表放在当前位置。在这里首先要注意的问题是,strip
环境其实相当于是一个盒子,浮动体是不能放在限制浮动的盒子里面的,因此第一个想法是用float
包,然后\begin{figure}[H]
放在strip
环境中取消figure
环境的浮动,但是这么做之后得到的效果并不理想,甚至也可以说是失败。一番尝试以后,我找到了另一个方法,就是加载caption
宏包,不用figure
环境而直接使用\captionof
命令。下面的mwe
经过调试大家就知道了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22\documentclass[twocolumn]{ctexart}
\usepackage{lipsum,mwe,cuted}
\usepackage{float}%%%%提供浮动体的[H]选项,进而取消浮动
\usepackage{caption}%%提供\captionof命令
\stripsep-2pt
\begin{document}
\lipsum[1]
\begin{strip}
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{example-image}
\caption{跨栏不理想}
\end{figure}
\end{strip}
\begin{strip}
\centering\includegraphics[width=0.3\textwidth]{example-image}
\captionof{figure}{跨栏插图成功}
\end{strip}
\lipsum[1-2]
\end{document}
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true