let 操作与 tkz-euclide 对比

let 操作与 tkz-euclide 对比

在提出问题之前,先解释一下我为什么会问这个问题。当我开始使用 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-tikzpstricks

一方面tkz-euclide是基于的包Pgf-tikz,另一方面pst-eucl是基于的包pstricks。这些包允许使用宏来指定数学约束,从而绘制欧几里得几何图形。

pgf如果您想要创建几个类似的形状,您需要在通用工具(如或 )pstricks和专门包(如tkz-euclide 或 )之间做出选择pst-eucl

我同意 Herbert 的观点,很难给出正确的答案。我只能说我更喜欢,tikz因为我喜欢语法和文档,但这只是我的观点,这些论点不一定是目的。也许你也会觉得奇怪,我的包语法与tikz。要理解为什么……我还可以告诉你我为什么写tkz-euclide

我的想法和你一样,创建几个类似的欧几里得几何图形。一个很好的工具是,pst-eucl所以我决定基于创建一个类似的工具。和tikz之间有很多相似之处 。我做了一个混合...宏的名称基于,选项基于pst-eucltkz-euclidepst-eucltikz。语法也是混合的。

重要的是你可以tikz混合tkz-euclide参见我对你第一个问题的回答)

结论 :tkz-euclide是一种无需了解 完整文档即可创建类似几何图形的工具。 和也是tikz一样的。pst-euclpstricks

第 2 部分)更新 __let 操作与 tkz-euclide__

现在问题更加明确了。在理想情况下,tkz-euclide这是不必要的。一个很好的解决方案是编写一个库euclide来提供一些有用的工具,以便用简单的代码获取几何图形。我编写了 tkz 的第一个版本,之前有一些pgf/tikz没有操作let的库。现在我需要更新包以添加新的宏供用户​​使用,以及使用类似的东西的intersections可能性name pathlet

tkz-euclide 的一些缺点

a) 该包基于 tikz,但语法不同 b) 如果你使用 tkz-euclide,你不能使用类似letname 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

假设我们有如下约束:

  1. 我们需要更好的包装排版microtype

  2. 有时我们需要用 来注释文档或演示文稿中文本的某些部分beamer

  3. 我们非常需要绘制独立图表。

  4. 有时我们需要绘制涉及3D投影等的3D图。

我的看法如下

  1. 使用microtype包并用 编译主 TeX 输入文件pdflatex

  2. 因为我们用于pdflatex编译主 TeX 文件,所以任何注释都必须使用 TikZ 完成。在大多数情况下,注释非常简单,因此掌握 TikZ 的基本知识就足够了。

  3. 对于 2D 绘图,TikZ 和 PSTricks 都很棒,功能强大。我们可以选择其中之一。使用standalonedocumentclass 编写图表,使用适当的编译器进行编译,并确保所有独立图表都是 PDF 格式,以便可以从主 TeX 输入文件导入它们。

  4. 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。

注意:这是我的个人观点,请纠正我的不好的英语句子(如果有的话)。

相关内容