tikz – usando o espaço restante de uma linha de texto para padrão quadrado

tikz – usando o espaço restante de uma linha de texto para padrão quadrado

Para minhas aulas de matemática estou procurando uma maneira fácil de preencher o espaço restante de uma linha com um padrão quadrado. Existem algumas desvantagens comleaders (alinhamento, vejapreenchimento automático com padrão quadrado (líderes vs. tikz)), então usei as explicações emExiste uma maneira de medir o espaço restante de uma linha de texto?.

\documentclass{article}

\usepackage{tikzpagenodes}
\usepackage{etoolbox}

\usetikzlibrary{calc}       

\newlength{\whatsleft}
\newcommand{\measureremainder}[2]{%
    \begin{tikzpicture}[overlay,remember picture]
    % Measure distance to right text border
    \path let \p0 = (0,0), \p1 = (current page text area.east) in
    [/utils/exec={\pgfmathsetlength#1{floor((\x1-\x0)/#2)*#2}\global#1=#1}];
    \end{tikzpicture}%
}

\newcommand{\mysquarefill}[4][r]{%
    \measureremainder{\whatsleft}{#2}%
    \ifstrequal{#1}{l}{}{\hfill}%
    \lower#4\hbox{\begin{tikzpicture}%
    \draw[step=5mm,color=gray](0,0) grid (\whatsleft,#3);
    \end{tikzpicture}}%
    \ifstrequal{#1}{c}{\hfill\mbox{}}{}%
}   


\begin{document}

\begin{itemize}
\item $\frac{8}{15} + \frac{7}{12}+ \frac{5}{12} +2=$\mysquarefill[l]{5mm}{10mm}{4mm}
\item $\frac{3}{4}$ von $ \frac{2}{5}=$\mysquarefill[r]{5mm}{15mm}{7mm}
\item $\frac{15}{28}\cdot\frac{14}{30}=$\mysquarefill[r]{5mm}{10mm}{4mm}
\end{itemize}

\end{document}

Isso produz:

insira a descrição da imagem aqui

Agora gostaria de simplificar o código e principalmente combinar as duas macros. Como faço para usar algo como

\draw[step=5mm,color=gray](0,0) grid (floor((x-coordinate-of(current page text area.east) - x-coordinate-of(0,0))/#2)*#2,#3);

com #2=size of squarese #3=height of squareblock?

E existe uma solução mais fácil para o mecanismo esquerdista/direito/central?

Responder1

Não consigo ver qual é a sua pergunta real. (Por que a resposta de @frougon não é satisfatória) (Você mencionou alinhamento. De quê? Horizontalmente ou verticalmente? Só você sabe o que quer.)

De qualquer forma, proponho a seguinte construção que utiliza TikZ para desenhar quadrados e usar \leaderspara preencher espaços. Se você quiser personalizar quadrados, brinque com TikZ. Se você quiser alinhar corretamente, brinque com o TeX. Divirta-se.

\documentclass{article}

\usepackage{tikz}

\begin{document}

\newbox\astackofsquares
\def\mysquarefill#1#2{
    \setbox\astackofsquares=\hbox{%
        \tikz[x=#1,y=#1,baseline=#1*#2/2-.5ex]{
            \path(0,0)(1,#1*#2);
            \begin{pgfinterruptboundingbox}
                \draw foreach\i in{1,...,#2}{(0,\i-1)rectangle(1,\i)};
            \end{pgfinterruptboundingbox}
        }%
    }
    \leaders\copy\astackofsquares\hfill\hbox{}
}

\begin{itemize}
    \item $\frac{8}{15}+\frac{7}{12}+\frac{5}{12} +2=$\mysquarefill{5mm}{2}
    \item $\frac{3}{4}$ von $\frac{2}{5}=$\mysquarefill{5mm}{3}
    \item $\frac{15}{28}\cdot\frac{14}{30}=$\mysquarefill{5mm}{4}
\end{itemize}

\end{document}

versão centrada

substituir \leaderspor \cleaders.

versão nivelada à esquerda

Proponho usar um clipe em vez de fazer contas.

\documentclass{article}

\usepackage{tikzpagenodes}
\usepackage{showframe}\def\ShowFrameColor{\color{yellow}}

\begin{document}

\def\quarefillleft#1#2{
    \tikz[remember picture,x=#1,y=#1,baseline=#1*#2/2-.5ex]{
        \path(0,0)(0,#1*#2);
        \begin{pgfinterruptboundingbox}
            \clip(-1,-1)rectangle(current page text area.north east);
            \draw(0,0)grid[step=#1](20cm,#2);
        \end{pgfinterruptboundingbox}
    }
}
\begin{itemize}
    \item $\frac{8}{15}+\frac{7}{12}+\frac{5}{12} +2=\quarefillleft{5mm}{2}$
    \item $\frac{3}{4}$ von $\frac{2}{5}=\quarefillleft{4mm}{3}$
    \item $\frac{15}{28}\cdot\frac{14}{30}=\quarefillleft{3mm}{4}$
\end{itemize}

\end{document}

informação relacionada