Embrac 在环境中不起作用

Embrac 在环境中不起作用

我使用的包embrac有以下问题斜体文本中的直立括号讓。

但是,如果我定义一个简单的环境,它将不起作用。请参见下面的示例。我该如何解决这个问题?

\documentclass{article}

\usepackage{embrac}

\begin{document}

\newcommand*{\TextA}{(\ldots) this is a citation from a famous author}
\newcommand*{\TextB}{\textup{(\ldots)} this is a citation from a famous author}

\textit{\TextA}\\
\textit{\TextB}\\
\TextA

\end{document}

答案1

您需要先进行扩展,\TextA然后再将其提供给\textit

\expandafter\textit\expandafter{\TextA}

如果愿意,您可以\textit先重新定义一次其参数:

\ExplSyntaxOn
\cs_generate_variant:Nn \embrac_textit:nn {no}

\RenewDocumentCommand \textit {sm}
  {
    \IfBooleanTF {#1}
      { \embrac_textit:no {*} {#2} }% using the new variant
      { \embrac_textit:no { } {#2} }% using the new variant
  }
\ExplSyntaxOff

(与\embrac_emph:nnfor\emph\embrac_textsl:nnfor相对应\textsl

请注意,这只会扩展参数一次。仍然\textit{x\TextA} \TextA不会扩展。您需要一个x-variant(\edef类似扩展),但这可能很危险……也许有些\etextit需要自行承担风险:

\ExplSyntaxOn
\cs_generate_variant:Nn \embrac_textit:nn {nx}

\NewDocumentCommand \etextit {sm}
  {
    \IfBooleanTF {#1}
      { \embrac_textit:nx {*} {#2} }
      { \embrac_textit:nx { } {#2} }
  }
\ExplSyntaxOff

相关内容