格式化表单中的空白行和标签行

格式化表单中的空白行和标签行

我正在尝试创建一种角色扮演游戏的形式,但在创造我想要的效果时遇到了问题。

我的目标是这样的:*

enter image description here

这就是我所拥有的(忽略那些非常复杂的混乱,它们有点接近我的目标,但却非常脆弱):

\documentclass{article}
\begin{document}
\rule{4cm}{1pt}

{\tiny Name}

\rule{4cm}{1pt}

{\tiny Class}

\rule{1cm}{1pt} Strength \rule{4cm}{1pt}

\rule{1cm}{1pt} Dexterity \rule{4cm}{1pt}
\end{document}

enter image description here

我想控制要填充的线条的宽度和粗细。我在本例中使用 \rule 来实现此目的。能够控制阴影(使其变为灰色)将是一个不错的奖励。

小标签(“名称”和“类别”)应紧靠在它们上方的线下。我希望有一个可以控制的小间隙,但肯定比本例中的小得多。 \hrule 似乎可以实现我想要的;我只需添加 \vspace 即可获得所需的间隙。但我无法控制 hrule 的厚度。

当规则与文本(“Str”和“Dex”)位于同一行时,规则的顶部应位于下划线位置和字体基线之间的某个位置。在这个例子中,它太高了,我相信是因为线的底部位于基线。

我想控制一行和其上方内容之间的间距。它肯定需要比此示例中的间距更大。

*目标图像是在图像编辑器中使用“我拥有的”图像作为基础创建的。

答案1

最好定义可以在文档中全局使用的参数,或者使用参数并以类似方式设置类似内容的宏。这提供了一致性,并且允许在需要时轻松更改内容。

下面是两个宏\ruleandname{<name>}{<width>}\rulewithattribute[<drop>]{<attribute>}{<width>}。第一个宏在宽度 的<name>正下方设置一个。后者设置一个规则,然后是宽度 的正下方设置一个,规则将(使用可选参数)删除 的数量;负长度会删除规则,而正长度会增加规则;默认值为。\rule<width>1cm<attribute>\rule<width>\rule<dropped>-.1\baselineskip

enter image description here

\documentclass{article}

\newlength{\rulewidth}
\setlength{\rulewidth}{1pt}
\newlength{\ruleandnamegap}
\setlength{\ruleandnamegap}{.4\baselineskip}
\newcommand{\namefont}{\tiny}
\newcommand{\ruleandname}[2]{%
  \par\noindent
  \rule{#2}{\rulewidth}\par
  \vspace{\dimexpr-\baselineskip+\ruleandnamegap}
  \noindent{\namefont #1}\par
  \addvspace{\baselineskip}
}
\newcommand{\rulewithattribute}[3][-.1\baselineskip]{%
  \par\noindent
  \rule[#1]{1cm}{\rulewidth} #2 \rule[#1]{#3}{\rulewidth}\par
  \vspace{\dimexpr-\baselineskip-#1+\ruleandnamegap}
  \noindent{\namefont Score}\par
  \addvspace{\baselineskip}
}

\begin{document}

\ruleandname{Name}{4cm}

\ruleandname{Class}{4cm}

\rulewithattribute{Strength}{4cm}

\rulewithattribute{Dexterity}{4cm}

\end{document}

它提供了一个开始,并包含许多可能的修改。

答案2

这里几乎所有东西都是参数化的:

\documentclass{article}

\newcommand{\ruleA}[1]{%
  \par\vspace{\beforeruleA}
  \nointerlineskip
  \noindent\vrule width \ruleAwidth height \ruleAthickness depth 0pt\par
  \vspace{\ruleAbetween}
  \nointerlineskip
  \noindent{\tiny #1}\par
  \nointerlineskip
  \vspace{\afterruleA}
}
\newcommand{\ruleB}[1]{%
  \par\vspace{\beforeruleB}
  \nointerlineskip
  \noindent\vrule width \ruleBwidthpre height \ruleBthickness depth 0pt
  \ #1\ \vrule width \ruleBwidthpost height \ruleBthickness depth 0pt\par
  \nointerlineskip
  \vspace{\afterruleB}
}

\newlength{\beforeruleA}
\newlength{\afterruleA}
\newlength{\ruleAwidth}
\newlength{\ruleAthickness}
\newlength{\ruleAbetween}
\newlength{\beforeruleB}
\newlength{\afterruleB}
\newlength{\ruleBwidthpre}
\newlength{\ruleBwidthpost}
\newlength{\ruleBthickness}

\setlength{\beforeruleA}{4ex}
\setlength{\afterruleA}{2ex}
\setlength{\ruleAwidth}{4cm}
\setlength{\ruleAthickness}{2pt}
\setlength{\ruleAbetween}{4pt}
\setlength{\beforeruleB}{4ex}
\setlength{\afterruleB}{2ex}
\setlength{\ruleBwidthpre}{1cm}
\setlength{\ruleBwidthpost}{4cm}
\setlength{\ruleBthickness}{2pt}

\begin{document}

\ruleA{Name}

\ruleA{Class}

\ruleB{Strength}

\ruleB{Dexterity}

\end{document}

enter image description here

您或许可以添加字体大小的参数。

答案3

我刚刚尝试了一下,得到了以下代码。因为\baselineskip它应该适用于大多数字体和大小。

\documentclass[12pt]{article}
\begin{document}

% First line and text
\rule{4cm}{1pt}

\vspace{-.5\baselineskip}
{\tiny Name}

% Space between two elements
\vspace{1ex}

% Second line and text
\rule{4cm}{1pt}

\vspace{-.5\baselineskip}
{\tiny Class}

% Space between two elements
\vspace{1ex}


% Second line with writing
\hspace{2em} Strength

\vspace{-.8\baselineskip}
\rule{6cm}{1pt}

% Space between two elements
\vspace{1ex}

% Second line with writing and text
\hspace{2em} Dexterity

\vspace{-.8\baselineskip}
\rule{6cm}{1pt}

\vspace{-.5\baselineskip}
{\tiny Score}

\end{document}

enter image description here

您可以根据自己的喜好更改垂直空间的百分比。

相关内容