我使用的包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:nn
for\emph
和\embrac_textsl:nn
for相对应\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