如下图所示,编译 document.tex 后……
- ...第一部分像往常一样使用 mathtikz 工作正常
- ...第二部分通过 abc.tex 使用 mathtikz(同时重新命令 \test)无法正常工作
第二部分的区别在于,我使用 \let\detokenize\relax 摆脱了 abc.tex 文件中的 \detokenize。
注意: \detokenize 必须保留在 abc.tex 文件中,这是与本主题无关的另一个原因
文档.tex:
\documentclass{article}
\usepackage{pgf,tikz}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mathtikzmark}[2]{\tikz[baseline={(#1.base)},remember picture] \node (#1) {#2};}
\usepackage{xparse}
\DeclareDocumentCommand{\link}{ O{shorten >=4pt,shorten <=4pt} O{} O{above} m m}{
\begin{tikzpicture}[remember picture, overlay, >=stealth, shift={(0,0)}]
\draw[#1,->,line width=0.4mm] (#4) to node[#3] {#2} (#5) ;
\end{tikzpicture}%
}
%-----------------------------------------------------------------------------------------------
\newcommand{\test}{}
\begin{document}
% this part works fine
\hspace*{40mm}f(x) = x + \mathtikzmark{B}{3}
\fcolorbox{red}{white}{\mathtikzmark{A}{Attention: blabla}}
\link[color=black,shorten >=0.5mm,shorten <=1.mm,out=0,in=270, to path={(\tikztostart) -| (\tikztotarget)}]{A}{B}
%%%
% this part does not
\renewcommand{\test}{\mathtikzmark{C}{3}}
\hspace*{40mm}f(x) = x + {\begingroup \let\detokenize\relax \input{abc.tex} \endgroup}
\fcolorbox{red}{white}{\mathtikzmark{D}{Attention: blabla}}
\link[color=black,shorten >=0.5mm,shorten <=1.mm,out=0,in=270, to path={(\tikztostart) -| (\tikztotarget)}]{D}{C}
\end{document}
abc.tex:
{\detokenize {\test}}
编译 document.tex 得到的结果为“\tikz\every text node part\tikz”,但这并不是我们想要的:
有人知道如何修复它吗?