在尝试编写一些命令来简化使用 tikz 生成时间线时,我偶然发现了这个错误:
梅威瑟:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfcalendar}
\begin{document}
\newcount\StartTime
\newcount\EndTime
\begin{tikzpicture}
\pgfcalendardatetojulian{2021-01-01}{\StartTime}
\pgfcalendardatetojulian{2022-01-01}{\EndTime}
\typeout{\the\StartTime}
\draw let
\n{length} = (\the\StartTime-\the\EndTime),
in
(0,0) -- (\n{length},0);
\end{tikzpicture}
\end{document}
执行此输出时得到:
2459216
/media/daten/coding/01_manuals/tex/testing/chrono/mwe.tex:17: Use of \tikz@cc@stop@let doesn't match its definition.
<recently read> \the
l.17 \n{length} = (\the
\StartTime-\the\EndTime),
我发现我在获取计数器的值时遇到了一些麻烦。由于我是 LaTeX 扩展方面的新手,因此很遗憾我无法自己解决这个问题(而且互联网研究也没有找到有用的结果)。
有人可以帮我将 tex 计数器带入 tikz 吗?
答案1
has\n{<number register>}
语法
\n{<number register>} = {<pgfmath expression>}
因此它应该是\n{length} = {\the\StartTime-\the\EndTime}
(花括号,而不是圆括号)。
但是,\n{length} = {\the\StartTime-\the\EndTime}
将引发“维度太大”错误,因为\StartTime
和\EndTime
都是整数,对于维度来说太大而无法容纳(以 为单位pt
)。
解决方法:
在解析数学表达式之前计算\StartTime
和之间的差值。这可以在解析之前进行(借助另一个计数),也可以以可扩展的方式就地进行。\EndTime
pgfmath
\draw
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfcalendar}
\begin{document}
\newcount\StartTime
\newcount\EndTime
\begin{tikzpicture}
\pgfcalendardatetojulian{2021-01-01}{\StartTime}
\pgfcalendardatetojulian{2022-01-01}{\EndTime}
\typeout{\the\StartTime}
\draw let
\n{length} = {\the\numexpr\StartTime-\EndTime pt},
in
% \n{length} is -365pt
(0,0) -- (\n{length},0);
\end{tikzpicture}
\end{document}