我目前正在为某个软件写教程,我想参考一下该程序中使用的快捷键。这些快捷键应该很显眼,即以不同的颜色或字体样式显示。
基本上我想做的是创建一个新命令,只有一个参数——一串单词,用一些分隔符分隔(逗号)每个单词(或部分,因为在这种情况下单词将是子字符串,如Ctrl
、Shift
或Enter
只是S
,O
)应以显著样式显示(假设\textbf{}
),并且每两个单词之间应该有一个+
(或其他符号)使用常规字体样式。请注意,这不一定是参数中使用的相同分隔符(逗号)!
伪代码如下:
\newcommand{\shortcut}[1]{
For every word in the argument #1:
- Display in notable font style
- Add + in regular font style (except for last word)
}
所以\shortcut{Ctrl,Shift,Z}
结果应该是\textbf{Ctrl}+\textbf{Shift}+\textbf{Z}
。
有没有关于使用软件包的推荐,或者可以使用相对简单的 LaTeX 来完成?
答案1
“老式”方法
\makeatletter
\newcommand{\shortcut}[1]{%
\@tempswafalse
\@for\next:=#1\do
{\if@tempswa+\else\@tempswatrue\fi\textbf{\next}}%
}
\makeatother
然后\shortcut{Ctrl,Shift,Z}
就会做你想做的事。
“新风格”方法
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\shortcut}{O{,}m}
{
\ailurus_make:nn {#1} {#2}
}
\cs_new_protected:Npn \ailurus_make:nn #1 #2
{
\seq_set_split:Nnn \l_ailurus_args_seq { #1 } { #2 }
\seq_pop_left:NN \l_ailurus_args_seq \l_ailurus_temp_tl
\textbf { \l_ailurus_temp_tl }
\seq_map_inline:Nn \l_ailurus_args_seq { + \textbf { ##1 } }
}
\seq_new:N \l_ailurus_args_seq
\tl_new:N \l_ailurus_temp_tl
\ExplSyntaxOff
\begin{document}
\shortcut{Ctrl,Shift,Z}
\shortcut[/]{Ctrl/,}
\end{document}
它看起来更复杂,但实际上非常相似。输入在逗号处被拆分,然后执行循环。第一个元素被弹出并进行特殊处理(实际上,在这种情况下,处理并不多)。
奖金使用此解决方案,您可以通过选择不同的分隔符作为可选参数,轻松打印逗号。当然也可以
\shortcut{Ctrl,{,}}
可能会有效,但这种策略也可以用于更困难的情况。
答案2
\documentclass{article}
\makeatletter
\def\shortcut#1{{\def\scsep{\def\scsep{+}}\@for\w:=#1\do{\scsep\textbf{\w}}}}
\makeatother
\begin{document}
\shortcut{Ctrl,Shift,Z}
\end{document}
答案3
... 而且非常短,只使用一个“特殊”宏:)
(需要字符串):
\documentclass[10pt,a4paper]{article}
\usepackage{xstring}
\newcommand{\specialtext}[1]{%
\StrSubstitute{#1}{,}{ + }[\myspecialtext]
\textbf{\myspecialtext}}
\begin{document}
This is a \specialtext{very,special} command.
\end{document}
编辑:正如@PeterGrill 指出的那样,这将产生粗体+
。为了避免这种情况,正如 OP 的要求(以防万一),应该像这样修改代码,而不会牺牲任何舒适度:
\newcommand{\specialtext}[1]{%
\noexpandarg
\StrSubstitute{#1}{,}{ \textnormal{+} }[\myspecialtext]
\textbf{\myspecialtext}}
答案4
您可以使用\foreach
循环pgffor
,它是这pgf
:
笔记:
- 我用了这
etoolbox
提供切换来测试第一个元素,但如果需要,应该很容易适应它,不需要该包,使用来自的解决方案LaTeX 条件表达式。
代码:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{pgffor}
\newtoggle{FirstShortcut}
\newcommand*{\shortcut}[1]{%
\global\toggletrue{FirstShortcut}%
\foreach \member in {#1} {%
\iftoggle{FirstShortcut}{}{+}%
\textbf{\member}%
\global\togglefalse{FirstShortcut}%
}%
}%
\begin{document}
\shortcut{Ctrl,Shift,Z}
\end{document}