我该如何设置,\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:}
会产生:
\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
这是一个选项可能工作:
\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
\linespread
latex.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
\baselineskip
setspace
。