我制作了这个 LaTeX 函数:
\newcommand{\Hrule}[2]{\vspace{#1}\hrule\vspace{#2}}
现在,我想以这种方式编辑此功能:我想添加一个#3,在其中指定这个的颜色\Hrule
。
我想添加 #4 来声明厚度\hrule
。
是否可以?
例如,如果我写,\Hrule{2mm}{2mm}{red}{2.5mm}
我会获得红色\hrule
......。
我必须提供最低 MWE 吗?
太感谢了。
答案1
您应该在开头使用\par\addvspace
而不是。\vspace
接下来可以启动一个组来设置颜色,可选参数的默认值是.
in,xcolor
代表当前颜色。
\documentclass{article}
\usepackage{xcolor}
\newcommand{\Hrule}[3][.]{%
\par\addvspace{#2}%
\begingroup\color{#1}%
\hrule
\endgroup
\addvspace{#3}%
}
\begin{document}
Some text
\Hrule{3pt}{1pt}
Some other text
\Hrule[red!40]{3pt}{1pt}
Some other text
\end{document}
如果你想添加另一个参数来设置厚度,你可以这样做
\documentclass{article}
\usepackage{xcolor}
\newcommand{\Hrule}[4][.]{%
\par\addvspace{#2}%
\begingroup\color{#1}%
\hrule height #4
\endgroup
\addvspace{#3}%
}
\begin{document}
Some text
\Hrule{3pt}{1pt}{0.4pt}
Some other text
\Hrule[red!40]{3pt}{1pt}{2pt}
Some other text
\end{document}
但是,使用四个参数容易出错,因此我建议采用基于键值的方法。
\documentclass{article}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\Hrule}{m}
{
\group_begin:
\keys_set:nn { puck/hrule } { #1 }
\par\addvspace{\l_puck_hrule_before_skip}
\color{\l_puck_hrule_color_tl}
\hrule height \l_puck_hrule_thickness_dim
\addvspace{\l_puck_hrule_after_skip}%
\group_end:
}
\keys_define:nn { puck/hrule }
{
before .skip_set:N = \l_puck_hrule_before_skip,
after .skip_set:N = \l_puck_hrule_after_skip,
thickness .dim_set:N = \l_puck_hrule_thickness_dim,
thickness .initial:n = 0.4pt,
color .tl_set:N = \l_puck_hrule_color_tl,
color .initial:n = .,
}
\ExplSyntaxOff
\begin{document}
Some text
\Hrule{before=3pt,after=1pt}
Some other text
\Hrule{color=red!40,before=3pt,after=1pt,thickness=2pt}
Some other text
\end{document}
输出与上图相同。
我的解决方案与 Sergio Llorente 的解决方案的比较
\documentclass[twocolumn]{article}
\usepackage{xcolor}
\newcommand{\HruleEgreg}[4][.]{%
\par\addvspace{#2}%
\begingroup\color{#1}%
\hrule height #4
\endgroup
\addvspace{#3}%
}
\newcommand{\HruleSergio}[4]{%
\par\noindent\vspace{#1}%
{\color{#3}\rule{\columnwidth}{#4}}% \columnwidth instead of \textwidth
\par\vspace{#2}%
}
\begin{document}
\textbf{Egreg}
\medskip
Some text
\HruleEgreg{3pt}{1pt}{0.4pt}
Some other text
\HruleEgreg[red!40]{3pt}{1pt}{2pt}
Some other text
\newpage
\textbf{Sergio}
\medskip
Some text
\HruleSergio{3pt}{1pt}{black}{0.4pt}
Some other text
\HruleSergio{3pt}{1pt}{red!40}{2pt}
Some other text
\end{document}
您可以看到我的解决方案的间距量是确切地请求了什么。
答案2
您可以使用:
\newcommand{\Hrule}[4]{\vspace{#1}{\color{#3}\rule{\textwidth}{#4}}\vspace{#2}}
请注意,必须使用color
或xcolor
打包。
还请注意,如果您在不开始新段落的情况下使用此命令,则可能会出现意外行为。通常行会始终中断段落,因此您可以使用:
\newcommand{\Hrule}[4]{\par\noindent\vspace{#1}{\color{#3}\rule{\textwidth}{#4}}\par\vspace{#2}}