使用 pgfkeys 将字体大小作为键值对不起作用

使用 pgfkeys 将字体大小作为键值对不起作用

我想定义一个新环境,其内容可以使用特定字体系列和大小(可选指定为键值对)进行排版。为了处理键值对,我使用鍵盤。为什么 LaTeX 不接受将字体大小作为键值对传递fontsize=\large,例如 ,尽管 没问题fontfamily=\sffamily?如何解决这个问题?

这是一个简单的例子:

\documentclass{minimal}
\usepackage{lipsum}
\usepackage{pgfkeys}

\pgfkeys{
  /myenv/.cd,
  fontfamily/.store in = \myenvfontfamily,
  fontsize/.store in = \myenvfontsize,
}

\newenvironment{myenv}[1][]{%
  \pgfqkeys{/myenv}{#1}%
  \ifdefined\myenvfontfamily\myenvfontfamily\fi
  \ifdefined\myenvfontsize\myenvfontsize\fi
}{%
}%

\begin{document}
\lipsum[1]
\begin{myenv}[fontfamily=\sffamily,fontsize=\large]
  \lipsum[2]
\end{myenv}
\lipsum[3]
\end{document}

pdflatex 失败并显示以下消息:

! Undefined control sequence.
\myenvfontsize ->\large 

l.24 ...env}[fontfamily=\sffamily,fontsize=\large]

Verbatim我想定义一个环境,让用户能够使用键值对设置字体,就像幻想VRB包(尽管字体设置不是该环境的主要目标)。

答案1

如果您使用,您的代码就会编译(并且似乎可以工作)\documentclass{article}minimal该类没有\large

请注意,您可以通过以下方式改进代码

\pgfkeys{
  /myenv/.cd,
  fontfamily/.store in = \myenvfontfamily,
  fontsize/.store in = \myenvfontsize,
  fontfamily=,
  fontsize=,
}

在这种情况下,您可以省略\ifdefined-- ,只需写入\myenvfontfamily。默认情况下,它将扩展为空字符串,没有任何效果。这将允许您的用户有效地重置样式。

还请注意,您可以从pgfkeys内置变量中受益,即通过

\pgfkeys{
  /myenv/.cd,
  fontfamily/.initial=,
  fontsize/.initial=,
}

结合.... \pgfkeysgetvalue{/myenv/fontfamily}\temp ... \temp: 这将允许你写

\pgfkeys{/myenv/fontfamily/.add={}{\large}}

允许/.add={prefix}{suffix}调整现有变量,而不是替换它。

相关内容