为表格中的单个单元格添加边框

为表格中的单个单元格添加边框

我打算用 LaTeX 制作 RPG 角色表,但我对通常与此类事物相关的框有点困惑。有没有办法以某种自动化方式单独框定表格单元格?下面的 MWE 有一个明显的缺点,即fbox不同位置的框不能保证对齐。

任何解决方案都应理想地允许“伤口”与其他框fbox完美对齐(可能使用multirowmulticolumn)。此外,比下面的解决方案更自动化(因此,如果出于某种原因,数字/描述对于框来说太大,则整张表不需要重新设计)。

我所得到的最接近我所追求的东西, MWE 示例

\documentclass{article}
\usepackage[margin=0.5cm,footskip=0.25in]{geometry}
\usepackage{array}
\usepackage{multicol}

\newcommand\fpbox[2]{\fbox{\parbox{#1}{\centering #2}}}
\newcommand\fphbox[3]{\fbox{\parbox[c][#1][t]{#2}{\centering #3}}}
\newlength\cs
\setlength\cs{0.2cm}
\setlength\fboxsep{0.1cm}
\newcommand\hs{\hspace{\cs}}
\begin{document}

\noindent
\begin{tabular}[c]{c@{\hs}c@{\hs}c@{\hs}c@{\hs}c}
\fpbox{1cm}{STR} & \fpbox{0.7cm}{14}& \fpbox{0.7cm}{0} &\fpbox{0.7cm}{0}& \fpbox{0.7cm}{0}\\[\cs]
\fpbox{1cm}{DEX}& \fpbox{0.7cm}{10} &\fpbox{0.7cm}{0} &\fpbox{0.7cm}{0}& \fpbox{0.7cm}{0}\\[\cs]
\end{tabular}
\begin{minipage}{4cm}
\begin{tabular}[c]{ccc}
  \multicolumn{3}{l}{Wounds/Current HP}\\
  \multicolumn{3}{l}{\fphbox{1.25cm}{4.4cm}{\hspace{0pt}}}
  \end{tabular}
\end{minipage}
\end{document}

答案1

并非所有内容都必须以表格形式呈现,这里有一个替代方案(根据要求,一些辅助宏可以使输入变得更加简洁)

在此处输入图片描述

\documentclass{article}

\begin{document}

\noindent X\dotfill X

\unitlength\textwidth
\divide\unitlength 420
\noindent\begin{picture}(420,80)

\multiput(10,40)(50,0){5}{\framebox(40,20){}}
\multiput(10,10)(50,0){5}{\framebox(40,20){}}
\put(260,10){\framebox(150,50){}}
\put(10,40){\makebox(40,20){\textbf{STR}}}
\put(60,40){\makebox(40,20){14}}
\put(110,40){\makebox(40,20){0}}
\put(160,40){\makebox(40,20){0}}
\put(210,40){\makebox(40,20){0}}

\put(10,10){\makebox(40,20){\textbf{DEX}}}
\put(60,10){\makebox(40,20){10}}
\put(110,10){\makebox(40,20){0}}
\put(160,10){\makebox(40,20){0}}
\put(210,10){\makebox(40,20){0}}

\put(260,60){\makebox(150,20){\textbf{Wounds/Current HP}}}
\end{picture}

\end{document}

例如如果你添加

\makeatletter
\def\boxtext#1#2{%
\count@10
\@for\tmp:=#2\do{%
\put(\count@,#1){\makebox(40,20){\tmp}}%
\advance\count@50
}}
\makeatother

您可以在序言框中输入如下文本:

\boxtext{40}{\textbf{STR},14,0,0,0}
\boxtext{10}{\textbf{DEX},10,0,0,0}

答案2

也可以不使用表格,而\fbox只需一行即可完成。

\documentclass{article}
\usepackage{array,ragged2e}
\newcolumntype{C}{>{\Centering}p{8mm}}
\def\HLine{\cline{1-1}\cline{3-3}\cline{5-5}\cline{7-7}\cline{9-9}}
\begin{document}

\noindent
\def\arraystretch{1.5}
\begin{tabular}{*5{|C|c}}\HLine
STR && 14 && 0 && 0 && 0 \\\HLine
\multicolumn{9}{c}{}\\[-0.5\normalbaselineskip]\HLine
DEX && 10 && 0 && 0 && 0 \\\HLine
\end{tabular}
\begin{tabular}{ | p{4cm} |}
\multicolumn{1}{l}{ Wounds/Current HP }\\\hline
\strut\\
\strut\\\hline
\end{tabular}
\end{document}

在此处输入图片描述

和没有表格的情况一样:

\documentclass{article}
\usepackage{array,ragged2e}
\newcommand\MB[2][1cm]{\fbox{\makebox[#1]{\strut#2}}}
\begin{document}

\noindent
\begin{minipage}{7cm}
\MB[12mm]{STR} \MB{14} \MB{0} \MB{0} \MB{0} \\[10pt]
\MB[12mm]{DEX} \MB{10} \MB{0} \MB{0} \MB{0}
\end{minipage}
%
\begin{minipage}{4cm} 
Wounds/Current HP \\
\fbox{\parbox[c][1.5cm]{\linewidth}{\rule{\linewidth}{0pt}}}
\end{minipage}
\end{document}

在此处输入图片描述

相关内容