Есть цикл \foreach, где рисуются несколько вертикальных линий, и для каждой задаётся отступ от предыдущей:
Код:
\foreach \dx/\ystart [remember=\x as \xlast (initially 0)] in {0/\ytabcaptiontop, 7.5/0, 6.5/\ytabcaptiontop}
{
\tikzmath{\x=\xlast+\dx;}
\draw[ultra thick](\x,\ystart) -- (\x,-\linecount);
}
После цикла требуется знать финальное значение \x, чтобы продолжить рисовать с того же места. В устаревшем texlive из репозитория Debian Buster значение \xlast было доступно не только внутри цикла как предыдущее \x, но и после цикла как последнее \x. После обновления до стабильного Debian Trixie переменная \xlast после цикла оказалась не определена. Для быстрого исправления использован костыль в виде счётчика globalInteger:
Код:
\foreach \dx/\ystart [remember=\x as \xlast (initially 0)] in {0/\ytabcaptiontop, 7.5/0, 6.5/\ytabcaptiontop}
{
\tikzmath{\x=\xlast+\dx;}
\draw[ultra thick](\x,\ystart) -- (\x,-\linecount);
\tikzmath{integer \xx; \xx=\x+0.5;}
\setcounter{globalInteger}{\xx}
}
\tikzmath{\xlast=\arabic{globalInteger};}
Но значение счётчика — всегда целочисленное, а координата \x — не обязательно. И вообще решение некрасивое.
Есть ли более адекватный способ вытащить вовне значение переменной из \foreach?
P. S. Запоздало подумала, что с не-целочисленностью можно было бы выкрутиться как-то так:
Код:
\tikzmath{integer \xx; \xx=512*\x+0.5;}
\setcounter{globalInteger}{\xx}
...
\tikzmath{\xlast=\arabic{globalInteger}/512;}
визуально результат вряд ли будет отличаться от настоящего \x. Но всё равно некрасиво получается.