下面的图片
这是我想尝试用 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 决定如何布局——它会将图片像文本一样排列在页面上。这可能更容易,但可能会导致空间利用效率降低。我认为在单个图片内进行相对定位可以产生更好的输出,而且不会太复杂。