Lo siguiente funciona como se esperaba:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\makeatletter
\node (01) at (0, 0) {};
\draw (0, 0) -- (0, 01);
\makeatother
\end{tikzpicture}
\end{document}
Pero cuando reemplazo uno de los 01
s con \@ifnextchar1001
, que debería ser equivalente según tengo entendido, se rompe:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\makeatletter
\node (\@ifnextchar1001) at (0, 0) {};
\makeatother
\end{tikzpicture}
\end{document}
da
! Argument of \XC@definec@lor has an extra }. <inserted text> \par l.6 \node (\@ifnextchar1001) at (0, 0) {};
y
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\makeatletter
\draw (0, 0) -- (0, \@ifnextchar1001);
\makeatother
\end{tikzpicture}
\end{document}
rendimientos
! Argument of \XC@definec@lor has an extra }. <inserted text> \par l.6 \draw (0, 0) -- (0, \@ifnextchar1001) ;
¿Cuál es la diferencia relevante entre 01
y \@ifnextchar1001
en este caso? ¿Cómo puedo hacer que esto, o una construcción similar, funcione según lo previsto?
Respuesta1
\@ifnextchar
no es ampliable debido a su uso interno de \futurelet
. Un nombre de nodo debe ser expandible, se usa internamente dentro \csname
....\endcsname
Si solo desea comparar dígitos simples, entonces es suficiente realizar una prueba utilizando el análisis de argumentos de macro normal:
\documentclass{minimal}
\usepackage{tikz}
% \IfNextChar
% #1: the char for testing
% #2: code for true
% #3: code for false
% #4: next char
\makeatletter
\newcommand{\IfNextChar}[4]{%
\ifx#1#4\@empty\@empty
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{#2}{#3}%
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node (\IfNextChar1001) at (0, 0) {};
\end{tikzpicture}
\end{document}
Lo mismo se aplica al uso de \@ifnextchar
as coordinar.
Respuesta2
Puedes simplemente convertir el número de base 10 a base 10 usando matemáticas PGF. Tal vez sea excesivo, tal vez no.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\pgfmathbasetodec{\myconvresult}{001}{10}
\pgfmathsetmacro\myresult{\myconvresult+1}\myresult
\pgfmathbasetodec{\myconvresult}{0214}{10}
\pgfmathsetmacro\myresult{\myconvresult+1}\myresult
\pgfmathbasetodec{\myconvresult}{000035}{10}
\pgfmathsetmacro\myresult{\myconvresult+1}\myresult
\pgfmathbasetodec{\myconvresult}{301}{10}
\pgfmathsetmacro\myresult{\myconvresult+1}\myresult
\end{document}
Me sorprende que no haya una configuración para esto en alguna parte...