tikz - 使用一行文本的剩余空间作为方形图案

tikz - 使用一行文本的剩余空间作为方形图案

为了上数学课,我正在寻找一种简单的方法,用正方形图案填充线条的剩余空间。这种方法有一些缺点leaders(对齐,请参阅使用方形图案自动填充 (leaders 与 tikz)),所以我使用了有没有办法测量一行文本的剩余空间?

\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}

得出的结果为:

在此处输入图片描述

现在我想简化代码,特别是合并这两个宏。我如何使用类似

\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);

#2=size of squares#3=height of squareblock

对于 raggedleft/raggedright/center 机制,有没有更简单的解决方案?

答案1

我看不出你的实际问题是什么。(为什么@frougon 的答案无法令人满意)(你提到了对齐。对齐什么?水平还是垂直?只有你知道你想要什么。)

无论如何,我建议使用 Ti 进行以下构造Z 绘制正方形,使用\leaders填充空格。如果你想自定义正方形,可以使用 TiZ. 如果要正确对齐,请使用 TeX。玩得开心。

\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}

居中版本

替换\leaders\cleaders

左侧齐平版本

我建议使用剪辑来代替做算术。

\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}

相关内容