Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <vb328v$20a9j$1@solani.org>
Deutsch   English   Français   Italiano  
<vb328v$20a9j$1@solani.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!3.eu.feeder.erje.net!2.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: Ulrich D i e z <ud.usenetcorrespondence@web.de>
Newsgroups: comp.text.tex
Subject: Re: [LaTeX][PGF/TikZ] Undefined control sequence error for PGF
 intersections.
Date: Mon, 2 Sep 2024 02:52:46 +0200
Message-ID: <vb328v$20a9j$1@solani.org>
References: <10c8b515e70ecda9ad95fc1529ff3b102da812e4.camel@tilde.green>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Injection-Date: Mon, 2 Sep 2024 00:52:48 -0000 (UTC)
Injection-Info: solani.org;
	logging-data="2107699"; mail-complaints-to="abuse@news.solani.org"
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
Cancel-Lock: sha1:Yhq9xNrdjqsVmfhJQ2hwohVLE78=
Content-Language: en-US
X-User-ID: eJwFwQkBACAIBLBK8h0QR0D6R3AzAaFdYVBb28g4Uv2YQw6PpgSvI7as8DDbE0WXm1xu7vsP7BFB
In-Reply-To: <10c8b515e70ecda9ad95fc1529ff3b102da812e4.camel@tilde.green>
Bytes: 7086
Lines: 172

Annada Behera wrote:

> \documentclass{standalone}
>     \usepackage{tikz, amsmath}
>     \usetikzlibrary{intersections}
>     \begin{document}\begin{tikzpicture}
>         
>         % Plots
>         \draw[very thick, smooth, samples=20, domain=-6.28:6.28] 
>             [red,  name path=line] (0,0) plot (\x, \x);
>         \draw[very thick, smooth, samples=20, domain=-6.28:6.28] 
>             [blue, name path=sine] (0,0) plot (\x, {\x + sin(\x r)});
>         
>         % Drawing the dots
>         \fill[name intersections={of=line and sine, name=i, total=\t}, black]
>             \foreach \s in {1,...,\t} {(i-\s) circle (2pt)};
>         
>     \end{tikzpicture}\end{document}
> 
> Now this code works as expected. But I also wanted to draw dashed lines from
> the intersections to each axes.
> 
>     % Axes
>     \draw [<->](-6.28, 0) -- (6.28, 0);
>     \draw [<->](0, -6.28) -- (0, 6.28);
> 
>     % Mark intersection points and draw dashed lines
>     \foreach \n in {1,...,\t} {
>         \path ({i-\n}) coordinate (i\n); %    <--- Error Here
>         \fill[black]  (i\n) circle (2pt);
>         \draw[dashed] (i\n) -- (i\n |- 0,0);
>         \draw[dashed] (i\n) -- (0,0 -| i\n);
>     }
>
> In this part, pdflatex (my distro is TeX Live 2024) throws an error what
> I don't understand,
> 
>     ! Undefined control sequence.
>     \UseTextAccent  ...p \@firstofone \let \@curr@enc 
>                                                       \cf@encoding \@use@text@en...
>     l.28     }
> 
> What is undefined?


When you say

\errorcontextlines=10000
\documentclass{...

, the error-message is:

! Undefined control sequence.
\UseTextAccent  ...p \@firstofone \let \@curr@enc
                                                  \cf@encoding
\@use@text@en...

\?-cmd ...sname \csname ?\string #1\endcsname \fi
                                                  \csname \cf@encoding
\stri...

\pgffor@dots@charcheck ...@dots@charcheck@temp {#1
                                                  }\expandafter
\expandafter...

\pgffor@dots@value@process ...value \pgffor@@stop

\ifpgffor@alphabeticsequen...

\pgffor@dotsscanend ...@process {\pgffor@dotsend }

\pgffor@dots@value@process...

\pgffor@values ->1,...,\t ,
                            \pgffor@stop ,
l.27     }


and you see that \t in "\foreach \n in {1,...,\t} {...}" is undefined,


The problem is that the macro \t comes into being while a TikZ-path is
evaluated - \fill is a macro which expands to "\path..." - while TikZ
does not do control-sequence-evaluation/macro-expansion as usual while
parsing/evaluating/carrying out a TikZ-path-directive.

So you face the nice problem that \t being defined is restricted to the
scope of that TikZ-path-directive while inside TikZ-path-directives you
cannot easily use macros/control-sequences as directives for saving \t
away as a global macro which is available outside the scope of the
\fill-path-directive also.

As \t denotes a natural number, you can work around this problem by as a
component of the TikkZ-path-directive specifying a TikZ-coordinate where
one component (either the X-component or the Y-component) comes from \t,
using the measurement-unit sp (scaled point) and later retrieving that
component of the TikZ-coordinate and using it with \number, hereby
taking into account that using a TeX-\dimen or a TeX-\skip or a
LaTeX-length with \number directly yields the numerical value which
belongs to the quantity in question when it is expressed as a multiple
of the measurement-unit sp (scaled point):



%\errorcontextlines=10000
\documentclass{standalone}
\usepackage{tikz, amsmath}
\usetikzlibrary{intersections}

\newlength\scratchlength

\begin{document}

\begin{tikzpicture}

% Plots
\draw[very thick, smooth, samples=20, domain=-6.28:6.28]
     [red,  name path=line] (0,0) plot (\x, \x);
\draw[very thick, smooth, samples=20, domain=-6.28:6.28]
     [blue, name path=sine] (0,0) plot (\x, {\x + sin(\x r)});

% Draw the dots and use \t for saving a coordinate so that
% \t can later be retrieved outside the scope of the \fill-path
% as well:
\fill [name intersections={of=line and sine, name=i, total=\t},
       black]
      \foreach \s in {1,...,\t} {(i-\s) circle (2pt)}
      % Before ending with a semicolon (;) the path-specifica-
      % tion started via \fill, let's save total/\t as the
      % y-value of a TikZ-coordinate whose name is "total";
      % specify the unit sp (scaled point) as all lengths in
      % TeX internally are calculated/rounded to be integer
      % multiples of 1sp; thus when specifying sp you don't get
      % rounding-errors when later retrieving the value:
      coordinate (total) at (0pt, \t sp);

% Extraxt to \scratchlength the y-coordinate of the pgfpoint
% which forms the center-anchor of the coordinate-node whose
% name is "total" :
\pgfextracty{\scratchlength}{\pgfpointanchor{total}{center}}%
% When you use a TeX-\dimen or TeX-\skip/LaTeX-length with
% \number directly, you get the numerical value which belongs
% to the (unstretched and unshrinked) quantity in question
% when it is expressed as a multiple of the measurement-unit
% sp(scaled point).
% So we are lucky as in the begin dimensions for coordinates
% were provided with measurement unit sp:
\edef\t{\number\scratchlength}%
% Now we have \t defined outside the scope of the \fill-path
% and can use it in next \foreach-loop.
%\show\t

% Axes
\draw [<->](-6.28, 0) -- (6.28, 0);
\draw [<->](0, -6.28) -- (0, 6.28);

% Mark intersection points and draw dashed lines
\foreach \n in {1,...,\t} {
    \path ({i-\n}) coordinate (i\n); %    <--- Error Here
    \fill[black]  (i\n) circle (2pt);
    \draw[dashed] (i\n) -- (i\n |- 0,0);
    \draw[dashed] (i\n) -- (0,0 -| i\n);
}

\end{tikzpicture}

\end{document}



Sincerely

Ulrich