固定高度表中的文本高度不正确

固定高度表中的文本高度不正确

我正在制作一个拼图,其中涉及将九个字母的单词的字母放在 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}

但是,如该屏幕截图所示,表格的单元格大小似乎并非全部正确,大于VITRIOLICPERISCOPEACTIVATEDITERATION所有这些都大于NUMERATORGLASSWAREWHOOSHING

在此处输入图片描述

如何使所有字母的高度相同?

答案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,我编辑了答案以做几件事:

  1. 我添加了一个可选参数来\setrow指定所需的组宽度;

  2. 我将堆栈行尾分隔符从 更改为\\\cr这样tabular就不会混淆(因此,\letters需要修改定义以反映这一点)。

  3. 我将垂直堆叠间隙 [baselineskip] 从默认更改\baselinekip\normalbaselineskip,因为后者在tabular环境中不会重置;并且

  4. 我将 改为\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&#2&#3\cr#4&#5&#6\cr#7&#8&#9}\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

您可以使用包stringstringstikz,第一个包用于提取单词的字母,第二个包用于统一放置它们。我在命令中添加了一个可选参数\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}

在此处输入图片描述

相关内容