我正在制作一个拼图,其中涉及将九个字母的单词的字母放在 3x3 的盒子中,并且编写了以下代码来开始(MWE)。
\documentclass{article}
\newcommand{\letters}[9]{\resizebox{1.75em}{!}{\begin{tabular}{ccc} #1 & #2 & #3 \\ #4 & #5 & #6 \\ #7 & #8 & #9 \end{tabular}}}
\begin{document}
\Huge
\letters{V}{I}{T}{R}{I}{O}{L}{I}{C}
\letters{P}{E}{R}{I}{S}{C}{O}{P}{E}
\letters{N}{U}{M}{E}{R}{A}{T}{O}{R}
\letters{A}{C}{T}{I}{V}{A}{T}{E}{D}
\letters{G}{L}{A}{S}{S}{W}{A}{R}{E}
\letters{I}{T}{E}{R}{A}{T}{I}{O}{N}
\letters{W}{H}{O}{O}{S}{H}{I}{N}{G}
\end{document}
但是,如该屏幕截图所示,表格的单元格大小似乎并非全部正确,大于VITRIOLIC
、PERISCOPE
和ACTIVATED
,ITERATION
所有这些都大于NUMERATOR
、GLASSWARE
和WHOOSHING
。
如何使所有字母的高度相同?
答案1
通过选择 TABstack 而不是tabular
,我可以让一个单词的列宽统一。我不确定这是否是您需要的,但我选择\resizebox
对整行执行 而不是对每个\letters
宏执行 。
该宏\setstacktabulargap{<length>}
可用于设置 tabstack 中字母之间的间隙,我选择了相邻字母组之间的间隙为 1em。在前两行中,唯一的变化是 的大小\setstacktabulargap
。
请注意,虽然 OP 的语法\letters{V}{I}{T}{R}{I}{O}{L}{I}{C}
仍然可以用于此实现,但无需更改代码即可显著简化调用:\letters VITRIOLIC
。
我将其全部包装在一个宏中,并\setrow[<width>]{}
在其中进行各种字母调用。
应OP的要求,为了使其与兼容tabular
,我编辑了答案以做几件事:
我添加了一个可选参数来
\setrow
指定所需的组宽度;我将堆栈行尾分隔符从 更改为
\\
,\cr
这样tabular
就不会混淆(因此,\letters
需要修改定义以反映这一点)。我将垂直堆叠间隙 [baselineskip] 从默认更改
\baselinekip
为\normalbaselineskip
,因为后者在tabular
环境中不会重置;并且我将 改为
\tabularLongstack
,\tabularCenterstack
这样堆栈就会围绕基线居中,而不是位于基线之上。
这是 MWE(注意:我\Huge
在文档开头就把它删掉了):
\documentclass{article}
\usepackage{graphicx,lipsum}
\usepackage{tabstackengine}
\fixTABwidth{T}
\setstackEOL{\cr}
\setstackgap{L}{\normalbaselineskip}
\setstacktabulargap{.5em}
\newcommand{\letters}[9]{\tabularCenterstack{ccc}{#1\cr#4\cr#7	}\hspace{1em}}
\newcommand\setrow[2][\textwidth]{\noindent\resizebox{#1}{!}{#2\hspace{-1em}}}
\begin{document}
\setrow{%
\letters VITRIOLIC
\letters PERISCOPE
\letters NUMERATOR
\letters ACTIVATED
\letters GLASSWARE
\letters ITERATION
\letters WHOOSHING}
\bigskip
\setstacktabulargap{.1em}
\setrow{%
\letters VITRIOLIC
\letters PERISCOPE
\letters NUMERATOR
\letters ACTIVATED
\letters GLASSWARE
\letters ITERATION
\letters WHOOSHING}
\bigskip
\setrow{%
\letters VITRIOLIC
\letters PERISCOPE
\letters NUMERATOR
\letters ACTIVATED
\letters GLASSWARE}
\lipsum[1]
{\centering
\begin{tabular}{|c|c|}
\hline
Game Number & Game\\
\hline
1 & \setrow[.5\textwidth]{%
\letters VITRIOLIC
\letters PERISCOPE
\letters NUMERATOR
\letters ACTIVATED
\letters GLASSWARE
}\\
\hline
2 & \setrow[.5\textwidth]{%
\letters NUMERATOR
\letters ACTIVATED
\letters GLASSWARE
\letters ITERATION
\letters WHOOSHING}\\
\hline
\end{tabular}
\end{document}
答案2
您可以使用包stringstrings
和tikz
,第一个包用于提取单词的字母,第二个包用于统一放置它们。我在命令中添加了一个可选参数\squareword
来控制字母之间的间隔。默认情况下,间隔为 1em。
结果:
代码如下:
\documentclass{article}
\usepackage{stringstrings}
\usepackage{tikz}
\newcommand{\squareword}[2][1em]{
\begin{tikzpicture}
\foreach \z in {1,...,9}{
\pgfmathsetmacro{\i}{mod(\z-1,3)}
\pgfmathsetmacro{\j}{(\i-\z+1)/3}
\coordinate (a\z) at (#1*\i,#1*\j);}
\foreach \y in {1,...,9}{
\substring[q]{#2}{\y}{\y}
\node[anchor=base] at (a\y){\thestring};}
\end{tikzpicture}
}
\begin{document}
\squareword{VITRIOLIC}
\squareword{PERISCOPE}
\squareword{NUMERATOR}
\squareword{ACTIVATED}
\squareword{GLASSWARE}
\squareword{ITERATION}
\squareword{WHOOSHING}
\Huge
\squareword{VITRIOLIC}
\squareword{PERISCOPE}
\squareword{NUMERATOR}
\squareword{ACTIVATED}
\squareword{GLASSWARE}
\squareword{ITERATION}
\squareword{WHOOSHING}
\normalsize
\squareword[1.5em]{VITRIOLIC}
\squareword[2em]{PERISCOPE}
\squareword[0.8em]{NUMERATOR}
\squareword[0.5em]{ACTIVATED}
\squareword[3mm]{GLASSWARE}
\squareword[4mm]{ITERATION}
\squareword[0.5cm]{WHOOSHING}
\end{document}
答案3
虽然有点笨拙,但是它确实起到了作用:
\documentclass{article}
\newcommand{\letter}[1]{{\fontsize{24}{24}\selectfont #1}}
\newcommand{\letters}[9]{\begin{tabular}{ccc} \letter{#1} & \letter{#2} & \letter{#3} \\ \letter{#4} & \letter{#5} & \letter{#6} \\ \letter{#7} & \letter{#8} & \letter{#9} \end{tabular}}
\begin{document}
\Huge
\letters{V}{I}{T}{R}{I}{O}{L}{I}{C}
\letters{P}{E}{R}{I}{S}{C}{O}{P}{E}
\letters{N}{U}{M}{E}{R}{A}{T}{O}{R}
\letters{A}{C}{T}{I}{V}{A}{T}{E}{D}
\letters{G}{L}{A}{S}{S}{W}{A}{R}{E}
\letters{I}{T}{E}{R}{A}{T}{I}{O}{N}
\letters{W}{H}{O}{O}{S}{H}{I}{N}{G}
\end{document}
答案4
宽度可能不同。您应该调整高度。
\documentclass{article}
\usepackage{graphicx}
\newcommand{\letters}[9]{%
\resizebox{!}{1em}{%
\begin{tabular}{ccc}
#1 & #2 & #3 \\
#4 & #5 & #6 \\
#7 & #8 & #9
\end{tabular}%
}%
}
\begin{document}
\Huge
\letters{V}{I}{T}{R}{I}{O}{L}{I}{C}
\letters{P}{E}{R}{I}{S}{C}{O}{P}{E}
\letters{N}{U}{M}{E}{R}{A}{T}{O}{R}
\letters{A}{C}{T}{I}{V}{A}{T}{E}{D}
\letters{G}{L}{A}{S}{S}{W}{A}{R}{E}
\letters{I}{T}{E}{R}{A}{T}{I}{O}{N}
\letters{W}{H}{O}{O}{S}{H}{I}{N}{G}
\end{document}