我正在使用Dia 图形编辑器并将我的图表导出到 TikZ 代码。我试图通过使用 LaTeX 来解决 Dia 无法轻松排版公式等的问题。不幸的是,该编辑器不允许(并且不会)直接导出原始文本 - 任何插入文本标签的 LaTeX 代码都会在输出中被转义,这使得它(大部分)毫无用处:
\ifx\du\undefined
\newlength{\du}
\fi
\setlength{\du}{15\unitlength}
\begin{tikzpicture}
\pgftransformxscale{1.000000}
\pgftransformyscale{-1.000000}
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\definecolor{dialinecolor}{rgb}{1.000000, 1.000000, 1.000000}
\pgfsetfillcolor{dialinecolor}
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (4.000000\du,6.000000\du){PlaceHolder0};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (4.000000\du,8.000000\du){PlaceHolder1};
% setfont left to latex
\definecolor{dialinecolor}{rgb}{0.000000, 0.000000, 0.000000}
\pgfsetstrokecolor{dialinecolor}
\node at (4.000000\du,10.000000\du){!@\#\$\%\^{}\&*()|\{\}\ensuremath{[}\ensuremath{]}<>};
\end{tikzpicture}
上面的代码对应于一个带有三个文本标签的图表。最后一行之前的一行是一个带有一堆符号的标签:!@#$%^&*()|{}[]<>
变为!@\#\$\%\^{}\&*()|\{\}\ensuremath{[}\ensuremath{]}<>
。并非每个符号都经过转义,但其中相当一部分经过了转义。
我希望绕过这个限制,使用catchfile
包“导入”TikZ 代码,然后StrSubstitute
从xstring
包中用原始 TeX 代码替换特定的占位符文本。我当前的代码如下所示:
\newcommand{\inputfigure}[1]{{
\CatchFileDef{\tmp}{#1}{}%
\noexpandarg%
\expandafter\StrSubstitute\expandafter{\tmp}{PlaceHolder0}{Text0}[\tmp]%
\expandafter\StrSubstitute\expandafter{\tmp}{PlaceHolder1}{Text1}[\tmp]%
\tmp%
}}
不幸的是,它似乎不起作用——LaTeX 在 100% CPU 下运行了很长时间,然后输出仍然包含原始文本。
我怎样才能让它工作?或者,还有其他不涉及外部程序的方法吗?
答案1
注释有点长。您可以在标签中写入命令,然后|mytext
在 tex 文档中本地更改 | 的 catcode,以便可以用它来代替反斜杠:
\documentclass{scrreprt}
\def\mytext{abc}
\begin{document}
\begingroup
\catcode`\|=0
|mytext
\endgroup
\end{document}
(这自然只会在你的 tikz 代码中的其他地方没有使用 | 时才起作用。)