tikzpicture: haz una parada \foreach \draw [yshift=\n*\u] en la coordenada 1

tikzpicture: haz una parada \foreach \draw [yshift=\n*\u] en la coordenada 1

Considere la sección inferior de este MWE, es decir, todo lo que aparece a continuación ( % Image Ruler y):

\documentclass{article}

\usepackage{mwe} % Dummy images
\usepackage[skins]{tcolorbox}
\tcbuselibrary{raster}

\usepackage{tikz}
\usepackage{tikzpagenodes} % current page text area.center
\usetikzlibrary{calc} 
\pgfkeys{/tikz/savevalue/.code 2 args={\global\edef#1{#2}}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\ShowHelps{0} %    1 'yes'        0   'no'

\newcommand{\UOneCoordinateX}{0.2}
\newcommand{\UOneCoordinateY}{0.09}
\newcommand{\UTwoCoordinateX}{0.2}
\newcommand{\UTwoCoordinateY}{0.284}

\newcommand{\GridSize}{0.05}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\begin{tikzpicture}[
remember picture, overlay, % page center 1/3
shift={(current page.center)}, % page center 2/3
font=\sffamily,
Help/.style={font=\Huge, red}
]
\node[anchor=center, %south west,
inner sep=0 pt] (myimage) at (0,0) {

\begin{tcbitemize}[size=tight, halign=center, colback=gray, raster equal skip=0pt, raster left skip=0mm, raster right skip=0mm, raster width=1\textwidth, boxrule = 0pt, frame hidden]
\tcbitem \includegraphics[width=\textwidth]{example-image.jpg}
\tcbitem \includegraphics[width=\textwidth]{example-image.jpg}
\end{tcbitemize}  
};
\begin{scope}[x={($2*(myimage.east)$)},y={($2*(myimage.north)$)},
shift={(myimage.south west)} % page center 3/3
]

% Restrict the draw area
\clip (-0.1,-0.1) rectangle (1.1,1.1);

%%%%%ShowHelps
\path[] (\UOneCoordinateX,\UOneCoordinateY) coordinate(U1) -- (\UTwoCoordinateX,\UTwoCoordinateY) coordinate(U2);
\ifnum\ShowHelps=1 \draw[Help] (U1) circle(2pt) node[label=left:U1]{} -- (U2) circle(2pt) node[label=left:U2]{};\fi % show unitlength line

\path let \p1=($(U2)-(U1)$) in 
\pgfextra{  \pgfmathsetlengthmacro{\unitlength}{veclen(\x1,\y1)}   }
[savevalue={\u}{\unitlength}];
\ifnum\ShowHelps=1 \node[Help] at (0.725,0.25) {unitlength U1U2 = \u}; \fi%<--- show unitlength
\ifnum\ShowHelps=1 \draw[blue, transform canvas={xshift=2mm}] (U1) -- +(0,\u);\fi  % Test

% Image Ruler y
\draw[very thick] (0,0) coordinate(B) -- (0, 1);
\foreach \n in {0,1,...,10}{%%
\draw[very thick] ([yshift=\n*\u]B) -- +(-3mm,0) node[left]{
\ifnum\n=0 \else \ifnum\n=1 \n\,cm \else \n \fi\fi}; 
}%%
\foreach \n in {0.1,0.2,...,10}{%% 
\draw[] ([yshift=\n*\u]B) -- +(-1.5mm,0);
}%%

\end{scope}
\end{tikzpicture}

\end{document}

A saber:

\draw[very thick] (0,0) coordinate(B) -- (0, 1);
\foreach \n in {0,1,...,10}{%%
\draw[very thick] ([yshift=\n*\u]B) -- +(-3mm,0) node[left]{
\ifnum\n=0 \else \ifnum\n=1 \n\,cm \else \n \fi\fi}; 
}%%
\foreach \n in {0.1,0.2,...,10}{%% 
\draw[] ([yshift=\n*\u]B) -- +(-1.5mm,0);
}%%

La 1entrada \draw[very thick] (0,0) coordinate(B) -- (0, 1);se asegura de que la línea vertical gruesa de la regla se detenga en la coordenada 1. ¡Esto es genial!

Sin embargo, ¿cómo hacer que las líneas pequeñas también se detengan en 1, sin cambiar el recorte ( \clip (-0.1,-0.1) rectangle (1.1,1.1);)?

Se podría hacer cambiando el 10in \foreach \n in {0.1,0.2,...,10}{%%a 5, pero eso no es lo que pretendo, ya que no sé de antemano cuántos números necesitaré. Todo lo que sé es que querré detenerme en la coordenada y 1, de la misma manera que la línea vertical gruesa se detiene en 1usar \draw[very thick] (0,0) coordinate(B) -- (0, 1);.

Aquí hay una captura de pantalla:

ingrese la descripción de la imagen aquí

Entonces, en resumen:

Necesito un método para poder extraer la coordenada actual de y... No sé cuantas veces tendré que incrementar en bucle los centímetros y los milímetros, lo único que sé es que debería parar en 1

Respuesta1

Método usandodecoration ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usepackage{mwe}

\newcount\tick
\newcount\majortick
\newif\ifmajortick

\pgfdeclaredecoration{ruler}{initial}{
  \state{initial}[
    width=0mm, next state=ruler,
    persistent precomputation={
      \tick=10
      \majortick=0
    }
  ]{
  }
  \state{ruler}[width=1mm,
    persistent precomputation={
      \ifnum \tick=10\relax
        \majorticktrue
        \tick=0
      \else
        \majortickfalse
      \fi
      \advance\tick by 1
    },
    persistent postcomputation={
      \ifnum \tick=10\relax
        \advance\majortick by 1
      \fi
    }
  ]{
    \ifmajortick
      \pgfscope
      \pgftransformrotate{-90}
      \pgftransformshift{\pgfpoint{-4mm}{0pt}}
      \pgfnode{rectangle}{east}{\the\majortick}{}{\pgfusepath{}}
      \endpgfscope
    \fi
    \pgfpathmoveto{\pgfpointorigin}
    \ifmajortick
      \pgfsetlinewidth{1pt}
      \pgfpathlineto{\pgfpoint{0pt}{3mm}}
    \else
      \pgfsetlinewidth{0.4pt}
      \pgfpathlineto{\pgfpoint{0pt}{1mm}}
    \fi
    \pgfusepath{stroke}
  }
  \state{final}{}
}

\begin{document}
\begin{tikzpicture}
\node[inner sep=0pt] (a) {\includegraphics[width=.5\textwidth]{example-image}};
\draw[postaction=decorate, decoration=ruler] (a.south west) -- (a.north west);
\end{tikzpicture}
\end{document}

Respuesta2

No creo que realmente lo necesites \clip (-0.1,-0.1) rectangle (1.1,1.1);debido al trabajo con tcolorbox.

Pero como respuesta a la pregunta "Cómo recortar el eje y":
necesita saber cuántos puntos es "1", la altura de la imagen. Y esto se mide exactamente de la misma manera, como se midió la "longitud unitaria" en el código:

\path[draw=none] (0,0) coordinate(LL) -- (0,1) coordinate(UL);
\path let \p1=($(UL)-(LL)$) in 
\pgfextra{  \pgfmathsetlengthmacro{\ImageHeight}{veclen(\x1,\y1)}   }
[savevalue={\h}{\ImageHeight}];

\foreach \n in {0.1,0.2,...,10}{%%
\pgfmathsetmacro\Yshift{\n*\u}
\pgfmathsetmacro\YshiftTest{\n*\u < \h ?  1 : 0}
\ifnum\YshiftTest=1 \draw[] ([yshift=\Yshift]B) -- +(-1.5mm,0); \else\fi
}%%
\ifnum\ShowHelps=1
\draw[red] (LL) circle(2pt) node[below]{LL};
\draw[red] (UL) circle(2pt) node[above]{UL};
\node[right=3mm, Help] at (UL) {Image Height h=\h};    \fi 

ingrese la descripción de la imagen aquí

\documentclass{article}

\usepackage{mwe} % Dummy images
\usepackage[skins]{tcolorbox}
\tcbuselibrary{raster}

\usepackage{tikz}
\usepackage{tikzpagenodes} % current page text area.center
\usetikzlibrary{calc} 
\pgfkeys{/tikz/savevalue/.code 2 args={\global\edef#1{#2}}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\ShowHelps{1} %    1 'yes'        0   'no'

\newcommand{\UOneCoordinateX}{0.2}
\newcommand{\UOneCoordinateY}{0.09}
\newcommand{\UTwoCoordinateX}{0.2}
\newcommand{\UTwoCoordinateY}{0.284}

\newcommand{\GridSize}{0.05}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\begin{tikzpicture}[
remember picture, overlay, % page center 1/3
shift={(current page.center)}, % page center 2/3
font=\sffamily,
Help/.style={font=\large, text=red, fill=yellow}
]
\node[anchor=center, %south west,
inner sep=0 pt] (myimage) at (0,0) {

\begin{tcbitemize}[size=tight, halign=center, colback=gray, raster equal skip=0pt, raster left skip=0mm, raster right skip=0mm, raster width=1\textwidth, boxrule = 0pt, frame hidden]
\tcbitem \includegraphics[width=\textwidth]{example-image.jpg}
\tcbitem \includegraphics[width=\textwidth]{example-image.jpg}
\end{tcbitemize}  
};
\begin{scope}[x={($2*(myimage.east)$)},y={($2*(myimage.north)$)},
shift={(myimage.south west)} % page center 3/3
]

% Restrict the draw area
\clip (-0.1,-0.1) rectangle (1.1,1.1);
\ifnum\ShowHelps=1 \draw[red] (-0.1,-0.1) rectangle (1.1,1.1);\fi

%%%%%ShowHelps
\path[] (\UOneCoordinateX,\UOneCoordinateY) coordinate(U1) -- (\UTwoCoordinateX,\UTwoCoordinateY) coordinate(U2);
\ifnum\ShowHelps=1 \draw[red] (U1) circle(2pt) node[label=left:U1]{} -- (U2) circle(2pt) node[label=left:U2]{};\fi % show unitlength line

\path let \p1=($(U2)-(U1)$) in 
\pgfextra{  \pgfmathsetlengthmacro{\unitlength}{veclen(\x1,\y1)}   }
[savevalue={\u}{\unitlength}];
\ifnum\ShowHelps=1 \node[Help] at (0.3,0.5) {unitlength U1U2 = \u}; \fi%<--- show unitlength
\ifnum\ShowHelps=1 \draw[blue, transform canvas={xshift=2mm}] (U1) -- +(0,\u);\fi  % Test



% Image Ruler y
\draw[very thick] (0,0) coordinate(B) -- (0, 1);
\foreach \n in {0,1,...,10}{%%
\draw[very thick] ([yshift=\n*\u]B) -- +(-3mm,0) node[left]{
\ifnum\n=0 \else \ifnum\n=1 \n\,cm \else \n \fi\fi}; 
}%%

\path[draw=none] (0,0) coordinate(LL) -- (0,1) coordinate(UL);
\path let \p1=($(UL)-(LL)$) in 
\pgfextra{  \pgfmathsetlengthmacro{\ImageHeight}{veclen(\x1,\y1)}   }
[savevalue={\h}{\ImageHeight}];

\foreach \n in {0.1,0.2,...,10}{%%
\pgfmathsetmacro\Yshift{\n*\u}
\pgfmathsetmacro\YshiftTest{\n*\u < \h ?  1 : 0}
\ifnum\YshiftTest=1 \draw[] ([yshift=\Yshift]B) -- +(-1.5mm,0); \else\fi
}%%
\ifnum\ShowHelps=1
\draw[red] (LL) circle(2pt) node[below]{LL};
\draw[red] (UL) circle(2pt) node[above]{UL};
\node[right=3mm, Help] at (UL) {Image Height h=\h};    \fi 
\end{scope}
\end{tikzpicture}

\end{document}

información relacionada