Impossible d'utiliser une macro à l'intérieur du crochet ou pour le rognage

Aug 17 2020

J'essaie de définir les paramètres facultatifs de la figure par défaut avec une commande utilisateur, mais je ne peux pas l'utiliser dans le [ ]. L'exemple suivant lève une exception lorsque je remplace le trim=0 0 0 0par trim=\trim.

\usepackage[demo]{graphicx}

\newcommand{\trim}{0 0 0 0}

\begin{document}
    
    \begin{figure}[htbp]
        \centering
        \includegraphics[width=\linewidth,trim=0 0 0 0,clip]{Figure}
        \caption{blablabla.}
    \end{figure}
        
\end{document}

De plus, mon objectif est de définir une commande telle que je puisse remplacer toute la phrase à l' width=\linewidth,trim=0 0 0 0,clipintérieur [ ]par elle.

Réponses

6 UlrichDiez Aug 17 2020 at 17:02

MODIFIER LE 20 AOÛT 2020

Une fois de plus, je (Ulrich Diez) me mets dans une situation embarrassante:

En écrivant les choses ci-dessous, je (Ulrich Diez) n'a pas pensé au fait que les crochets [et - ]contrairement aux accolades - ne sont pas du code de catégorie 1 et 2 mais sont des caractères ordinaires du code de catégorie 12 et que donc des crochets peut se produire dans les macro-arguments. Moins compliqué et beaucoup plus court que le code ci-dessous est:

\documentclass{article}

\usepackage[demo]{graphicx}

\newcommand\exchange[2]{#2#1}
\newcommand{\trim}{0 0 0 0}

\begin{document}
    
    \begin{figure}[htbp]
        \centering
        \expandafter\exchange\expandafter{\trim}{%
           \includegraphics[width=\linewidth,trim=%
        },clip]{/path/to/graphics/file.jpg}%%%%%
        % Why two captions?
        \caption{Testing of the Y-axis.}%%%%%
        \caption{blablabla.}%%%%%
    \end{figure}
        
\end{document}

La séquence

\expandafter\exchange\expandafter{\trim}{%
   \includegraphics[width=\linewidth,trim=%
},clip]{/path/to/graphics/file.jpg}%%%%%

déclenche ce qui suit:

La \expandafter-chain conduit à l'expansion \trim:

\exchange{0 0 0 0}{%
   \includegraphics[width=\linewidth,trim=%
},clip]{/path/to/graphics/file.jpg}%%%%%

Augmenter les \exchangerendements:

\includegraphics[width=\linewidth,trim=%
0 0 0 0,clip]{/path/to/graphics/file.jpg}%%%%%

FIN DE MODIFICATION LE 20 AOÛT 2020



Si la définition de la commande \trim-commande peut changer d'une figure à l'autre, vous pouvez, par exemple, utiliser la \romannumeral0technique -expansion- et d'échange- \romannumeral0d'arguments-l'essentiel de -expansion est:

  • TeX étend les jetons extensibles tout en rassemblant les jetons qui appartiennent à la quantité «en nombre» qui doit être représentée en chiffres romains.
  • Si le premier jeton que TeX trouve lors de la collecte de la quantité de « nombre» est un chiffre, par exemple, 0alors le processus de collecte de jetons qui appartiennent à la quantité de « nombre» se transforme en un processus de collecte de plus de chiffres ou quelque chose qui ne l'est pas. un chiffre et met donc fin au processus de collecte. Les jetons extensibles sont étendus lors de la collecte de chiffres. Un jeton d'espace terminant une séquence de chiffres met fin au processus de collecte de plus de chiffres et est éliminé en silence.
  • Si le nombre recueilli n'est pas positif, TeX avalera silencieusement les jetons formant la quantité «en nombre» sans livrer aucun jeton en retour.

Cela implique que cela \romannumeralpeut être utilisé pour inciter TeX à faire beaucoup de travail d'expansion et d'échange d'arguments tant qu'il est assuré qu'à la fin un nombre non positif est trouvé.

\documentclass{article}

\usepackage[demo]{graphicx}

\newcommand\exchange[2]{#2#1}
\newcommand{\trim}{0 0 0 0}

\begin{document}
    
    \begin{figure}[htbp]
        \centering
        \expandafter\includegraphics\expandafter[%
          \romannumeral0%
          \expandafter\exchange
          \expandafter{\trim}{ width=\linewidth,trim=},clip%
        ]{/path/to/graphics/file.jpg}%%%%%
        % Why two captions?
        \caption{Testing of the Y-axis.}%%%%%
        \caption{blablabla.}%%%%%
    \end{figure}
        
\end{document}

La séquence

\expandafter\includegraphics\expandafter[%
  \romannumeral0%
  \expandafter\exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

déclenche ce qui suit:

Le processus d'obtention de l'extension (de niveau supérieur) de \expandafterdéclenche le processus de fourniture de l'extension de niveau supérieur du jeton suivant mais un et se termine lorsque le processus d'obtention de l'extension de niveau supérieur du jeton suivant, sauf un, se termine. . Donc:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggers the process of obtaining the top-level-
% expansion of the next but one token:
\includegraphics\expandafter[%
  \romannumeral0%
  \expandafter\exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Le jeton suivant mais un sortant du premier \expandafterest également un \expandafter, donc:

% Process of obtaining the top-level-expansion of the first \expandafter in 
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggers the process of obtaining the top-level-
% expansion of the next but one token:
[%
  \romannumeral0%
  \expandafter\exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Le jeton suivant mais un sortant du second \expandafterest \romannumeral, ainsi:

% Process of obtaining the top-level-expansion of the first \expandafter in 
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in 
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering tokens of a <number>-
  %   quantity in progress:
  0%
  \expandafter\exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

TeX trouve le chiffre 0, donc \romannumeralle sous-processus de collecte de jetons d'une quantité de « nombre» se transforme en processus de collecte de plus de chiffres ou quelque chose qui termine la séquence de chiffres:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
  %   <number>-quantity in progress; digit "0" found so far:
  \expandafter\exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

En recherchant plus de jetons / chiffres appartenant à la quantité « nombre», TeX rencontre le troisième \expandafter:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
  %   <number>-quantity in progress; digit "0" found so far:
  %     Process of obtaining the top-level-expansion of the third \expandafter
  %     in progress, this process triggers the process of obtaining the top-
  %     level-expansion of the next but one token:
  \exchange
  \expandafter{\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Le prochain jeton sortant du troisième \expandafterest \expandafterdonc:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
  %   <number>-quantity in progress; digit "0" found so far:
  %     Process of obtaining the top-level-expansion of the third \expandafter
  %     in progress, this process triggerd the process of obtaining the top-
  %     level-expansion of the fourth \expandafter:
  \exchange
  %   Process of obtaining the top-level-expansion of the fourth \expandafter
  %   in progress, this process triggers the process of obtaining the top-
  %   level-expansion of the next but one token:
  {\trim}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Le prochain jeton sortant du quatrième \expandafterest \trim, ainsi le processus d'obtention de l'expansion de niveau supérieur du quatrième se \expandaftertermine lorsque le processus d'obtention de l'expansion de niveau supérieur de \trimis se termine:

% Process of obtaining the top-level-expansion of the first \expandafter in 
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a 
  %   <number>-quantity in progress, digit "0" found so far:
  %     Process of obtaining the top-level-expansion of the third \expandafter
  %     in progress, this process triggerd the process of obtaining the top-
  %     level-expansion of the fourth \expandafter:
  \exchange
  %  Process of obtaining the top-level-expansion of the fourth \expandafter
  %  terminated.
  {0 0 0 0}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Lorsque le processus d'obtention de l'expansion de niveau supérieur du quatrième \expandafterest terminé, le processus d'obtention de l'expansion de niveau supérieur du troisième se \expandaftertermine également:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
   %  <number>-quantity in progress, digit "0" found so far:
  %     Process of obtaining the top-level-expansion of the third \expandafter
  %     terminated.
  \exchange
  {0 0 0 0}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

Au fur et à mesure que le processus d'obtention de l'expansion de niveau supérieur du troisième \expandafterse termine, l' \romannumeralexpansion se poursuit, ce qui entraîne une expansion \exchange:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
  %   <number>-quantity in progress; digit "0" found so far:
  <space-token>width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%

TeX trouve un jeton d'espace. Ce jeton d'espace met fin au sous-processus de collecte de plus de chiffres d'une quantité de « nombre» et est ignoré en silence.

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral in progress;
  %   Sub-process of \romannumeral-expansion for gathering more digits of a
  %   <number>-quantity terminated; number "0" found.
  width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%

Comme TeX a trouvé une quantité de ` ` nombre '' dont la valeur est 0, bien qu'elle 0ne soit pas une valeur positive, le processus d'obtention de l'expansion de niveau supérieur de se \romannumeraltermine en avalant silencieusement les jetons formant cette quantité de ` ` nombre '' sans que TeX ne délivre aucun jeton dans revenir.

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of \romannumeral:
[%
  % Process of obtaining the top-level-expansion of \romannumeral terminated.
  width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%

Lorsque le processus d'obtention de l'expansion de niveau supérieur de \romannumeralest terminé, le processus d'obtention de l'expansion de niveau supérieur de la seconde se \expandaftertermine également:

% Process of obtaining the top-level-expansion of the first \expandafter in
% progress, this process triggerd the process of obtaining the top-level-
% expansion of the second \expandafter:
\includegraphics
% Process of obtaining the top-level-expansion of the second \expandafter
% terminated.
[%
  width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%

Lorsque le processus d'obtention de l'expansion de niveau supérieur du second \expandafterest terminé, le processus d'obtention de l'expansion de niveau supérieur du premier se \expandaftertermine également:

% Process of obtaining the top-level-expansion of the first \expandafter
% terminated.
\includegraphics
[%
  width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%