创建行为类似于 LaTeX 大小命令的自定义字体命令

创建行为类似于 LaTeX 大小命令的自定义字体命令

我正在编写一个文档类,其中包含一些自定义文本元素。文本元素对颜色、字体系列、大小、行距等有具体要求。我创建了一些自定义命令,希望它们的行为类似于等\small\large我目前的方法是

\NewDocumentCommand { \MarginFont } { }
  { \color{gray}\normalfont\fontsize{8pt}{10.4pt}\selectfont }

然而,这并不总是按预期进行,例如有时会插入额外的换行符,如以下 MWE 所示

\documentclass{article}

\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{blindtext}

\NewDocumentCommand { \MarginFont } { }
{ \color{gray}\normalfont\fontsize{8pt}{10.4pt}\selectfont }

\setlength{\parindent}{0pt}

\begin{document}

\begin{minipage}[t]{0.5\linewidth}
    \blindtext
\end{minipage}\hfill%
\begin{minipage}[t]{0.45\linewidth}
    {\MarginFont \blindtext\par}
\end{minipage}
\vspace*{2cm}

\begin{minipage}[t]{0.5\linewidth}
    \blindtext
\end{minipage}\hfill%
\begin{minipage}[t]{0.45\linewidth}
    {\small \blindtext\par}
\end{minipage}

\end{document}

小页面未对齐

minipage由于某种原因,与未\MarginFont正确对齐。当我使用任何 LaTeX 大小命令(例如 )时,不会发生这种情况\small

在里面文档类别文档,我找到了 的定义的更为复杂的代码\small

\DeclareRobustCommand\small{%
⟨*10pt⟩
  \@setfontsize\small\@ixpt{11}%
  \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
  \abovedisplayshortskip \z@ \@plus2\p@
  \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
  \def\@listi{\leftmargin\leftmargini
       \topsep 4\p@ \@plus2\p@ \@minus2\p@
       \parsep 2\p@ \@plus\p@ \@minus\p@
       \itemsep \parsep}%
⟨/10pt⟩

我如何才能更改我的定义以使其行为相同?另外,如果我设置固定值而不是使用 和 的各种定义,TeX 是否会失去生成格式良好的段落的能力。baselineskip如果是这样,我如何将此行为添加到我的自定义字体命令中?plusminus

附加问题:目前,用户必须\par在关闭组之前添加才能使baselineskip生效。有没有更智能的方式来定义命令,这样就不再需要这样做了?我知道,使用 minipage 时不需要组括号,但这些命令也应该在普通文本中使用。

编辑:我知道添加\vspace{0pt}可以修复对齐,但我感兴趣的是最初是什么导致了这种情况。

答案1

您正在添加一个空格标记,\color它可以产生额外的水平空间,但您也想\leavevmode确保段落在\colorwhatsit 之前开始,否则(如此处)颜色 whatsit 将在文本上方自己的行上。

在此处输入图片描述

\documentclass{article}

\usepackage[margin=2cm]{geometry}
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{blindtext}

\NewDocumentCommand \MarginFont  { }
{\leavevmode\color{gray}\normalfont\fontsize{8pt}{10.4pt}\selectfont }

\setlength{\parindent}{0pt}

\begin{document}

\begin{minipage}[t]{0.5\linewidth}
    \blindtext
\end{minipage}\hfill%
\begin{minipage}[t]{0.45\linewidth}
    \MarginFont \blindtext
\end{minipage}
\vspace*{2cm}

\begin{minipage}[t]{0.5\linewidth}
    \blindtext
\end{minipage}\hfill%
\begin{minipage}[t]{0.45\linewidth}
    \small \blindtext
\end{minipage}

\end{document}

注意,我删除了不需要的括号组,因此\par文本末尾不需要它。

相关内容