删除格式

删除格式

我目前使用 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}

相关内容