我想画一幅画,其中一条线连接两个点。沿着这条线,应该有一个文本“x”,其中 x 是另一个文档中特定方程的编号。不幸的是,我无法实现这个想法。到目前为止,我有一个主文档(main.tex
)和一个图形文档(figure.tex
)。我首先编译main.tex
,然后编译figure.tex
。使用引用作为图中的节点标签似乎没问题。但是,对于文本装饰,它们似乎完全锁定了 pdflatex 应用程序。这是一个最小工作示例:
main.tex
\documentclass{standalone}
\begin{document}
% the equation of interest
\begin{equation} \label{x}
x = 42
\end{equation}
% the figure of interest
\includegraphics{figure.pdf}
\end{document}
figure.tex
\documentclass{standalone}
\usepackage{xr} % edit: this line and the next allow for cross-referencing
\externaldocument{main}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
\draw[] (0,0) node[] (A) {\ref{x}}; % this works
\draw[] (1,1) node[] (B) {x}; % this also works
\draw[decoration={text along path,text align={align=center},%
text={\ref{x}}},postaction={decorate}] (A) -- (B); % does not compile, i. e., pdflatex seems to be in an infinite loop
\draw[decoration={text along path,text align={align=center},%
text={x}},postaction={decorate}] (A) -- (B); % does compile, but is useless
\end{tikzpicture}
\end{document}
我的问题如下:
1.)(解决了吗?)我必须如何配置编译过程才能使用main.tex
中的引用figure.tex
?理想情况下,我想使用外部化来生成 中的图形figure.tex
。这是我首先使用两个不同文件的动机。
编辑:我想我现在可以用我自己的方法来回答这个问题这个问题的答案: 通过增加
\usepackage{xr} \externaldocument{main}
到figure.tex
,引用从figure.tex
到main.tex
应该可以!如果这种风格不好,请纠正我。不过问题 2 仍未解决。
2.) 如何使用引用作为文本装饰?我不知道为什么会失败。
答案1
无论有没有xr
包装,\ref{x}
都扩展为,1\hbox {}
这不是正确的内容text along path
。
为了准确地获得1
,您可以使用包\getrefnumber
提供的宏refcount
(参见如何将 \ref 的输出与数字进行比较?)。
这是一个工作figure.tex
文件:
\documentclass{standalone}
\usepackage{refcount}
\usepackage{xr} % edit: this line and the next allow for cross-referencing
\externaldocument{main}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
\draw[] (0,0) node[] (A) {\ref{x}};
\draw[] (1,1) node[] (B) {x};
\draw[postaction={
decoration={text along path,text align={align=center},
text={\getrefnumber{x}}},decorate}]
(A) -- (B);
\end{tikzpicture}
\end{document}
答案2
xr
只要与 位于main.aux
同一文件夹中,您的第一个问题就可以通过包解决figure.tex
。对于第二个问题,您可以character command
按如下方式(滥用)使用该密钥。
首先,您需要键text effects along path
,以便将每个字符作为 TikZ 节点插入到图片中。然后使用text effects/.cd
来启用对自定义文本效果的键的访问,特别是character command
键。我们定义一个宏\mycommand
作为\def\mycommand#1{\ref{#1}}
与此键一起使用。character command=\mycommand
键扩展 TeX 宏\mycommand
,将每个字符text={x}
作为其参数。在本例中,只有一个字符x
,因此\mycommand{x}
扩展为\ref{x}
。[如果您的标签有多个字符,同样的技巧也适用,但您需要添加键group letters
,以便将一串字母视为一个“字符”。]
代码
\documentclass{article}
\usepackage{tikz,mathtools}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{equation}\label{x}
a^2=b^2+c^2
\end{equation}
\def\mycommand#1{\ref{#1}} % define character command
\begin{tikzpicture}
\draw[] (0,0) node[] (A) {\ref{x}}; % this works
\draw[] (1,1) node[] (B) {x}; % this also works
\draw[decoration={
text effects along path, % new
text align={center},
text={x},
text effects/.cd, % new
text along path, % new
group letters, % new
every word/.style={character command=\mycommand} % new
},
postaction={decorate}
] (A) -- (B);
\end{tikzpicture}
\end{document}