2 坐 标 表 示 2 % 第 一 种 方 式 \tikz \draw (0,0) -- (1,1); % 第 二 种 方 式 \tikz{\draw (0,0) -- (1,1); \draw (0,1) -- (1,0);} % 第 三 种 方 式 \draw (0,0) -- (1,1); \



Similar documents

3.2 導 函 數 其 切 線 (tangent line) 為 通 過 P, 且 其 斜 率 為 m 的 直 線, 即 y = f(a) + m(x a) (3) 其 法 線 (normal line) 為 通 過 P 且 與 切 線 垂 直 的 直 線, 即 y = f(a) 1 (x a) m

例15

考 研 数 学 三 部 曲 之 大 话 高 等 数 学 0. 考 研 数 学 高 等 数 学 部 分 其 实 就 是 一 座 大 楼 房 间 80 房 间 80 第 八 层 房 间 80 房 间 804 房 间 805 房 间 70 房 间 70 房 间 70 第 七 层 房 间 704 房 间 7

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

coverage2.ppt

untitled

untitled

Text 文字输入功能 , 使用者可自行定义文字 高度, 旋转角度 , 行距 , 字间距离 和 倾斜角度。

虎克定律實驗 楊勝斐

C/C++ - 函数

考 纲 解 读 14 浙 江 省 普 通 高 考 语 文 科 考 纲 研 读 吴 美 琴 今 年 的 考 试 说 明, 我 用 了 八 个 字 进 行 概 括, 那 就 是 稳 中 微 调, 关 注 生 活 稳 中 微 调 :14 年 的 语 文 考 试 说 明 是 近 几 年 来 调 整 幅 度

<4D F736F F D20A4E2B6D5BFEBC3D1C2B2B3F8BCBDA9F1A874B2CE2E646F63>


材 料 目 录 1. 党 员 发 展 及 转 正 流 程 图 2. 申 请 入 党 人 员 基 本 信 息 及 培 养 记 录 表 3. 思 想 汇 报 传 阅 及 意 见 反 馈 表 4. 入 党 积 极 分 子 培 养 考 察 表 5. 政 治 审 查 函 调 信 模 板 6. 政 治 审 查

<3935BCC6A5D2C1CDB6D52E747066>

例題. y = x x = 0 y = x 0 li 0 li 0 li = y = x x = 0 = f x) x = a x = a 2

issue27.indd

Microsoft Word doc

江苏省海安职业教育中心

AutoCAD2D2010TQC電腦輔助設計類檢定題庫解題秘笈_990901_.doc

(Microsoft Word - \244H\305\351\244Q\244j\250t\262\316.doc)

TDS5000B MyScope MyScope MyScope MyScope TDS5000B TDS5000B (DPO 1 GHz 5 GS/s 16M DPO MyScope TDS5000B TDS5000B DPO DPX 100,000 DPX DPO 2


衛星影像分類

TDS5000B MyScope MyScope MyScope MyScope TDS5000B TDS5000B (DPO 1 GHz 5 GS/s 16M DPO MyScope TDS5000B TDS5000B DPO DPX 100,000 DPX DPO 2

微积分 授课讲义

. h h [ x x ln x + x ] h ln h + h t ln h + h t e t h + h e t h h e t he t + h h e e t + he t h et + e t e t h,k h k k h et + + e t 4 et + e t 4 k et e

數學教學-實踐與探索(三)

untitled

untitled

untitled

四川省普通高等学校

文憑試物理科校本評核樣本課業

高等数学A

Microsoft Word - 3D手册2.doc

致理技術學院


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術


untitled

陕 西 省 城 市 社 区 社 会 管 理 创 新 现 状 困 境 及 建 议 一 陕 西 省 城 市 社 区 管 理 现 状 分 析 ( 一 ) 社 区 社 会 管 理 创 新 的 重 要 举 措 1. 高 度 重 视 社 区 的 社 会 管 理, 积 极 探 索 总 结 经 验 自 2000 年

1-8章.indd

事 業 單 位 改 組 或 轉 讓, 舊 勞 工 不 願 意 續 任 者, 可 否 請 求 資 遣 費? 工 或 與 勞 工 協 商 同 意 後 簽 訂 新 約, 以 穩 固 勞 雇 關 係 至 於 改 組 或 轉 讓 過 程 中, 被 商 定 留 用 之 勞 工, 如 因 其 勞 動 條 件 有

Microsoft Word - 江湖行帮趣话

Microsoft Word - prac_exp13.doc

5 1 文 书 原 件 优 先 的 原 则 和 例 外 兼 评 最 高 人 民 法 院 关 于 民 事 诉 讼 证 据 的 若 干 规 定 第 69 条 / 纪 格 非 论 点 与 思 考 5 3 优 先 受 偿 权 是 什 么 权? 浅 谈 建 筑 工 程 优 先 受 偿 权 的 性 质 及 价

早 期 療 育 教 保 人 員 應 具 備 下 列 資 格 之 一 : 一 專 科 以 上 學 校 醫 護 職 能 治 療 物 理 治 療 教 育 特 殊 教 育 早 期 療 育 幼 兒 教 育 幼 兒 保 育 社 會 社 會 福 利 社 會 工 作 心 理 輔 導 兒 童 及 少 年 福 利 或

目 錄 大 會 歡 迎 詞 裁 判 長 的 話 選 手 賽 前 準 備 清 單 賽 事 日 程 表 選 手 報 到 比 賽 日 - 大 會 服 務 關 門 時 間 台 東 關 門 時 間 轉 換 區 須 知 台 東 轉 換 區 須 知 自 行 車 檢 錄 轉 換 袋 台 灣 游 泳 公 里 游 泳

关于印发《实验室骨干教师评聘及管理办法》的通知

Microsoft Word - report.doc

<4D F736F F D20AAFEA5F333B4E5AA61B1D0BEC7BFC4A44AA655BBE2B0ECA544C3445FB5A3B8D6B3D0A740B1D0BEC72E646F63>

105年公務員申領或侵占小額款項

2013年度西藏自治区教育厅

Transcription:

PGF/TikZ 绘 图 学 习 笔 记 zoho@bbsctexorg 2014 年 5 月 5 日 目 录 1 开 始 工 作 1 2 坐 标 表 示 2 3 绘 制 命 令 4 31 线 段 和 折 线 4 32 二 次 曲 线 5 33 三 角 函 数 6 34 贝 塞 尔 曲 线 7 4 填 充 命 令 8 5 节 点 命 令 9 6 路 径 命 令 12 7 描 点 绘 制 13 71 平 面 曲 线 13 72 三 维 投 影 16 73 空 间 曲 线 17 74 空 间 曲 面 19 8 文 档 标 注 21 1 开 始 工 作 我 们 先 来 画 一 些 线 段 例 如 下 面 的 例 子 : 1

2 坐 标 表 示 2 % 第 一 种 方 式 \tikz \draw (0,0) -- (1,1); % 第 二 种 方 式 \tikz{\draw (0,0) -- (1,1); \draw (0,1) -- (1,0);} % 第 三 种 方 式 \draw (0,0) -- (1,1); \draw (0,1) -- (1,0); % 第 四 种 方 式 \tikzpicture \draw (0,0) -- (1,1); \draw (0,1) -- (1,0); \endtikzpicture 将 用 四 种 不 同 的 方 式 画 出 如 下 四 个 图 形 : 虽 然 我 们 同 时 使 用 不 同 方 式 来 画 图, 但 可 以 看 到, 基 本 的 绘 图 语 句 就 是 这 两 句 : \draw (0,0) -- (1,1); \draw (0,1) -- (1,0); 一 个 TikZ 画 图 环 境 可 以 包 含 多 个 绘 图 语 句, 但 每 个 语 句 必 须 以 英 文 分 号 结 束 否 则 将 产 生 类 似 下 面 的 错 误 提 示 :! Package tikz Error: Giving up on this path Did you forget a semicolon? 上 面 这 四 种 使 用 方 式 稍 有 区 别, 第 一 种 方 式 最 简 单, 但 是 它 每 次 只 能 使 用 一 个 绘 图 语 句, 因 为 \tikz 命 令 将 在 第 一 个 分 号 后 结 束 而 后 面 三 种 方 式 都 可 以 包 含 多 个 绘 图 语 句, 唯 一 的 区 别 在 于 最 后 一 种 方 式 也 可 以 在 Plain TeX 中 使 用 本 文 档 主 要 介 绍 PGF/TikZ 210 版 本 再 来 看 看 一 下 之 前 画 线 段 的 例 子 : 2 坐 标 表 示

2 坐 标 表 示 3 \draw (0,1) -- (1,0); TikZ 的 绘 图 命 令 大 多 都 很 直 观, 我 们 一 看 就 知 道 是 从 坐 标 (0, 1) 到 (1, 0) 画 个 线 段 在 TikZ 中, 坐 标 的 默 认 长 度 单 位 为 厘 米 (cm), 其 它 长 度 单 位 也 可 以 使 用, 但 是 需 要 明 确 写 出, 例 如 : \draw (0pt,30pt) -- (30pt,0pt); 我 们 也 可 以 用 相 对 坐 标, 例 如 : \draw (0,1) -- +(1,-1); 也 就 是 说, 在 坐 标 前 加 上 + 号 表 示 相 对 前 一 个 坐 标 作 偏 移 这 个 例 子 和 本 节 第 一 个 例 子 的 结 果 是 一 样 的 如 : 如 果 相 对 坐 标 需 要 记 录 下 来 被 其 它 坐 标 使 用, 可 以 在 前 边 用 两 个 + 号 例 \draw (0,1) -- ++(1,-1) -- +(1,1); 由 于 第 二 个 坐 标 是 相 对 坐 标, 而 且 它 又 需 要 记 录 下 来 被 第 三 个 坐 标 使 用, 所 以 要 用 两 个 + 号 作 为 对 比, 我 们 来 看 看 用 一 个 + 号 的 结 果 : \draw (0,1) -- +(1,-1) -- +(1,1); 也 就 是 说, 不 管 用 ++(1,-1) 还 是 用 +(1,-1), 第 二 个 坐 标 都 等 于 (1,0), 但 是 对 于 前 者 第 三 个 坐 标 等 同 于 (2,1), 对 于 后 者 第 三 个 坐 标 等 同 于 (1,2) 当 然,TikZ 中 也 可 以 用 极 坐 标, 此 时 角 度 值 和 长 度 值 之 间 用 冒 号 隔 开 例 如 :

3 绘 制 命 令 4 \draw (90:1) -- (0:1) -- (2,1); 可 以 看 到, 直 角 坐 标 和 极 坐 标 混 合 使 用 是 没 有 问 题 的 如 果 需 要 对 坐 标 进 行 运 算, 可 以 在 导 言 区 用 \usetikzlibrary{calc} 命 令 载 入 calc 扩 展, 然 后 用 类 似 下 面 的 例 子 : \draw (0,1) -- ($(0,1)-2*(-1,1)$); 3 绘 制 命 令 31 线 段 和 折 线 到 目 前 为 止, 我 们 知 道 用 \draw 命 令 可 以 画 线 段 类 似 的 我 们 也 可 以 画 带 箭 头 的 线 段 例 如 : \draw[->] (0,25) -- (3,25); \draw[<-] (0,2) -- (3,2); \draw[<->] (0,15) -- (3,15); \draw[ ->] (0,1) -- (3,1); \draw[>->>] (0,05) -- (3,05); \draw[ <-> ] (0,0) -- (3,0); 和 其 它 LaTeX 命 令 一 样,TikZ 命 令 的 可 选 参 数 也 放 在 方 括 号 中 利 用 带 箭 头 的 线 段, 画 坐 标 系 就 毫 无 问 题 了 既 然 我 们 已 经 知 道 怎 么 画 线 段, 而 TikZ 中 多 个 操 作 是 可 以 连 续 指 明 的, 这 样 画 三 角 形 也 没 问 题 了 例 如 : \draw (0,0) -- (1,1) -- (2,0) -- (0,0);

3 绘 制 命 令 5 角 形 : TikZ 默 认 的 线 条 宽 度 为 04pt 我 们 可 以 用 line width 选 项 来 加 粗 这 个 三 [line width=3pt] \draw (0,0) -- (1,1) -- (2,0) -- (0,0); 这 时 候, 问 题 出 来 了 : 我 们 发 现, 加 粗 三 角 形 的 左 下 角 有 个 缺 口! 这 个 问 题 可 以 用 cycle 操 作 来 解 决 把 前 面 的 例 子 按 如 下 的 方 法 修 改, 一 切 就 都 正 常 了 : [line width=3pt] \draw (0,0) -- (1,1) -- (2,0) -- cycle; 再 来 看 怎 么 画 过 两 点 的 直 角 折 线 : \draw (0,0) - (1,1); \draw (1,0) - (2,1); 其 中 - 表 示 先 竖 直 画 线 再 水 平 画 线, 而 - 正 好 反 过 来 将 两 个 直 角 折 线 合 起 来 就 得 到 一 个 矩 形 不 过 我 们 有 更 简 洁 的 写 法 : \draw (0,0) rectangle (2,1); 类 似 地, 我 们 也 可 以 画 网 格 线 例 如 : \draw[step=05] (0,0) grid (3,2); 其 中 的 step 参 数 指 明 网 格 的 间 隙 32 二 次 曲 线 如 : 不 能 总 是 画 最 简 单 的 线 段, 我 们 接 下 来 来 画 一 种 二 次 曲 线 : 圆 和 椭 圆 例

3 绘 制 命 令 6 \draw (0,0) circle (05); \draw (2,0) ellipse (1 and 05); 对 于 圆, 我 们 需 要 圆 心 和 半 径 这 两 个 参 数, 而 对 于 椭 圆, 我 们 需 要 中 心, 长 轴 和 短 轴 这 三 个 参 数 当 然, 我 们 也 可 以 画 圆 弧 和 椭 圆 弧 此 时, 需 要 将 圆 心 或 中 心 换 成 起 始 点, 再 指 明 起 始 角 度 和 终 结 角 度 例 如 : \draw (05,0) arc (0: 135: 05); \draw (3,0) arc (0: 270: 1 and 05); 注 意 后 面 的 参 数 涉 及 到 角 度, 所 以 它 们 之 间 用 冒 号 分 隔 抛 物 线 也 不 在 话 下, 只 需 要 指 明 从 起 始 点 和 终 结 点 坐 标 例 如 : \draw (0,0) parabola (1,2); \draw (2,0) parabola[bend at end] (3,2); TikZ 默 认 以 起 始 点 为 抛 物 线 顶 点 ; 如 果 加 上 bend at end 选 项, 则 以 终 结 点 为 顶 点 我 们 也 可 以 在 中 间 指 明 顶 点 坐 标, 此 时 将 得 到 由 两 段 抛 物 线 连 接 而 成 的 曲 线 例 如 : \draw (0,0) parabola bend (1,2) (2,1); \draw (25,0) parabola bend (3,1) (4,2); 33 三 角 函 数 正 弦 和 余 弦 曲 线 也 可 以 类 似 地 画 出 来 例 如 :

3 绘 制 命 令 7 \draw (0,0) sin (1,1) cos (2,0); \draw (2,0) sin (3,-1) cos (4,0); 其 中, 对 于 (0,0) sin (1,1) 操 作,TikZ 拿 [0, π 2 ] 区 间 上 的 正 弦 曲 线 作 适 当 伸 缩 得 到, 而 对 于 (2,0) sin (3,-1) 操 作, 除 了 作 伸 缩 外, 还 需 要 再 旋 转 180 度 才 能 得 到 余 弦 的 绘 制 过 程 类 似 我 们 将 两 者 结 合 起 来, 就 能 画 出 一 个 周 期 的 正 弦 或 者 余 弦 曲 线 34 贝 塞 尔 曲 线 例 如 : 我 们 还 可 以 画 出 贝 塞 尔 (Bézier) 曲 线 此 时 需 要 将 -- 操 作 改 为 操 作 \draw (0,0) controls (1,1) (4,0); \fill (1,1) circle (1pt); 这 样 画 出 的 是 三 次 贝 塞 尔 曲 线, 其 中 曲 线 在 起 点 (0, 0) 和 终 点 (4, 0) 的 切 线 都 过 点 (1, 1), 因 此 点 (1, 1) 称 为 控 制 点 代 码 中 的 \fill 是 填 充 命 令, 这 里 用 于 画 一 个 实 心 小 圆 点, 我 们 后 面 还 会 再 看 到 这 个 命 令 在 绘 制 三 次 贝 塞 尔 曲 线 时, 也 可 以 提 供 两 个 控 制 点 例 如 : \draw (0,0) controls (1,1) and (2,1) (4,0); \fill (1,1) circle (1pt) (2,1) circle (1pt); 此 时, 曲 线 在 起 点 (0, 0) 的 切 线 过 第 一 个 控 制 点 (1, 1), 而 在 终 点 (4, 0) 的 切 线 过 第 二 个 控 制 点 (2, 1) 三 次 贝 塞 尔 曲 线 的 形 状 可 以 更 加 复 杂, 例 如 下 面 的 例 子 :

4 填 充 命 令 8 \draw (0,0) controls (1,1) and (2,1) (4,1); \fill (1,1) circle (1pt) (2,1) circle (1pt); 如 : 在 绘 制 连 接 两 点 的 曲 线 时, 我 们 也 可 以 指 明 起 始 角 度 和 终 结 角 度 例 \draw (0,0) to[out=60,in=-90] (4,0); \draw (0,0) to (4,0); 如 果 to 没 有 任 何 选 项, 就 和 前 面 的 -- 操 作 同 样 画 出 线 段 实 际 上,to 操 作 是 比 较 一 般 的 操 作, 它 还 有 多 种 选 项, 这 里 不 再 详 述 4 填 充 命 令 现 在 来 看 填 充 命 令 \fill 先 来 看 如 何 画 实 心 圆 盘 和 实 心 矩 形 例 如 : \fill (05,05) circle (05); \fill[blue] (2,0) rectangle (4,1); 默 认 的 填 充 颜 色 是 黑 色, 当 然 我 们 可 以 自 己 设 定 颜 色 注 意 \draw 仅 绘 制 区 域 边 界, 而 \fill 仅 填 充 区 域 内 部, 不 包 括 边 界 两 者 结 合 我 们 可 以 绘 制 边 界 和 内 部 颜 色 不 同 的 圆 盘 或 者 矩 形 例 如 :

5 节 点 命 令 9 \draw[green] (0,0) rectangle (3,1); \fill[orange] (0,0) rectangle (3,1); 或 者, 我 们 可 以 将 \draw 和 \fill 合 并 起 来 写 成 \filldraw 命 令 此 时, 这 个 例 子 就 可 以 改 为 \filldraw[fill=orange,draw=green] (0,0) rectangle (3,1); 我 们 也 可 以 填 充 自 己 绘 制 的 封 闭 曲 线, 例 如 : \fill (0,0) -- (1,1) -- (2,0) -- cycle; 与 \fill 命 令 类 似 的 还 有 \shade 这 个 渐 变 命 令 例 如 : \shade[inner color=yellow,outer color=orange] (1,1) circle (1); \shade[left color=gray,right color=black] (3,0) rectangle (6,2); 5 节 点 命 令 如 果 想 在 图 形 上 加 上 标 签, 就 要 用 到 节 点 命 令 \node 了 例 如 下 面 的 例 子 绘 制 了 直 角 坐 标 系 :

5 节 点 命 令 10 \draw[->] (0,0) -- (2,0); \draw[->] (0,0) -- (0,2); \node[below=4pt,left] at (0,0) {$O$}; \node[right] at (2,0) {$x$}; \node[above] at (0,2) {$y$}; y O x 节 点 命 令 的 一 般 形 式 如 下 : \ node[<options >] (<name >) at (<coordinate >) {<text >} 其 中 <text> 是 节 点 的 文 本,<coordinate> 是 节 点 的 坐 标,<name> 是 节 点 的 名 称, 而 <options> 是 一 些 选 项 在 前 面 的 例 子 里,left,right,above 和 below 分 别 表 示 节 点 文 本 相 对 于 节 点 坐 标 的 四 种 位 置 倘 若 不 指 明 位 置, 节 点 文 本 的 中 心 将 和 节 点 的 坐 标 重 合 至 于 节 点 名 称 的 用 法, 可 以 先 看 下 面 这 个 例 子 : \node[fill=lightgray] (a) at (0,0) {X}; \node[fill=lightgray] (b) at (1,1) {Y}; \node[fill=lightgray] (c) at (2,0) {Z}; \draw[->] (a) -- (b); \draw[->] (b) -- (c); \draw[->] (c) -- (a); Y Ẋ Z 可 以 看 到, 知 道 了 节 点 名 称, 就 可 以 把 它 看 成 坐 标 那 样, 作 各 种 线 段 和 曲 线 的 连 接 这 就 是 示 意 图 或 者 流 程 图 的 一 般 绘 制 方 法 节 点 之 间 也 可 以 用 相 对 位 置 这 时 候, 我 们 首 先 需 要 载 入 positioning 库 : \usetikzlibrary{positioning} 然 后 就 可 以 用 类 似 下 面 例 子 的 方 法 使 用 相 对 位 置 了 :

5 节 点 命 令 11 \node[fill=gray] (a) {X}; \node[fill=gray,right=1 of a] (b) {Y}; \node[fill=gray,right=1 of b] (c) {Z}; \draw[->] (a) -- (b); \draw[->] (b) -- (c); Ẋ Y Z 节 点 命 令 和 \draw 等 绘 制 命 令 实 际 上 是 可 以 写 在 一 起 的 例 如 本 节 最 开 始 画 坐 标 轴 的 例 子 就 可 以 改 写 如 下 : \draw[->] (0,0) node[below=4pt,left]{$o$} -- (2,0) node[right]{$x$}; \draw[->] (0,0) -- (0,2) node[above]{$y$}; 这 样 写 可 能 简 短 一 点, 但 是 对 于 初 学 者 来 说 有 些 复 杂 TikZ 中 的 节 点 形 状 预 先 定 义 好 的 有 三 种 : 矩 形, 圆 形 和 点 形, 但 可 以 自 己 定 义 新 的 形 状 节 点 形 状 用 shape 选 项 来 确 定 ( 不 指 定 则 默 认 为 矩 形 ), 例 如 : \node[shape=rectangle,fill=gray] (a) at (0,0) {X}; \node[shape=circle,fill=gray] (b) at (3,0) {Y}; \node[shape=coordinate,fill=gray] (c) at (6,0) {Z}; \draw[->] (a) -- (b); \draw[->] (b) -- (c); X Y 可 以 看 到, 由 于 点 形 节 点 的 面 积 为 零, 所 以 填 充 颜 色 和 标 注 文 本 都 没 有 任 何 效 果 这 种 点 形 节 点 还 可 以 用 简 化 的 记 号 来 表 示 例 如 上 面 例 子 的 点 形 节 点 也 可 以 这 样 表 示 : \coordinate (c) at (6,0);

6 路 径 命 令 12 6 路 径 命 令 之 前 介 绍 的 \draw,\fill,\shade 和 \filldraw 命 令, 实 际 上, 分 别 是 \path[draw],\path[fill],\path[shade] 和 \path[fill,draw] 命 令 的 简 写 而 \node 和 \coordinate 命 令 分 别 等 同 于 \path node 和 \path coordinate 例 如, 下 面 这 四 种 写 法 的 效 果 是 一 样 的, 它 们 都 画 出 一 个 半 径 为 1cm 的 圆 : \draw (0,0) circle (1cm); \path [draw] (0,0) circle (1cm); \path (0,0) [draw] circle (1cm); \path (0,0) circle (1cm) [draw]; 而 下 面 这 两 种 写 法 也 是 一 样 的, 它 们 都 定 义 了 一 个 节 点 : \node [fill=gray] (a) at (1,1) {X}; \path (1,1) node[fill=gray] (a) {X}; TikZ 的 路 径 命 令, 将 之 前 介 绍 的 多 种 命 令 统 一 起 来 了 我 们 来 整 理 一 下 首 先, 路 径 命 令 的 一 般 形 式 如 下 : \path <specification>; 即 路 径 命 令 后 面 需 要 写 上 路 径 描 述 <specification>, 然 后 以 分 号 结 尾 而 路 径 描 述 可 以 有 多 种, 这 些 我 们 都 介 绍 过 了 : (coordinate) (coordinate): 从 一 个 点 移 动 到 另 一 个 点 (coordinate) -- (coordinate): 从 一 个 点 画 线 段 到 另 一 个 点 (coordinate) rectangle (coordinate): 以 这 两 个 点 为 对 角 画 矩 形 (coordinate) circle[options]: 以 这 个 点 为 圆 心 画 圆 (coordinate) arc[options]: 以 这 个 点 为 起 点 画 圆 弧 (coordinate) controls (control) and (control) (coordinate): 从 一 个 点 画 贝 塞 尔 曲 线 到 另 一 个 点 (coordinate) to[options] (coordinate): 从 一 个 点 按 照 选 项 指 定 画 某 种 曲 线 到 另 一 个 点 (coordinate) node[options] (name) {text}: 将 这 个 点 记 为 文 本 节 点 (coordinate) coordinate (name): 将 这 个 点 记 为 点 形 节 点

7 描 点 绘 制 13 71 平 面 曲 线 7 描 点 绘 制 在 \draw 命 令 中, 我 们 还 可 以 用 plot 操 作 来 画 一 般 的 平 面 曲 线 例 如 : \draw[->] (0,0) -- (4,0) node[right] {$x$}; \draw[->] (0,0) -- (0,3) node[above] {$y$}; \draw plot coordinates {(0,0) (1,2) (2,1) (4,3)}; y x 上 面 的 例 子 中, 我 们 用 折 线 连 接 各 个 点 得 到 一 条 折 线 我 们 也 可 以 用 光 滑 曲 线 连 接 这 些 点 例 如 : \draw[->] (0,0) -- (4,0) node[right] {$x$}; \draw[->] (0,0) -- (0,3) node[above] {$y$}; \draw[color=red] plot[smooth] coordinates {(0,0) (1,2) (2,1) (4,3)}; \draw plot[smooth,tension=9] coordinates {(0,0) (1,2) (2,1) (4,3)}; y x

7 描 点 绘 制 14 其 中 smooth 选 项 表 示 我 们 需 要 绘 制 光 滑 曲 线, 而 tension 选 项 描 述 该 光 滑 曲 线 的 绷 紧 度, 取 值 范 围 为 从 0 到 1, 默 认 值 为 055 类 似 地, 如 果 将 smooth 选 项 改 为 smooth cycle 选 项, 将 绘 制 一 个 闭 合 曲 线 例 如 : [smooth cycle] \draw plot[tension=0] coordinates {(0,1) (1,0) (2,1) (1,2)}; \draw[xshift=3cm] plot[tension=03] coordinates{(0,1) (1,0) (2,1) (1,2)}; \draw[xshift=6cm] plot[tension=07] coordinates{(0,1) (1,0) (2,1) (1,2)}; \draw[xshift=9cm] plot[tension=1] coordinates{(0,1) (1,0) (2,1) (1,2)}; 在 这 个 例 子 可 以 看 到, 对 于 正 方 形 的 四 个 顶 点,tension=0 将 画 出 正 方 形, 而 tension=1 将 画 出 圆 形 利 用 \draw 命 令 的 plot 操 作, 我 们 也 可 以 画 一 般 的 函 数 曲 线 例 如 : [domain=-3:3] \draw[->] (-32,0) -- (32,0) node[below] {$x$}; \draw[->] (0,-32) -- (0,32) node[above] {$f(x)$}; \draw[very thin,color=gray] (-3,-3) grid (3,3); \draw[color=orange] plot (\x,\x); \draw[color=blue] plot (\x,{sin(\x r)}); \draw[color=red] plot (\x,{\x-(1/6)*(\x)^3});

7 描 点 绘 制 15 f(x) x 在 函 数 的 表 达 式 中, 乘 号 用 * 表 示, 而 且 不 能 省 略 如 果 表 示 式 不 是 简 单 的 \x, 我 们 一 般 需 要 将 其 中 的 变 量 \x 用 圆 括 号 括 起 来, 并 且 将 整 个 表 达 式 用 花 括 号 括 起 来 ; 否 则 PGF/TikZ 在 解 析 表 达 式 时 多 半 会 出 错 注 意 代 码 中 的 sin 函 数 需 要 指 明 长 度 类 型 r ( 表 示 弧 度, 默 认 为 角 度 ) 实 际 上, 我 们 用 plot 是 可 以 画 出 参 数 曲 线 的, 其 中 的 \x 就 是 参 数 例 如 : [domain=0:2*pi] \draw[very thin,color=gray] (-2,-1) grid (7,1); \draw[color=blue] plot ({2*sin(\x r)},{cos(\x r)}); \draw[color=red,xshift=5cm,samples=40] plot ({2*sin(\x r)},{cos(\x r)}); 比 较 图 形 中 的 两 个 椭 圆, 可 以 看 到 第 二 个 比 第 一 个 光 滑 此 中 区 别 是 由 于 取 样 点 数 samples 的 多 少 造 成 的 samples 选 项 的 默 认 取 值 为 25 PGF 的 数 学 引 擎 支 持 下 面 这 些 数 学 函 数 :

7 描 点 绘 制 16 abs div log10 rad acos divide log2 rand add e max random and equal min real array factorial mod rnd asin false Mod round atan floor multiply sec atan2 frac neg sin bin greater not sinh ceil height notequal sqrt cos hex notgreater subtract cosec Hex notless tan cosh int oct tanh cot ifthenelse or true deg less pi veclen depth ln pow width 72 三 维 投 影 接 下 来 将 介 绍 空 间 曲 线 和 空 间 曲 面 的 绘 制 为 了 在 平 面 上 绘 制 出 空 间 图 形, 我 们 需 要 先 了 解 三 维 投 影 的 基 本 概 念 三 维 投 影 (3D Projection), 或 者 称 为 图 形 投 影 (Graphical Projection), 是 将 三 维 空 间 中 的 点 映 射 到 平 面 中 的 方 法 投 影 通 常 分 为 两 类 : 透 视 投 影 (Perspective Projection) 和 平 行 投 影 (Parallel Projection) 透 视 投 影 1, 是 指 视 点 和 物 体 的 距 离 有 限 远 的 投 影 透 视 投 影 近 似 于 我 们 用 照 相 机 拍 摄 物 体, 此 时 平 行 直 线 在 投 影 中 不 再 保 持 平 行, 而 越 远 的 物 体 在 投 影 中 越 小 1 有 些 人 称 透 视 投 影 为 中 心 投 影 (Central Projection)

7 描 点 绘 制 17 平 行 投 影, 是 指 视 点 和 物 体 的 距 离 无 限 远 的 投 影 平 行 投 影 近 似 于 阳 光 照 射 下 的 投 影, 此 时 投 影 线 都 平 行 因 此, 在 平 行 投 影 中, 平 行 直 线 在 投 影 中 仍 然 保 持 平 行, 而 物 体 的 投 影 大 小 和 它 的 距 离 没 有 直 接 关 系 根 据 投 影 线 和 投 影 面 是 否 垂 直, 平 行 投 影 又 分 为 正 ( 交 ) 投 影 (Orthographic Projection) 2 和 斜 投 影 (Oblique Projection) 对 于 斜 投 影, 假 设 投 影 面 为 xoy 平 面, 而 投 影 线 与 投 影 面 的 夹 角 为 θ, 投 影 线 的 投 影 与 x 轴 的 夹 角 为 ϕ, 则 将 空 间 中 的 点 (x, y, z) 投 影 到 xoy 面 的 坐 标 就 是 { x = x + z 1 tan θ cos ϕ y = y + z 1 tan θ sin ϕ 上 面 的 θ 和 ϕ 分 别 称 为 仰 角 (Elevation) 和 方 位 角 (Azimuth) 在 斜 投 影 中, 如 果 取 仰 角 θ = 45, 则 z 轴 上 的 单 位 长 度 在 投 影 中 保 持 不 变, 我 们 称 它 为 等 斜 投 影 (Cavalier Projection) 如 果 取 θ = arctan 2 = 6343, 则 z 轴 上 的 单 位 长 度 在 投 影 中 缩 为 一 半, 我 们 称 它 为 半 斜 投 影 (Cabinet Projection) 在 空 间 解 析 几 何 中, 经 常 用 等 斜 投 影 和 半 斜 投 影 来 描 绘 空 间 中 图 形 此 时 方 位 角 ϕ 一 般 选 取 135 或 者 150 73 空 间 曲 线 在 PGF/TikZ 中, 也 可 以 绘 制 空 间 参 数 曲 线, 此 时 我 们 用 三 个 坐 标 来 表 示 空 间 中 的 点 例 如 : ] \draw[->] (-2,0,0) -- (2,0,0) node[right] {$x$}; \draw[->] (0,-1,0) -- (0,3,0) node[above] {$y$}; \draw[->] (0,0,-2) -- (0,0,2) node[below] {$z$}; \draw[color=red] plot[domain=0:2*pi] ({sin(\x r)},2,{cos(\x r)}); \draw[color=red] (0,0,0) -- (1,2,0) (0,0,0) -- (-1,2,0); 2 有 些 人 称 平 行 投 影 为 正 交 投 影 (Orthographic Projection), 这 与 我 们 的 命 名 不 一 致

7 描 点 绘 制 18 y x z 在 这 个 例 子 中, 我 们 画 出 了 空 间 中 的 一 个 圆 以 及 两 个 线 段, 以 此 轮 廓 图 表 示 一 个 圆 锥 面 但 是 这 个 例 子 还 有 两 个 不 足 : 一 是 我 们 通 常 希 望 将 x 轴 指 向 左 下 角,y 轴 指 向 右 边, 而 z 轴 指 向 上 边 ; 二 是 图 形 中 圆 和 左 斜 线 的 连 接 点 看 来 不 太 美 观 这 两 个 问 题 可 以 通 过 修 改 坐 标 轴 的 指 向 来 解 决 例 如 : [x={(-1cm,-15cm)},y={(1cm,0cm)},z={(0cm,1cm)}] \draw[->] (-5,0,0) -- (5,0,0) node[below] {$x$}; \draw[->] (0,-2,0) -- (0,2,0) node[right] {$y$}; \draw[->] (0,0,-1) -- (0,0,3) node[above] {$z$}; \draw[color=red] plot[domain=0:2*pi] ({sin(\x r)},{cos(\x r)},2); \draw[color=red] (0,0,0) -- (0,1,2) (0,0,0) -- (0,-1,2); z y x 其 中 的 x,y 和 z 指 明 了 三 个 坐 标 轴 各 自 的 单 位 向 量 的 位 置 PGF/TikZ 绘 制 时 将 按 照 指 定 的 位 置 计 算 空 间 图 形 的 投 影 默 认 的 取 值 为 x={(1cm,0cm)}, y={(0cm,1cm)}, z={(-385cm,-385cm)} 注 意 我 们 需 要 将 坐 标 用 花 括 号 括 起 来

7 描 点 绘 制 19 74 空 间 曲 面 PGF/TikZ 无 法 绘 制 复 杂 的 空 间 曲 面, 但 我 们 可 以 用 pgfplots 宏 包 在 载 入 这 个 宏 包 后, 我 们 可 以 先 试 试 这 个 例 子 : \begin{axis}[view={120}{30},xlabel=$x$,ylabel=$y$] \addplot3[domain=-2:2,y domain=-2:2,mesh]{x^2-y^2}; \end{axis} 4 2 0 2 4 2 2 1 y 0 1 2 2 0 x 其 中 的 view 选 项 分 别 设 定 了 前 面 所 述 的 方 位 角 和 仰 角, 其 默 认 值 为 view={25}{30} 由 于 在 pgfplots 中,z 轴 总 是 垂 直 向 上 的, 所 以 不 管 怎 么 调 整 视 角 都 不 可 能 让 y 轴 指 向 右 边 而 x 轴 指 向 左 下 角 例 子 中 的 mesh 选 项 指 明 我 们 用 网 格 来 表 示 曲 面 如 果 将 mesh 改 为 surf, 将 会 填 充 曲 面 的 网 格 \begin{axis}[view={120}{30},axis lines=center,axis on top, xmin=-2,xmax=2,ymin=-2,ymax=2,zmin=-5,zmax=5] \addplot3[domain=-2:2,y domain=-2:2,surf]{x^2-y^2}; \end{axis}

7 描 点 绘 制 20 5 2 2 1 1 2 5 2 其 中 我 们 还 用 axis lines=center 选 项 指 明 只 画 出 坐 标 轴, 而 用 axis on top 选 项 指 明 坐 标 轴 在 曲 面 上 方 如 果 用 axis lines=center 选 项, 旧 版 本 的 pgfplots 在 标 记 空 间 图 形 的 xlabel,ylabel,zlabel 时 的 位 置 是 错 误 的, 更 新 它 到 18 版 本, 并 且 设 置 \pgfplotsset{compat=18}, 就 可 以 解 决 这 个 问 题 CTeX 29 完 整 版 包 含 的 pgfplots 的 版 本 为 151, 因 此 需 要 先 升 级 它 实 际 上,pgfplots 也 有 类 似 的 \addplot2 命 令, 用 于 画 平 面 曲 线 相 比 PGF/TikZ,pgfplots 的 语 法 更 加 简 单, 但 缺 点 在 于 比 较 慢 因 为 pgfplots 比 较 复 杂, 所 以 经 常 会 出 现 耗 尽 TeX 内 存 的 错 误 :! TeX capacity exceeded, sorry [pool size=3000000] 在 MiKTeX 中, 我 们 可 以 用 下 面 的 命 令 打 开 配 置 文 件 : initexmf --edit-config-file xelatex 然 后 在 打 开 的 xelatexini 中 写 上 如 下 两 行 并 保 存 该 文 件 : main_memory=90000000 save_size=80000 接 下 来 在 开 始 菜 单 中 找 到 MiKTeX->Maintenance->Settings 程 序, 在 其 中 的 Formats 页 中 选 中 xelatex, 并 点 击 Build 对 于 pdflatex 也 可 以 类 似 地 设 置

8 文 档 标 注 21 8 文 档 标 注 利 用 TikZ 的 节 点 命 令, 我 们 也 可 以 对 文 档 标 注 基 本 方 法 先 标 出 节 点, 然 后 再 画 图 首 先 我 们 定 义 一 个 \tikzmark 命 令 如 下 : \newcommand\tikzmark[1]{% \tikz[overlay,remember picture] \node[coordinate] (#1) {};% } 其 中 行 尾 的 % 号 用 于 去 掉 后 面 的 多 余 空 格 现 在 就 可 以 用 这 个 命 令 来 标 注 了 例 如 : 这 \tikzmark{a} 个 是 一 个 重 要 的 极 限 公 式 : \[\tikzmark{b}\lim_{x\to\infty}\left(1+\frac1x\right)^x=\mathrm{e}\] [overlay,remember picture] \draw[->] (a) controls +(2em,-3em) (b); 这 个 是 一 个 重 要 的 极 限 公 式 : ( lim 1 + 1 ) x = e x x 注 意 在 标 出 节 点 和 添 加 标 注 这 两 个 步 骤 中,overlay,remember picture 选 项 都 是 必 需 的 这 种 标 注 方 法 需 要 编 译 两 遍 才 能 看 到 最 终 的 结 果 在 制 作 Beamer 演 示 时, 这 种 标 注 的 方 法 会 更 加 有 用 实 际 上, 我 们 也 可 以 直 接 使 用 tikzmark 这 个 功 能 更 加 强 大 的 文 档 标 注 包 3 3 http://wwwctanorg/pkg/tikzmark