2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 TikZ: как из \foreach вытащить вовне значение переменной?
Сообщение08.02.2026, 15:42 
Есть цикл \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. Но всё равно некрасиво получается.

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group