我想要一个太式文档中的谜题。这是一个类似于数独的游戏,但增加了一些信息,即一些相邻单元格之间有符号,表示哪个单元格应该包含更大的数字。
Futoshiki 拼图是一个简单的方格网格,里面有几个数字(拼图完成后,所有单元格都包含一个数字)。复杂之处在于,一些相邻单元格之间有“>”符号,用于指定两个数字中哪个更大。这些符号可以出现在水平或垂直相邻的两个单元格之间。传统上,单元格彼此分开绘制,单元格之间有空白(空白处),“>”符号就绘制在那里。以下是来自上述来源/链接的 5x5 拼图示例(不幸的是,它没有任何垂直不等号。它们也是需要的):
...及其附带的解决方案:
实现可以是任何实际的东西。我首先想到了一个tabular
环境,但不知道如何设置排水沟并在其中书写。
答案1
您可以使用该tikz-cd
包,它还会生成一个节点矩阵(如Jasper Habicht 的回答),但允许您定义由字形组成的箭头。因此,可以通过箭头创建更大的符号,您可以在图表内部设置箭头,例如,\arrow[r]
表示当前单元格大于其右侧的单元格。为了让您信服,箭头命令存储在\mygreater
宏中。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\tikzcdset{Futoshiki/.style={nodes in empty cells,
row sep=1.2em,column sep=1.2em,
every arrow/.append style={-greater,shorten >=0.3em,shorten <=0.3em},
cells={nodes={draw,minimum size=2.4em,text depth=0.4em,
text height=1.2em,
anchor=center}}},
greater/.tip={Glyph[glyph math command=mygreater, glyph length=1.5ex]}}
\newcommand{\mygreater}{>}
\begin{document}
\begin{tikzcd}[Futoshiki]
\arrow[r] & \arrow[r] & \arrow[r] & \arrow[r] & \\
\boldsymbol4 & & & & \boldsymbol2 \\
& & \boldsymbol4 & & \\
& & & & \boldsymbol4 \\
& & & &
\end{tikzcd}
\end{document}
答案2
你可以利用 Ti钾节点的 Z 矩阵:
\documentclass[border=1mm, tikz]{standalone}
\usetikzlibrary{matrix, calc}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes, nodes in empty cells,
row sep=1em, column sep=1em,
nodes={draw, minimum width=2em, minimum height=2em, inner sep=0pt, anchor=center}] {
& & & & \\
\textbf{4} & & & & \textbf{2} \\
& & \textbf{4} & & \\
& & & & \textbf{4} \\
& & & & \\
};
\foreach \x/\y in {1-1/1-2, 1-3/1-4, 1-4/1-5} {
\node at ($(m-\x)!0.5!(m-\y)$) {$>$};
}
\foreach \x/\y in {4-5/4-4, 5-3/5-2, 5-2/5-1} {
\node at ($(m-\x)!0.5!(m-\y)$) {$<$};
}
\end{tikzpicture}
\begin{tikzpicture}
\matrix (m) [matrix of nodes, nodes in empty cells,
row sep=1em, column sep=1em,
nodes={draw, minimum width=2em, minimum height=2em, inner sep=0pt, anchor=center}] {
5 & 4 & 3 & 2 & 1 \\
\textbf{4} & 3 & 1 & 5 & \textbf{2} \\
2 & 1 & \textbf{4} & 3 & 5 \\
3 & 5 & 2 & 1 & \textbf{4} \\
1 & 2 & 5 & 4 & 3 \\
};
\foreach \x/\y in {1-1/1-2, 1-3/1-4, 1-4/1-5} {
\node at ($(m-\x)!0.5!(m-\y)$) {$>$};
}
\foreach \x/\y in {4-5/4-4, 5-3/5-2, 5-2/5-1} {
\node at ($(m-\x)!0.5!(m-\y)$) {$<$};
}
\end{tikzpicture}
\end{document}
如果垂直对齐<
并且>
需要符号,则只需将节点旋转 90 度: \node[rotate=90] at ($(m-1-1)!0.5!(m-2-1)$) {$>$};
答案3
您可以在此处使用图片模式,不需要任何软件包。
\documentclass{article}
\begin{document}
\fbox{\large\begin{picture}(180,180)
% row 1
\put(00,160){\framebox(20,20){5}}
\put(30,160){\makebox(0,20){\boldmath$>$}}
\put(40,160){\framebox(20,20){4}}
\put(70,160){\makebox(0,20){\boldmath$ $}}
\put(80,160){\framebox(20,20){3}}
\put(110,160){\makebox(0,20){\boldmath$>$}}
\put(120,160){\framebox(20,20){2}}
\put(150,160){\makebox(0,20){\boldmath$>$}}
\put(160,160){\framebox(20,20){1}}
% row 2
\put(00,120){\framebox(20,20){4}}
\put(30,120){\makebox(0,20){\boldmath$ $}}
\put(40,120){\framebox(20,20){3}}
\put(70,120){\makebox(0,20){\boldmath$ $}}
\put(80,120){\framebox(20,20){1}}
\put(110,120){\makebox(0,20){\boldmath$ $}}
\put(120,120){\framebox(20,20){5}}
\put(150,120){\makebox(0,20){\boldmath$ $}}
\put(160,120){\framebox(20,20){2}}
% row 3
\put(00,80){\framebox(20,20){2}}
\put(30,80){\makebox(0,20){\boldmath$ $}}
\put(40,80){\framebox(20,20){1}}
\put(70,80){\makebox(0,20){\boldmath$ $}}
\put(80,80){\framebox(20,20){4}}
\put(120,80){\makebox(0,20){\boldmath$ $}}
\put(120,80){\framebox(20,20){3}}
\put(150,80){\makebox(0,20){\boldmath$ $}}
\put(160,80){\framebox(20,20){5}}
% row 4
\put(00,40){\framebox(20,20){3}}
\put(30,40){\makebox(0,20){\boldmath$ $}}
\put(40,40){\framebox(20,20){5}}
\put(70,40){\makebox(0,20){\boldmath$ $}}
\put(80,40){\framebox(20,20){2}}
\put(110,40){\makebox(0,20){\boldmath$ $}}
\put(120,40){\framebox(20,20){1}}
\put(150,40){\makebox(0,20){\boldmath$<$}}
\put(160,40){\framebox(20,20){4}}
% between row 4 and 5
\put(80,20){\makebox(20,20){\boldmath$<$}}
% row 5
\put(00,0){\framebox(20,20){1}}
\put(30,0){\makebox(0,20){\boldmath$<$}}
\put(40,0){\framebox(20,20){2}}
\put(70,0){\makebox(0,20){\boldmath$<$}}
\put(80,0){\framebox(20,20){5}}
\put(110,0){\makebox(0,20){\boldmath$ $}}
\put(120,0){\framebox(20,20){4}}
\put(150,0){\makebox(0,20){\boldmath$ $}}
\put(160,0){\framebox(20,20){3}}
\end{picture}}
\end{document}
答案4
这是一个可行的(简单)想法,仅使用带有粗体字符fancyvrb
选项的包。{Verbatim}[commandchars=\\\{\}]
\documentclass[12pt]{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
|. | 2 | . | . | .|
|- - - - v - - - -|
|. > . | . | . | .|
|- - - - - - - - -|
|. | . < \textbf{4} | . | .|
|- - - - v - - - -|
|. | . | . | . | .|
|^ - - - > - - - -|
|. | . | 5 | . | .|
\end{Verbatim}
\end{document}