软件包 csquotes 似乎无法在通过宏定义的 mdframed 框内工作

软件包 csquotes 似乎无法在通过宏定义的 mdframed 框内工作

如果我定义一个使用mdframed框,这似乎禁用csquotes(红色框)。但是使用mdframed直接(即不通过宏定义它),然后包裹csquotes可以很好地完成其工作(绿色框)。

在此处输入图片描述

我如何定义mdframed宏内的环境还可以使用包裹csquotes

参考:

代码:

\documentclass{article}

\usepackage{mdframed}
\usepackage{xcolor}

%%% https://tex.stackexchange.com/questions/50712/automatically-convert-quotations-in-the-form-of-abc-to-become-abc
\usepackage{csquotes}
\MakeOuterQuote{"}

\mdfsetup{frametitlerule=true, frametitlerulecolor=brown}

\newcommand{\HelloWorld}{%
    \begin{mdframed}[backgroundcolor=red!25,frametitle={Usage of mdframed via a macro (Quotes Are Incorrect)}]
        "Hello World."
    \end{mdframed}%
}%

\begin{document}

\HelloWorld

\begin{mdframed}[backgroundcolor=green!25,frametitle={Direct usage of mdframed (Quotes Are Correct)}]
    "Hello World."
\end{mdframed}%


\end{document}

答案1

该包通过激活来csquotes执行,但它会推迟设置。因此,当您的被处理时,替换文本中的字符是正常(非活动)字符。\MakeOuterQuote{"}"\AtBeginDocument\newcommand{\HelloWorld}{...}"

如果你尝试在定义中的\show第一个之前添加,编译将停止并显示"

> the character ".
\HelloWorld ...ro (Quotes Are Incorrect)}] \show "
                                                  Hello World." \end {mdframed}

如果你在“naked”环境中\show添加,你会得到"mdframed

> "=macro:
->\csqQQ {34}.
l.23     \show"
               Hello World."

(当然,也有几个错误)。

所以mdframed和这个没关系。

\documentclass{article}

\usepackage{mdframed}
\usepackage{xcolor}

\usepackage{csquotes}
\MakeOuterQuote{"}

\mdfsetup{frametitlerule=true, frametitlerulecolor=brown}

\newcommand{\HelloWorld}{%
    \begin{mdframed}[
      backgroundcolor=red!25,
      frametitle={Usage of mdframed via a macro (Quotes Are Correct)}
    ]
        \csqQQ{34}Hello World.\csqQQ{34}
    \end{mdframed}%
}

\begin{document}

\HelloWorld

\begin{mdframed}[
  backgroundcolor=green!25,
  frametitle={Direct usage of mdframed (Quotes Are Correct)}
]
    "Hello World."
\end{mdframed}


\end{document}

在此处输入图片描述

答案2

如果你的\newcommand{\HelloWorld}是之前的最后一个活动\begin{document},并且你的实际代码中没有其他活动",则应在该命令前面添加:

\catcode`\"=13

你不需要改变你的定义。

原因已由 egreg 回答。您需要"在定义时激活\HelloWorld

相关内容