为什么 unicode-math 不能与 TikZ 一起使用?

为什么 unicode-math 不能与 TikZ 一起使用?

此主题源自此主题

\documentclass{article}

\usepackage{unicode-math} % This causes the question mark bug
% This code requises unicode-math
% How can you use the code without unicode-math -package?
\setmathfont[BoldFont={latinmodern-math.otf}]{latinmodern-math.otf}
\setmathfont[range=\mathscr,Scale=MatchUppercase]{Asana-Math.otf}
\usepackage{tikz}
\usetikzlibrary{tikzmark,decorations.pathreplacing,calc}
\newcommand\MyText[4][0pt]{%
\begin{tikzpicture}[overlay, remember picture]
\draw [decoration={brace},decorate,thick]
   ( $ ({pic cs:#3}|-{pic cs:#2}) + (#1,1.3ex) $ ) --  
    node[anchor=west,xshift=5pt,text width=5cm] {#4} 
  ( $ (pic cs:#3) + (#1,0) $ );
\end{tikzpicture}%
}

% I have defined question like this
\usepackage[framemethod=tikz]{mdframed}
\newtheorem{question}{Question}
\mdfdefinestyle{que}{
  linecolor=cyan,
  backgroundcolor=cyan!20,
}
\surroundwithmdframed[style=que]{question}

\begin{document}
\begin{question}
Lorem ipsum?
\end{question}
\end{document}

我在想你为什么需要unicode-mathTikZ 代码包。

为什么 TikZ 代码需要unicode-math包?

答案1

这是一个非常不幸的情况。

问题是,在处理标记时,也就是扫描时unicode-math,它的大部分工作都由它完成。其中一部分工作是将其定义为产生问号的数学符号。\AtBeginDocument\begin{document}\question

因此,当您使用 定义question环境时\newtheorem,不会引发任何错误。但之后unicode-math会重新定义(这是处理\question时执行的宏) 。\begin{question}

最小示例:

\documentclass{article}

\usepackage{unicode-math} % This causes the question mark bug

\newtheorem{question}{Question}

\begin{document}
\begin{question}
Lorem ipsum?
\end{question}
\end{document}

您可以更改环境的名称,也可以恢复定义;第二种策略可以通过以下方式实现

\documentclass{article}

\usepackage{unicode-math} % This causes the question mark bug

\newtheorem{question}{Question}
\let\masiquestion\question
\AtBeginDocument{%
  \let\umquestion\question
  \let\question\masiquestion
}

\begin{document}
\begin{question}
Lorem ipsum?
\end{question}
\end{document}

在我看来,unicode-math 应该重新定义命令时至少发出一个警告。

答案2

正如我在评论中写的那样:unicode-math 定义了\question。因此您不能使用“question”作为环境的名称。将其替换为例如 questionX:

\documentclass{article}

\usepackage{unicode-math} % This causes the question mark bug

\newtheorem{theorem}{Theorem}
\newtheorem{question}[theorem]{Question}
\newtheorem{questionX}[theorem]{Question}


\begin{document}
\question \question \question %defined by unicode math.


\begin{question} %fails
Lorem ipsum?
\end{question}

\begin{questionX} %works
Lorem ipsum?
\end{questionX}
\end{document}

相关内容