使用 newcommand 和 newlength 设置字体大小

使用 newcommand 和 newlength 设置字体大小

我该如何设置,\newcommand以便将字段#1计算为1.2*#2可选?类似于以下命令,但没有用。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\newlength{\myskip}
\setlength{\myskip}{1.2}

\newcommand{\mysize}[3][#2\myskip]{{\fontsize{#2}{#1}\selectfont #3}}

答案1

如果您希望第一个参数是可选的,则需要定义默认值:

\newcommand{\mysize}[3][12pt]{\fontsize{#2}{#1}\selectfont #3}

因此,如果没有指定,现在#1将具有的值。12pt


如果你想#1依赖#2,你可以使用包裹xparse

\DeclareDocumentCommand{\mysize}{o m m}{%
    \setlength{\myskip}{#2}%
    \setlength{\myskip}{1.2\myskip}%
    \IfNoValueTF{#1}{\fontsize{#2}{\myskip}}{\fontsize{#2}{#1}}%
    \selectfont%
    \textbf{#3}%
}

\IfNoValueTF用于测试是否#1指定了,并指定o m m第一个参数是可选的,而接下来的两个参数是必需的。将其与\mysize{10pt}{Default First Parameter:}和一起使用\mysize[16pt]{10pt}{First Parameter Specified:}会产生:

enter image description here

\documentclass{article}
\usepackage{lipsum}
\usepackage{xparse}

\newlength{\myskip}
\DeclareDocumentCommand{\mysize}{o m m}{%
    \setlength{\myskip}{#2}%
    \setlength{\myskip}{1.2\myskip}%
    \IfNoValueTF{#1}{\fontsize{#2}{\myskip}}{\fontsize{#2}{#1}}%
    \selectfont%
    \textbf{#3}%
}

\newcommand{\Text}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed erat ante, elementum sed dignissim non, faucibus id eros. Nam gravida lacus non diam rhoncus quis facilisis augue congue. Mauris a sem arcu, eget elementum arcu. Curabitur pellentesque ultrices mauris, placerat volutpat nulla vulputate sed.}%

\begin{document}
\mysize{10pt}{Default First Parameter:}
\Text

\mysize[16pt]{10pt}{First Parameter Specified:}
\Text
\end{document}

答案2

这是一个选项可能工作:

enter image description here

\documentclass{article}

\newcommand{\Text}{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
mauris.}

\makeatletter
\newcommand{\mysize}[3][1.2]{%
  \set@fontsize\baselinestretch{#2}{#2}%
  \set@fontsize{#1}\f@size\f@baselineskip%
  {\selectfont#3}
}
\makeatother
\begin{document}
\Text \par
\texttt{baselineskip}: \the\baselineskip \par

\medskip

\mysize{14}{\Text \par
\texttt{baselineskip}: \the\baselineskip} \par

\medskip

\mysize{14pt}{\Text \par
\texttt{baselineskip}: \the\baselineskip} \par

\medskip

\mysize[1.5]{14pt}{\Text \par
\texttt{baselineskip}: \the\baselineskip}
\end{document}

上面的例子提供了\mysize[<factor>]{<size>}{<stuff>}将字体大小设置为<stuff><size>选项(默认值为\baselinestretch)。此解决方案基于和的定义<factor>1.2\fontsize\linespreadlatex.ltx

\DeclareRobustCommand\linespread[1]
  {\set@fontsize{#1}\f@size\f@baselineskip}
\DeclareRobustCommand\fontsize[2]
  {\set@fontsize\baselinestretch{#1}{#2}}

这种方法的优点是,您可以通过数字或点大小指定字体大小:\mysize{12}{...}与 相同\mysize{12pt}{...}。这种方法的缺点通常是,只会修改字体大小和\baselineskip,而不会修改\parskip。而且,由于\mysize默认情况下允许段落(因为我们使用了),段落之间的行距看起来不会很好;这在上面的和长度打印输出\newcommand之间的示例中已经可见。原则上,行距的修改应通过\Text\baselineskipsetspace

相关内容