在提出问题之前,先解释一下我为什么会问这个问题。当我开始使用 TeX 时,我很幸运地开始使用 LaTeX (xelatex) 而不是 LuaTex。但现在作为更有经验的用户,我不想把事情交给运气。
我的问题是:
因为我想创建几个类似的形状,我不想回去修复它们,你能告诉我你认为哪种方法可以解决此问题吗
从 (B) 经过以 (A) 为中心的圆弧,自动计算 (AB) 距离
为我提供了更多的可能性 - 选择。let 操作或方法tkz-euclide当然还有方法技巧(虽然我没有用过但是永远不会太晚)
我不知道我的问题是否正确,因为让操作不是包裹......但我希望你理解。
我只是想告诉我每种方法的优点和缺点(我不想急于给自己做出正确的选择,而是希望用户通过投票来决定)。
我知道我的问题比较笼统,甚至可能比较封闭……但我的担心是真的
(因为我的英语对我没有帮助,如果你理解我的问题的意思,请在必要时进行纠正以获得更好的理解)
1ο更新:
澄清一下……我主要担心的是让操作和tkz-euclide而不是关于 tikz 和 PSTricks 之间的功能差异,我认为这在你指出的链接中已经涵盖了
答案1
我可以帮你澄清这个问题。你需要补充pst-eucl
你的问题。最重要的是
因为我想创建几个类似的形状,但又不想回去修复它们,您能否告诉我,您认为哪种方法能为我提供更多可能性 - 选项。
第 1 部分)__Tikz Pstricks tkz-euclide pst-eucl__
首先,您不能将我的小包与和之tkz-euclide
类的主要包进行比较。Pgf-tikz
pstricks
一方面tkz-euclide
是基于的包Pgf-tikz
,另一方面pst-eucl
是基于的包pstricks
。这些包允许使用宏来指定数学约束,从而绘制欧几里得几何图形。
pgf
如果您想要创建几个类似的形状,您需要在通用工具(如或 )pstricks
和专门包(如tkz-euclide
或 )之间做出选择pst-eucl
。
我同意 Herbert 的观点,很难给出正确的答案。我只能说我更喜欢,tikz
因为我喜欢语法和文档,但这只是我的观点,这些论点不一定是目的。也许你也会觉得奇怪,我的包语法与tikz
。要理解为什么……我还可以告诉你我为什么写tkz-euclide
。
我的想法和你一样,创建几个类似的欧几里得几何图形。一个很好的工具是,pst-eucl
所以我决定基于创建一个类似的工具。和tikz
之间有很多相似之处 。我做了一个混合...宏的名称基于,选项基于pst-eucl
tkz-euclide
pst-eucl
tikz
。语法也是混合的。
重要的是你可以tikz
混合tkz-euclide
参见我对你第一个问题的回答)
结论 :tkz-euclide
是一种无需了解 完整文档即可创建类似几何图形的工具。 和也是tikz
一样的。pst-eucl
pstricks
第 2 部分)更新 __let 操作与 tkz-euclide__
现在问题更加明确了。在理想情况下,tkz-euclide
这是不必要的。一个很好的解决方案是编写一个库euclide
来提供一些有用的工具,以便用简单的代码获取几何图形。我编写了 tkz 的第一个版本,之前有一些pgf/tikz
没有操作let
的库。现在我需要更新包以添加新的宏供用户使用,以及使用类似的东西的intersections
可能性name path
let
。
tkz-euclide 的一些缺点
a) 该包基于 tikz,但语法不同 b) 如果你使用 tkz-euclide,你不能使用类似let
或name path
类的东西。可以混合语法和代码,但我同意这并不令人满意。c) 像 Tikz 这样的计算依赖于TeX
,这是一件坏事。也许鲁阿可以改变很多事情。我同意垃圾收集器的观点,带有 postscript 的 Pstricks 更适合进行复杂的计算。
优点
如果你只想绘制几何图形,该软件包可以方便地创建多种形状。如果你想使用 tikz
最近的一个例子(昨天),下面的代码显示了一个错误:
\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usetikzlibrary{through,intersections}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=-0.5,xmax=14.5,ymin=-0.5,ymax=7]
\tkzClip
\tkzDefPoints{0/0/A, 13/0/B}
\tkzDefMidPoint(A,B) \tkzGetPoint{M}
\tkzDefLine[orthogonal=through B](A,B) \tkzGetPoint{C}
\tkzInterLC(B,C)(B,M) \tkzGetSecondPoint{C}
\tkzInterLC(A,C)(C,B) \tkzGetFirstPoint{D}
%\node [name path=ci,circle through=(B)] at (C) {};
%\path [name path=A--C] (A) -- (C);
%\path [name intersections={of=ci and A--C,by={D}}];
\tkzInterLC(A,B)(A,D) \tkzGetSecondPoint{S}
\tkzDrawSegment[color=red](A,S)
\tkzDrawSegment[color=blue](S,B)
\tkzDrawSegment[thin](A,C)
\tkzDrawSegment[thin](B,C)
\tkzDrawArc[delta=10](C,D)(B)
\tkzDrawArc[delta=10](B,C)(M)
\tkzDrawArc[delta=10](A,S)(D)
\tkzDrawPoints(A,B,C,D,S,M)
\tkzLabelPoints[above left](A,B,C,D,S,M)
\end{tikzpicture}
\end{document}
结果似乎不错,但如果你放大查看 B 中的图形,你会看到:
这可能是舍入错误。错误来自宏\tkzInterLC
。解决方案是使用 Tikz 中的一些代码,我可以用\tkzInterLC(A,C)(C,B) \tkzGetFirstPoint{D}
以下代码替换:
\node [name path=ci,circle through=(B)] at (C) {};
\path [name path=A--C,red] (A) -- (C);
\path [name intersections={of=ci and A--C,by={D}}];
您可以看到来自 tikz 的代码非常不同并且不太简洁。
这很讽刺。我使用了fp package
软件包tkz
来避免这些问题(tikz 中还有其他类似的问题),但这似乎不够。
结论。Tikz 在很多方面都非常有用,我认为研究这个工具是个好主意。如果你没有很多时间,而且只想画几何图形,那么 Tikztkz-euclide
可以帮到你。很明显,只用 Tikz 就可以画出所有的图片,Tikz
但有时当你想画复杂的图形时,这并不容易(但 Tikz 不是数学工具!)。
答案2
这是另一条较长的评论。我认为您对 TikZ 中的各种选项感到不知所措,我认为这是一大优势。首先是这个 let 操作...
TikZ/PGF 具有分层结构。TikZ 部分是前端,您可以直接输入要执行的操作,我无法过分强调这方面投入了多少心思(PSTricks 的影响也很明显)。但那些字面意思和易于使用的内容被映射回较低级别的 PGF 命令,例如:
\draw (0,0) -- (1,1);
大致映射到
\pgfpathmoveto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{1cm}{1cm}}
\pgfusepath{stroke}
这是手册等中提到的较低级别。这些再次映射到系统级命令流,如(我在这里真的很近似)
\pgfsys@moveto{0pt}{0pt}
\pgfsys@lineto{1cm}{1cm}
\pgfsys@stroke
最后这些实际上非常方便,因为它们会根据您的编译驱动程序转换为 PDF 或 PS 特制版,而 PSTricks 仅使用强大的 PostScript。现在,当您启动 let 操作时,它会引发一条指令,该指令会暂停当前路径构造,计算一些内容(例如长度和角度),就像我们在上一个问题中所做的那样,并将其记录到一些宏中,\pgfextra{...}
例如等。然后使用记住的那些宏值恢复路径。\p1
\n2
回到 PSTricks 的讨论,我想你已经知道它与 TikZ 相比有多强大,但它的可用性和学习曲线的陡峭性往往会成为阻碍。但这不是主要障碍,但让我们把这个讨论留给相关问题。我们都向 Herbert 致敬。还有 Asymptote,这是另一个怪物,但这又不相关。
我们还有 TKZ 系列,它是相反方向的一层,即它建立在 TikZ 之上。它们再次是我们 Alain Matthes(或我们所知道的 Altermundus)的伟大成就。换句话说,它的命令在后台调用 TikZ 和 PGF 命令。因此,其中一些可能会在后台使用let
或,\pgfextra{}
但使用起来非常简单,而且它确实可以很好地模拟,而无需在每次想要标记角度等时pst-eucl
输入或任何其他内容。let
长话短说,这都是两个半主要家族:TikZ/PGF、PSTricks 和 Asymptote。在这些家族中,你有很多变化,但它们仍然都回到相同的原始命令。所以,你只需要决定你想做什么,然后选择最简单的方法。
答案3
假设我们有如下约束:
我们需要更好的包装排版
microtype
。有时我们需要用 来注释文档或演示文稿中文本的某些部分
beamer
。我们非常需要绘制独立图表。
有时我们需要绘制涉及3D投影等的3D图。
我的看法如下
使用
microtype
包并用 编译主 TeX 输入文件pdflatex
。因为我们用于
pdflatex
编译主 TeX 文件,所以任何注释都必须使用 TikZ 完成。在大多数情况下,注释非常简单,因此掌握 TikZ 的基本知识就足够了。对于 2D 绘图,TikZ 和 PSTricks 都很棒,功能强大。我们可以选择其中之一。使用
standalone
documentclass 编写图表,使用适当的编译器进行编译,并确保所有独立图表都是 PDF 格式,以便可以从主 TeX 输入文件导入它们。PSTricks 在 3D 绘图方面更胜一筹。参见Manuel Luque 的博客看看 PSTricks 在 3D 绘图方面有多复杂。使用
standalone
文档类编写图表,使用latex-dvips-ps2pdf
(更快)或xelatex
(更慢)进行编译,以获得可用于主 TeX 输入文件的 PDF 输出。
概括:
如果你受到上述所有限制的约束
如果您的时间和内存有限,我认为花时间掌握 PSTricks 应该是正确的道路。:-) 或者等待某人为 TikZ 创建更好的 3D 支持会浪费时间。
您需要考虑将 PSTricks 作为主要工具并将 TikZ 作为第二工具(仅用于 pdflatex 编译中的内联注释)应该比将 TikZ 作为主要工具并将 PSTricks 作为第二工具(仅用于 3D 绘图支持)更有效。
如果您不需要 3D 功能,则仅使用 TikZ。
- 如果您不需要在文本或演示文稿中使用内联注释
beamer
,请仅使用 PSTricks。
注意:这是我的个人观点,请纠正我的不好的英语句子(如果有的话)。