Buscando \proporcionar longitud

Buscando \proporcionar longitud

Necesito una macro similar a \providecommand. \providelength{\lengthName}{0.5cm}debería darme una nueva longitud si aún no existe. Me gustaría usar la macro para establecer valores estándar para TikzPicture si no se proporcionan los valores deseados. Encontré el siguiente código en la web pero no funciona:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}

\makeatletter
\newcommand*\providelength[1]{%
  \begingroup
    \escapechar\m@ne
    \xdef\@gtempa{\string#1}%
  \endgroup
  \@ifundefined{\@gtempa}%
    {\newskip#1}%
    {}%
}
\makeatother

\begin{document}
  \providelength{\ltest}{0.1pt}
  \the\ltest

\end{document}

El resultado de este documento es

0.1pt
0.0pt

Por tanto, el comando parece no tener ningún efecto. En lugar de ello, se imprime el argumento. ¿Alguien tiene una idea de cómo solucionar esto?

Respuesta1

Mi solución supone que hay un \carácter al comienzo del nombre del registro de longitud, no se prueba, tikzetc.

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}%
\usepackage{ifmtarg}%


\makeatletter
\newcommand*{\otherprovidelength}[2]{%
  \begingroup
    \escapechar\m@ne
    \xdef\@gtempa{\string#1}%
  \endgroup
  \@ifundefined{\@gtempa}%
    {\newskip#1%
     #1=#2}%  Assign the 2nd argument.
    {}%
}
\makeatother



\providecommand{\providelength}[2]{%
\ifdeflength{#1}{% It is already defined!
}{% Not defined, so define it!
\newlength{#1}%
}%
\setlength{#1}{#2}%
}%

\makeatletter
\providecommand{\ProvideLength}[2][]{%
% Check, if the command is already defined, if not, then define it!
\ifdeflength{#2}{% It is already defined!
\GenericWarning{}{Warning: Length #2 already defined!!!!!!!!} % Optional
}{% Not defined, so define it!
\newlength{#2}%
}%
\@ifmtarg{#1}{%  is 1st argument empty -> do not set the length at all!
}{% Set the length to the value of the 1st argument.
\setlength{#2}{#1}%  
}% End of \@ifmtarg
}% End of \providecommand
\makeatother



\begin{document}
  \providelength{\ltest}{0.01pt}
  \the\ltest \par
% Some testing
  \addtolength{\ltest}{0.05pt}
  \the\ltest \par 

  \ProvideLength[0.17pt]{\ltesttwo}
  \ProvideLength{\lyetanotherlength} % initialized to 0.0pt if undefined before
 \the\ltesttwo \par
 \the\lyetanotherlength
\end{document}

EDITAR:

Agregué otro comando \ProvideLengthque toma el valor de longitud como primer argumento opcional y los nombres de los registros de longitud como segundo argumento. También generará una advertencia si el registro de longitud ya existe.

Cambié el comando de Simon \otherprovidelengthy agregué el segundo argumento que faltaba, así como la asignación al registro de omisión.

información relacionada