在学术论文、技术文档或数学教材的排版中,经常需要在正文行内插入带有边角标注的几何图形。传统方案往往需要借助外部绘图工具生成图片再导入,不仅流程繁琐,更会导致文字与图形对齐失调、风格不一致等问题。而使用Latex原生绘图命令直接嵌入行内,能够实现:
这个方案特别适合需要频繁修改的论文草稿、习题解答等场景。以三角形为例,我们将实现两种典型标注形式:
Latex中实现行内绘图主要有三种方案:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| TikZ | 功能最全,标注控制精细 | 语法较复杂,编译速度慢 | 复杂图形 |
| pict2e | 轻量级,编译快 | 功能有限,标注支持弱 | 简单几何图形 |
| 本文方案(TikZ+overpic) | 平衡功能与效率 | 需要组合使用 | 行内标注图形 |
我们选择TikZ作为核心绘图引擎,配合\tikzmarknode实现精确定位。虽然pict2e更轻量,但其标注功能无法满足边角同时标记的需求。
在文档导言区添加:
latex复制\usepackage{tikz}
\usetikzlibrary{calc, shapes.geometric}
\usepackage{tikzmark}
\usepackage{amsmath} % 用于数学符号支持
关键库说明:
calc:支持坐标计算,用于精确标注位置shapes.geometric:提供预定义的三角形等形状tikzmark:实现行内元素的精确定位采用相对坐标系统便于调整大小:
latex复制\newcommand{\trianglePoints}{(0,0) -- (1.5,0) -- (60:1.5) -- cycle}
这里使用极坐标(60:1.5)表示60度方向长度1.5cm的顶点,可根据需要调整角度和边长比例。
最小实现代码:
latex复制\begin{tikzpicture}[baseline=-0.5ex, scale=0.5]
\draw \trianglePoints;
\end{tikzpicture}
关键参数说明:
baseline=-0.5ex:调整图形垂直对齐位置scale=0.5:控制图形整体缩放比例通过let操作计算实际边长:
latex复制\draw let \p1=($(1.5,0)-(0,0)$),
\n1={veclen(\x1,\y1)} in
\trianglePoints
node[midway, below] {\scriptsize\n1 cm};
技术细节:
($...$):使用calc库的坐标计算语法veclen():计算两点间欧式距离\scriptsize:保持标注与正文字号比例协调完整三边标注示例:
latex复制\begin{tikzpicture}[baseline=-0.5ex, scale=0.5]
\draw let \p1=($(1.5,0)-(0,0)$),
\p2=($(60:1.5)-(1.5,0)$),
\p3=($(0,0)-(60:1.5)$),
\n1={veclen(\x1,\y1)},
\n2={veclen(\x2,\y2)},
\n3={veclen(\x3,\y3)} in
\trianglePoints
node[midway, below] {\scriptsize\n1}
node[midway, right] {\scriptsize\n2}
node[midway, left] {\scriptsize\n3};
\end{tikzpicture}
注意事项:边长标注建议使用相同单位(全用cm或全用无单位数值),避免混用造成歧义。
使用angle库实现专业角度标记:
latex复制\usetikzlibrary{angles}
\begin{tikzpicture}[baseline=-0.5ex, scale=0.5]
\draw \trianglePoints;
\pic [draw, angle radius=4mm] {angle = (1.5,0)--(0,0)--(60:1.5)};
\end{tikzpicture}
参数说明:
angle radius:控制弧线半径结合node添加度数文本:
latex复制\pic [draw, angle radius=5mm,
pic text=$\alpha$, pic text options={yshift=1mm}]
{angle = (1.5,0)--(0,0)--(60:1.5)};
高级技巧:
pic text options微调文本位置\alpha、\beta等变量形式60^\circ格式添加组合边长与角度标注:
latex复制\begin{tikzpicture}[baseline=-0.5ex, scale=0.5]
% 绘制三角形
\draw \trianglePoints;
% 边长标注
\node at ($(0,0)!0.5!(1.5,0)+(0,-0.1)$) {\scriptsize$a$};
\node at ($(1.5,0)!0.5!(60:1.5)+(0.1,0.1)$) {\scriptsize$b$};
\node at ($(60:1.5)!0.5!(0,0)+(-0.1,0.1)$) {\scriptsize$c$};
% 角度标注
\pic [draw, angle radius=3mm, pic text=$\alpha$]
{angle = (1.5,0)--(0,0)--(60:1.5)};
\pic [draw, angle radius=3mm, pic text=$\beta$]
{angle = (0,0)--(60:1.5)--(1.5,0)};
\end{tikzpicture}
通过tikzset统一标注风格:
latex复制\tikzset{
myangle/.style = {
draw, angle radius=4mm,
pic text options={font=\footnotesize, inner sep=1pt}
},
myside/.style = {
font=\footnotesize,
inner sep=1pt,
fill=white % 白底避免遮挡线条
}
}
当边角标注密集时,可通过以下方式优化:
latex复制node[pos=0.5, above left=1mm and 2mm]
fill=white给文本添加白底:latex复制node[... , fill=white]
latex复制angle radius=3mm
遇到图形垂直对齐问题时:
baseline值(通常-0.5ex到0.5ex之间)\vcenter包裹tikzpicture:latex复制$\vcenter{\hbox{\begin{tikzpicture}...}}$
复杂图形导致编译缓慢时:
externalize预编译图形:latex复制\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/]
calc计算\tikzsetnextfilename重用已编译图形结合hyperref包创建可点击标注:
latex复制\usepackage{hyperref}
...
\node[myside, hyperlink node=sideA] at (...) {$a$};
点击标注可跳转到对应公式或定理说明。
使用animate包制作逐步标注动画:
latex复制\usepackage{animate}
\begin{animateinline}[autoplay]{2}
\frame{\begin{tikzpicture}仅三角形\end{tikzpicture}}
\frame{\begin{tikzpicture}+边长标注\end{tikzpicture}}
\frame{\begin{tikzpicture}+角度标注\end{tikzpicture}}
\end{animateinline}
在实际文档中应用时,建议将常用图形定义为命令,如:
latex复制\newcommand{\inlineTriangle}[4][]{%
\begin{tikzpicture}[baseline=-0.5ex, scale=0.5, #1]
\draw #2;
\foreach \pos/\txt in {#3} {\node at \pos {\txt};}
\foreach \angle/\opt in {#4} {\pic \opt {angle=\angle};}
\end{tikzpicture}%
}
调用示例:
latex复制\inlineTriangle{\trianglePoints}{
(0.75,-0.1)/$a$, (1.3,0.4)/$b$, (0.4,0.8)/$c$
}{
{(1.5,0)-(0,0)-(60:1.5)}/{draw, angle radius=4mm, pic text=$\alpha$}
}