
Я хотел бы создать , NewDocumentCommand
который будет принимать необязательные аргументы, такие как цвет шрифта (синий, красный), размер шрифта (12pt, 18pt, возможно, большой, огромный) и стиль шрифта (жирный, курсив, возможно, жирный+курсив).Как настроить параметры ключевых слов, такие как жирный шрифт и курсив?
Я составил следующий код, основываясь на ответе @egreg на338364/xparse-процессор-с-множеством-аргументов. Мне удалось заставить работать цвет и размер шрифта, используя ключевые слова цвета из пакета xcolor и размер шрифта в pt, но я не уверен, как лучше всего подойти к установке дополнительных ключевых слов для стиля шрифта (например, bf для жирного, it для курсива). Я думаю, возможно, обусловить с помощью \IfValueT
, но прежде чем экспериментировать, я бы приветствовал указатели. Конечно, было бы неплохо, если бы эта команда могла брать математику, раскрашивать ее и все такое, но если это слишком жадно, я соглашусь на что-то, что работает с текстом.
\documentclass{article}
\usepackage{xparse,xcolor}
\usepackage{verbatim}
\ExplSyntaxOn
\keys_define:nn { mystyle }
{
color .tl_set:N = \l__mystyle_color_tl,
size .tl_set:N = \l__mystyle_size_tl,
skip .tl_set:N = \l__mystyle_skip_tl,
color .initial:n = red,
size .initial:n = 12pt,
skip .initial:n = 14.5pt,
}
\NewDocumentCommand{\stress}{O{}m}
{
\group_begin:
\keys_set:nn { mystyle } { #1 }
\clist_map_inline:nn { #2 }
{
\mystyle:VVVn
\l__mystyle_color_tl
\l__mystyle_size_tl
\l__mystyle_skip_tl
{##1}
}
\group_end:
}
\cs_new_protected:Nn \mystyle:nnnn
{
\color{#1}\fontsize{#2}{#3}\selectfont#4
}
\cs_generate_variant:Nn \mystyle:nnnn { VVV }
\ExplSyntaxOff
\begin{document}
\stress{emphasize this sentence with default values}
\stress[color=green,size=18pt]{emphasize this sentence with custom values}
\stress[color=blue,size=10pt,skip=50pt]{\textit{emphasize this sentence with custom values}}
Could I modify the command to:
\verb|\stress[style=it]{blabla}| to select italic,
\verb|\stress[style=bf]{blabla}| to select bold,
\verb|\stress[style=bfit]{blabla}| to select bold+italic
or even \verb|\stress[style=bf+it]{blabla}| to combine styles...
\end{document}
(аргумент skip, похоже, не работает, но я подозреваю, что это легко исправить для того, кто знает, что делает! возможно, отсутствует какой-то режим выхода...)
решение1
Вы хотите определить .choice:
ключ.
\RequirePackage{fix-cm}
\documentclass{article}
\usepackage{xcolor}
\usepackage{verbatim}
\ExplSyntaxOn
\tl_new:N \l__mystyle_style_tl
\keys_define:nn { mystyle }
{
color .tl_set:N = \l__mystyle_color_tl,
size .tl_set:N = \l__mystyle_size_tl,
skip .tl_set:N = \l__mystyle_skip_tl,
style .choice:,
style/it .code:n = \tl_set:Nn \l__mystyle_style_tl { \itshape },
style/bf .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries },
style/bfit .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries\itshape },
style/unknown .code:n = \tl_set:Nn \l__mystyle_style_tl { #1 },
color .initial:n = red!75,
size .initial:n = 12pt,
skip .initial:n = 14.5pt,
}
\NewDocumentCommand{\stress}{O{}m}
{
\group_begin:
\keys_set:nn { mystyle } { #1 }
\mystyle:VVVVn
\l__mystyle_color_tl
\l__mystyle_size_tl
\l__mystyle_skip_tl
\l__mystyle_style_tl
{#2}
\group_end:
}
\cs_new_protected:Nn \mystyle:nnnnn
{
\leavevmode\color{#1}\fontsize{#2}{#3}#4\selectfont#5
}
\cs_generate_variant:Nn \mystyle:nnnnn { VVVV }
\ExplSyntaxOff
\begin{document}
\stress{emphasize this sentence with default values}
\stress[color=green!60!red,size=18pt]{emphasize this sentence with custom values}
\stress[color=blue!80,size=10pt,skip=50pt,style=it]{emphasize this sentence with custom values}
\stress[style=it]{blabla}
\stress[style=bf]{blabla}
\stress[style=bfit]{blabla}
\stress[style=\scshape]{blabla}
\end{document}
Вам необходимо заранее определить возможную комбинацию, но можно сделать что-то и для других стилей, выраженных с помощью обычных команд шрифта.
Я добавил « \leavevmode
до» \color
, чтобы избежать возможных нежелательных эффектов.