我想定义一个新环境,其内容可以使用特定字体系列和大小(可选指定为键值对)进行排版。为了处理键值对,我使用鍵盤。为什么 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}
调整现有变量,而不是替换它。