TikZ 未找到曲线和水平线之间的单个交点

TikZ 未找到曲线和水平线之间的单个交点

发生了什么

错误

! Package pgf Error: No shape named `intersection-1' is known.

在使用 编译以下内容时生成pdfLaTeX

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}

\begin{document}
    \begin{tikzpicture}
        \draw[name path=line,smooth] (0,4.5)--(1.5,4.5);
        \draw[name path=curve,smooth] (1.5,6) to[out=270,in=90] (0,3);
        \draw[name intersections={of=line and curve}] (intersection-1) circle[radius=0.1]; % Error here
    \end{tikzpicture}
\end{document}

当注释掉上述代码中的交叉搜索行时,会生成下图:

在此处输入图片描述

显然,曲线和直线之间恰好存在一个交点。


代码的通用目的

给定一个任意y坐标,例如y=4.5,我想x在给定曲线上找到相应的坐标曲线画好了(y处理完曲线后我才知道坐标是什么。)因此,我创建了水平线(0,4.5)--(1.5,4.5),故意将其延伸到x确保它与曲线相交的方向,然后继续寻找两者之间的交点。找到交点后,我\path转到它,然后调用\pgfgetlastxy以找到x坐标pt(MWE 上未显示)。

目的是将代码纳入LaTeX我硕士研究导师编写的一本现有书籍中,该书即将完成。因此,pdfLaTeX出于实际原因,现阶段不可能将排版系统更改为除此以外的任何系统。


迄今为止的研究

  1. 扎尔科在他们的回答中未找到 TikZ 交叉点建议丢弃代码中的单位(ptcm等),但我的示例没有使用任何单位。
  2. 奎伯比尔贝尔在他们的回答中TikZ 没有找到图和线之间的所有交点建议使用该smooth选项,但上面的示例在绘制曲线和直线时都使用了它,但没有成功。
  3. 贡萨洛·梅迪纳在他们的回答中TikZ 不计算交点敦促删除--我的 MWE 正在使用的坐标和连接器之间的空格,但仍然没有结果。
  4. 扎尔科通知使用 Tikz 实现多条直线和曲线之间的交点错误的原因在于某些曲线根本不相交,但上面 MWE 中的曲线和直线显然相交。
  5. 为了证明该intersections Tikz库能够成功找到类似情况的交集,我运行了代码
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}

\begin{document}
    \begin{tikzpicture}
        \draw[name path=line,smooth] (0,5)--(1.5,5);
        \draw[name path=curve,smooth] (1.5,6) to[out=270,in=90] (0,3);
        \draw[name intersections={of=line and curve}] (intersection-1) circle[radius=0.1];
    \end{tikzpicture}
\end{document}

成功生成

在此处输入图片描述

[谢谢赫佩克里斯蒂安森建议使用,circle而不是不居中和难以看到$\circ$格诺特建议将曲线缩短至y in [3,6]出现问题的部分。


软件规格

pdflatex --version在我的 Windows 10 的 CMD 输出中执行

MiKTeX-pdfTeX 4.0.1 (MiKTeX 20.7)
© 1982 D. E. Knuth, © 1996-2020 Hàn Thế Thành
TeX is a trademark of the American Mathematical Society.
using bzip2 version 1.0.6, 6-Sept-2010
compiled with curl version 7.61.1; using libcurl/7.61.1 WinSSL
compiled with expat version 2.2.6; using expat_2.2.6
compiled with jpeg version 9.3
compiled with liblzma version 50020042; using 50020042
compiled with libpng version 1.6.37; using 1.6.37
compiled with libressl version LibreSSL 2.8.2; using LibreSSL 2.8.2
compiled with MiKTeX Application Framework version 4.0; using 4.0
compiled with MiKTeX Core version 4.0; using 4.0
compiled with MiKTeX Archive Extractor version 4.0; using 4.0
compiled with MiKTeX Package Manager version 4.0; using 4.0
compiled with poppler version 0.60.1
compiled with uriparser version 0.9.2
compiled with zlib version 1.2.11; using 1.2.11

当放置\listfiles在文档顶部时,会将以下信息输出到控制台:

 *File List*
standalone.cls    2018/03/26 v1.3a Class to compile TeX sub-files standalone
shellesc.sty    2019/11/08 v1.0c unified shell escape interface for LaTeX
ifluatex.sty    2019/10/25 v1.5 ifluatex legacy package. Use iftex instead.
   iftex.sty    2020/03/06 v1.0d TeX engine tests
 xkeyval.sty    2014/12/03 v2.7a package option processing (HA)
 xkeyval.tex    2014/12/03 v2.7a key=value parser (HA)
standalone.cfg    2018/03/26 v1.3a Default configuration file for 'standalone' 
class
 article.cls    2019/12/20 v1.4l Standard LaTeX document class
  size10.clo    2019/12/20 v1.4l Standard LaTeX file (size option)
    tikz.sty    2020/01/08 v3.1.5b (3.1.5b)
     pgf.sty    2020/01/08 v3.1.5b (3.1.5b)
  pgfrcs.sty    2020/01/08 v3.1.5b (3.1.5b)
everyshi.sty    2001/05/15 v3.00 EveryShipout Package (MS)
pgfrcs.code.tex
 pgfcore.sty    2020/01/08 v3.1.5b (3.1.5b)
graphicx.sty    2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty    2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg    2016/06/04 v1.11 sample graphics configuration
  pdftex.def    2018/01/08 v1.0l Graphics/color driver for pdftex
  pgfsys.sty    2020/01/08 v3.1.5b (3.1.5b)
pgfsys.code.tex
pgfsyssoftpath.code.tex    2020/01/08 v3.1.5b (3.1.5b)
pgfsysprotocol.code.tex    2020/01/08 v3.1.5b (3.1.5b)
  xcolor.sty    2016/05/11 v2.12 LaTeX color extensions (UK)
   color.cfg    2016/01/02 v1.6 sample color configuration
pgfcore.code.tex
pgfcomp-version-0-65.sty    2020/01/08 v3.1.5b (3.1.5b)
pgfcomp-version-1-18.sty    2020/01/08 v3.1.5b (3.1.5b)
  pgffor.sty    2020/01/08 v3.1.5b (3.1.5b)
 pgfkeys.sty    
pgfkeys.code.tex
 pgfmath.sty    
pgfmath.code.tex
pgffor.code.tex
tikz.code.tex
l3backend-pdfmode.def    2020-08-07 L3 backend support: PDF mode
supp-pdf.mkii
epstopdf-base.sty    2020-01-24 v2.11 Base part for package epstopdf
 ***********

应如何纠正第一个 MWE 中的代码以消除错误,而无需将额外的库加载到文档中?

我知道可能存在其他方法可以根据坐标在曲线上TikZ找到坐标(并且也会感谢提到这些方法的答案),但我主要感兴趣的是了解为什么在上述特定 MWE 中检测不到交点。xyTikZ


更新日期:2021 年 11 月 12 日

  • 删除smooth选项不会消除错误。感谢格诺特建议这一可能的改变。
  • 编译LuaLaTeX也无法解决问题,因为同样的错误! Package pgf Error: No shape named `intersection-1' is known.仍然存​​在。感谢用户202729建议这一可能的改变。
  • 即使坐标或方向度有微小的变化,也可以消除这个问题,因为伊格纳西格诺特注意到了,但我寻求找到一个保留问题中的数字的解决方案。
  • 格诺特在 的 GitHub 页面上打开了一个问题,pgf作为解决该问题的第一步。您可以在以下位置跟踪问题的进展:https://github.com/pgf-tikz/pgf/issues/1076. 非常感谢格诺特感谢他们的贡献!

更新日期:2021 年 11 月 13 日

我想要感谢ABC找到该问题的明显简单的解决方案(见下文!)

答案1

免责声明:这不是一个完整的答案,因为它不能解决根本问题,而只是允许人们逃避其后果,即你可以称之为解决方法。

tikz计算两条路径的交点时,它会按照其中一条路径进行排序,默认是按照第一条路径排序。然而,在此主题我们发现,如果排序路径是一条线,这种方法并不总是能按预期工作。事实上,如果我们改变路径的顺序:

name intersections={of=line and curve} -> name intersections={of=curve and line}

或者tikz按照第二条路径排序:

name intersections={of=line and curve,sort by=curve}

问题就解决了。但是请注意,这个bend left=0技巧在这种情况下似乎不起作用(除非我遗漏了什么)。(我保留了smooth代码中的键,尽管它们没有效果,因为路径不包含plots,只是为了重申问题与键无关smooth。)

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}

\begin{document}
    \begin{tikzpicture}
        \draw[name path=line,smooth] (0,4.5) -- (1.5,4.5);
        \draw[name path=curve,smooth] (1.5,6) to[out=270,in=90] (0,3);
        \draw[name intersections={of=curve and line}] (intersection-1) circle[radius=0.1]; % Error here
    \end{tikzpicture}

    \begin{tikzpicture}
        \draw[name path=line,smooth] (0,4.5) -- (1.5,4.5);
        \draw[name path=curve,smooth] (1.5,6) to[out=270,in=90] (0,3);
        \draw[name intersections={of=line and curve,sort by=curve}] (intersection-1) circle[radius=0.1]; % Error here
    \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容