\hrule 的颜色

\hrule 的颜色

我制作了这个 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}}

请注意,必须使用colorxcolor打包。

还请注意,如果您在不开始新段落的情况下使用此命令,则可能会出现意外行为。通常行会始终中断段落,因此您可以使用:

\newcommand{\Hrule}[4]{\par\noindent\vspace{#1}{\color{#3}\rule{\textwidth}{#4}}\par\vspace{#2}}

相关内容