如果我定义一个使用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
。