布局结构和 TikZ 图片

布局结构和 TikZ 图片

下面的图片

练习纸

这是我想尝试用 latex/tikz 编写的一系列论文的扫描件。以下是一些说明。

1)每份试卷包含很多练习,练习示例为[S(19)][]:

练习示例

2) 练习的具体位置并不重要,应该与文本中的单词相似:从左到右,然后在下一行再次进行。

3) 每个练习由两个或多个并排的图形组成(在本页示例中为矩形)。例如,上一个练习由两个矩形组成,第一个矩形包含 S(19),第二个矩形为空。

4)以下是我理想中希望写出的图像中的一些练习。

练习 1——[S(19)][]

exercise
    rectangle
        S_symbol 
          circle 
            19
    rectangle
        empty

练习 2——[S(S(10))][S()][]

exercise
    rectangle
        S_symbol 
            circle 
                 S_symbol
                     circle
                         10
    rectangle
        S_symbol
            circle
                empty
    rectangle
        empty

我多年前就使用过 Latex,现在才开始研究 TikZ。如果能提供一些关于如何构建这项工作的 Latex 和 TikZ 建议,我将不胜感激。

先感谢您!

答案1

正如您所暗示的,您可能想要使用tikz。可能可以定义宏来获得更像您描述的语法的东西,但我建议直接使用 tikz 语法来保持灵活性(因为您似乎想要对样式进行很多控制)。

在下面的例子中,我定义了一个用于圈出事物的宏(用于文本,但也可以是其他事物),因为您似乎经常使用它。根据您经常需要做的事情,您可能还想定义其他宏(或 tikz 样式)。

我已经展示了绘制您给出的一些练习的一种方法。希望您清楚如何扩展该技术。

\documentclass{article}
\usepackage{tikz,wasysym}
\usetikzlibrary{shapes, positioning}

\newcommand{\ellipsed}[2][]{\tikz[baseline]{\node[ellipse, draw, inner sep=1pt, anchor=base, minimum width=1.3em, #1] {#2};}}
\tikzstyle{blocks}=[rectangle split, draw, rectangle split parts=#1, anchor=base]
\tikzstyle{horizontal}=[rectangle split horizontal]
\newcommand{\emptyblock}{\tikz[baseline=-.25em, scale=.5]{\path[use as bounding box] (-1,-1) rectangle (1,1);}}

\begin{document}
\begin{tikzpicture}
  \node[blocks=2, rectangle split horizontal] (ex1) 
    {
    S \ellipsed{19} 
    \nodepart{two}
    \emptyblock
    };

  \node[blocks=3, horizontal, right=1em of ex1.north east, anchor=north west] (ex2)
    {
    S \ellipsed{S \ellipsed{10}}
    \nodepart{two}
    S \ellipsed{\vphantom{1}}
    \nodepart{three}
    \emptyblock
    };

  \node[blocks=2, below=1em of ex1.south west, anchor=north west] (ex3)
    {
    \renewcommand\arraystretch{1.5}
    $\begin{array}{ccc}
      \ellipsed[fill=lightgray]{1} & \ellipsed{1} & \ellipsed[fill=lightgray]{10}\\
      \ellipsed{10} & \ellipsed[fill=lightgray]{100} & \ellipsed{10}\\
      \ellipsed{100} & \ellipsed{1} & \ellipsed{100}
    \end{array}$
    \nodepart{two}
    \emptyblock
    };

    \node[blocks=2, horizontal, right=1em of ex3.north east, anchor=north west] (ex4)
    {
    + \ellipsed{700 \sun} \ellipsed{30 \sun} \ellipsed{7 \sun}
    \nodepart{two}
    \emptyblock
    };

    \node[blocks=2, horizontal, below=1em of ex4.south west, anchor=north west, rectangle split part fill={lightgray, white}] (ex5)
    {
    \emptyblock
    \nodepart{two}
    \emptyblock
    };
\end{tikzpicture}
\end{document}

一些练习

对于比较复杂的图片,比如雨伞、蜡烛等,最简单的方式可能是通过以下方式导入图片:\includegraphics,这在 tikz 代码中运行良好。还有大量符号包您可能会在其中找到一些预制的图片(例如wasysym,我使用过)。如果您确实需要一些填充图案而不是纯色的块,请查看这个问题

您也可以将每个练习单独进行tikzpicture,让 LaTeX 决定如何布局——它会将图片像文本一样排列在页面上。这可能更容易,但可能会导致空间利用效率降低。我认为在单个图片内进行相对定位可以产生更好的输出,而且不会太复杂。

相关内容