代码

代码

我想画一幅画,其中一条线连接两个点。沿着这条线,应该有一个文本“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.texmain.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}

输出

在此处输入图片描述

相关内容