我正在尝试创建一种角色扮演游戏的形式,但在创造我想要的效果时遇到了问题。
我的目标是这样的:*
这就是我所拥有的(忽略那些非常复杂的混乱,它们有点接近我的目标,但却非常脆弱):
\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}
我想控制要填充的线条的宽度和粗细。我在本例中使用 \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
\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}
您或许可以添加字体大小的参数。
答案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}
您可以根据自己的喜好更改垂直空间的百分比。