Seite 1 von 1

Grid automatisch anpassen

Verfasst: Mi 19. Jun 2024, 16:02
von ThoRie
Hallo ich habe ein Problem mit folgendem Code:
\documentclass[a4paper]{article}
\usepackage{tikz}
\begin{document}
	\tikz \draw(0,0) grid (\linewidth,3);
\end{document}
Und zwar wäre es schön, wenn das Grid rechts nur bis zum letzten vollen Kästchen geht. Es ist ja derzeit etwas länger. Leider kommt es sehr oft bei mir vor, sodass jedes mal die Breite manuell anzupassen echt nervt. Gibt es da eine Möglichkeit, dass zu automatisieren? Also quasi so, dass er das größtmögliche, vollständige Grid einzeichnet?

Re: Grid automatisch anpassen

Verfasst: Sa 22. Jun 2024, 09:53
von Rolli
Wie wäre es denn damit:
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage{fp}
\usepackage{lengthconvert}

\begin{document}
\raggedright

\makeatletter
\FPeval\myLineWidth{round(0.035146*\strip@pt\dimexpr\linewidth\relax-0.5,0)}
\makeatother

\textbackslash{}linewidth = \Convert{\linewidth}\\[2ex]

\tikz\draw(0,0) grid (\linewidth,3);\\[.5ex]
\tikz\draw(0,0) grid (\myLineWidth,3);\\[2ex]

\setlength{\linewidth}{3.7cm}
\makeatletter
\FPeval\myLineWidth{round(0.035146*\strip@pt\dimexpr\linewidth\relax-0.5,0)}
\makeatother

\textbackslash{}linewidth = \Convert{\linewidth}\\[2ex]

\tikz\draw(0,0) grid (\linewidth,3);\\[.5ex]
\tikz\draw(0,0) grid (\myLineWidth,3);\\[2ex]

\newpage

\setlength{\linewidth}{3.00001cm}
\makeatletter
\FPeval\myLineWidth{round(0.035146*\strip@pt\dimexpr\linewidth\relax-0.5,0)}
\makeatother

\textbackslash{}linewidth = \Convert{\linewidth}\\[2ex]

\tikz\draw(0,0) grid (\linewidth,3);\\[.5ex]
\tikz\draw(0,0) grid (\myLineWidth,3);\\[2ex]

\setlength{\linewidth}{2.99999cm}
\makeatletter
\FPeval\myLineWidth{round(0.035146*\strip@pt\dimexpr\linewidth\relax-0.5,0)}
\makeatother

\textbackslash{}linewidth = \Convert{\linewidth}\\[2ex]

\tikz\draw(0,0) grid (\linewidth,3);\\[.5ex]
\tikz\draw(0,0) grid (\myLineWidth,3);\\[2ex]

\end{document}


Re: Grid automatisch anpassen

Verfasst: Sa 22. Jun 2024, 09:59
von Rolli
Also quasi so, dass er das größtmögliche, vollständige Grid einzeichnet?
Da müsstest Du definieren, was größtmöglich bedeutet. Mein Vorschlag oben rundet stets ab; d. h. bsp. bei Zeilenbreite 2,9999 cm werden nur zwei Kästchen ausgegeben. Wenn Du bsp. bei Zeilenbreite 2,8000 cm drei Kästchen haben willst, dann den round(...) anpassen: round(... - 0.5) ist ja bekanntlich identisch zu floor(...) (für positive Argumente).
Gruß vom Rolli