![创建行为类似于 LaTeX 大小命令的自定义字体命令](https://linux22.com/image/444168/%E5%88%9B%E5%BB%BA%E8%A1%8C%E4%B8%BA%E7%B1%BB%E4%BC%BC%E4%BA%8E%20LaTeX%20%E5%A4%A7%E5%B0%8F%E5%91%BD%E4%BB%A4%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E4%BD%93%E5%91%BD%E4%BB%A4.png)
我正在编写一个文档类,其中包含一些自定义文本元素。文本元素对颜色、字体系列、大小、行距等有具体要求。我创建了一些自定义命令,希望它们的行为类似于等\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
如果是这样,我如何将此行为添加到我的自定义字体命令中?plus
minus
附加问题:目前,用户必须\par
在关闭组之前添加才能使baselineskip
生效。有没有更智能的方式来定义命令,这样就不再需要这样做了?我知道,使用 minipage 时不需要组括号,但这些命令也应该在普通文本中使用。
编辑:我知道添加\vspace{0pt}
可以修复对齐,但我感兴趣的是最初是什么导致了这种情况。
答案1
您正在添加一个空格标记,\color
它可以产生额外的水平空间,但您也想\leavevmode
确保段落在\color
whatsit 之前开始,否则(如此处)颜色 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
文本末尾不需要它。