我目前使用 latexnewcommand
来存储(和格式化)“变量”,如下所示:
\newcommand{\someVariable}{\emph{value}}
对于每次出现时都希望以特定方式格式化的关键词,我会这样做,方法是输入\someVariable{}
有没有办法可以删除\someVariable{}
某些时候我不想要任何特殊格式的格式,例如\removeFormatting{\someVariable{}}
。
当然,我可以手动输入文本value
,但我更喜欢将其保存在命令中,以便我可以轻松更改所有出现的文本。
答案1
您可以使用更高级别的定义:
\usepackage{xparse}
\NewDocumentCommand{\definevariable}{mmm}{%
\NewDocumentCommand{#1}{s}{\IfBooleanTF{##1}{#3}{#2{#3}}}%
}
\definevariable{\someVariable}{\emph}{value}
\definevariable{\otherVariable}{\quotedtextbf}{x}
\newcommand{\quotedtextbf}[1]{``\textbf{#1}''}
现在调用\someVariable
将打印应用的“值” \emph
,而\someVariable*
将打印不带特殊格式的值。同样,\otherVariable
将打印“X”,而\otherVariable*
只会打印一个简单的 x。请注意我们如何应用其他格式,例如引号和粗体。
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\definevariable}{mmm}{%
\NewDocumentCommand{#1}{s}{\IfBooleanTF{##1}{#3}{#2{#3}}}%
}
\definevariable{\someVariable}{\emph}{value}
\definevariable{\otherVariable}{\quotedtextbf}{x}
\newcommand{\quotedtextbf}[1]{``\textbf{#1}''}
\begin{document}
\someVariable{} \otherVariable{}
\someVariable* \otherVariable*
\end{document}
将打印
价值“X”
值 x
答案2
您可以临时将格式化命令设置为\relax
。如果您在组内执行此操作,它们随后将自动恢复。
\documentclass{article}
\newcommand\goat{\emph{goat}}
\newcommand\noemph[1]{\bgroup\let\emph\relax#1\egroup}
\begin{document}
\goat
\noemph{\goat}
\goat
\end{document}
答案3
您可以定义一个“条件强调”宏 - 例如\emphvar
下面 MWE 中的宏 - 如下所示:
- 如果只给出一个参数,用花括号括起来,它会强调该参数;
- 如果还给出了一个可选参数,用方括号括起来,值为“0”(零),它将不是强调其主要论点。
使用下面 MWE 中给出的代码,您可以指定\emphvar{Value}
将字符串“Value”设置为斜体,而\emphvar[0]{Value}
将有选择地禁用宏的强调操作。\emphvar
因此,该宏还可用于影响文档序言中关键字的出现。
\documentclass{article}
\newcommand{\emphvar}[2][]{% % macro has two args; first arg is optional
\ifx#10{#2}\else\emph{#2}\fi}
\newcommand{\Keywordi}{\emphvar{FirstKeyword}}
\newcommand{\Keywordii}{\emphvar[0]{SecondKeyword}}
\begin{document}
\emphvar{Value} % without optional arg.: emphasize macro's argument
\emphvar[0]{Value} % with intended optional arg., viz., "0": no emphasis
\emphvar[x]{Value} % with any other value for the optional arg., the macro's
% behavior is the same as if no optional argument were present
\Keywordi{} \Keywordii
\end{document}