대괄호 내부 또는 트리밍에 매크로를 사용할 수 없습니다.

Aug 17 2020

사용자 명령을 사용하여 그림 선택적 매개 변수를 기본값으로 정의하려고하는데 [ ]. 다음 예제에서는을 trim=0 0 0 0로 바꿀 때 예외가 발생합니다 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}

게다가 내 목표는 width=\linewidth,trim=0 0 0 0,clip내부 의 전체 문장을 대체 할 수있는 명령을 정의하는 [ ]것입니다.

답변

6 UlrichDiez Aug 17 2020 at 17:02

2020 년 8 월 20 일 수정

다시 한번 나는 (Ulrich Diez) 자신을 당황스러운 상황에 빠뜨 렸습니다.

아래 내용을 작성하는 동안 I (Ulrich Diez)는 대괄호 []중괄호와는 달리 범주 코드 1과 2가 아니라 범주 코드 12의 일반 문자이므로 대괄호라는 사실에 대해 생각하지 않았습니다. 매크로 인수 내에서 발생할 수 있습니다. 아래 코드보다 덜 복잡하고 훨씬 짧습니다.

\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}

순서

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

다음을 트리거합니다.

\expandafter확대에 쇄 리드 \trim:

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

\exchange수율 확대 :

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

2020 년 8 월 20 일에 편집 종료



\trim-command 의 정의가 그림에서 그림으로 바뀔 수 있다면, 예를 들어 \romannumeral0-expansion- 및 argument-exchanging-technique를 사용할 수 있습니다. -expansion의 요지는 \romannumeral0다음과 같습니다.

  • TeX는 확장 가능한 토큰을 확장하면서 로마 숫자로 표시되는 ⟨number⟩- 수량에 속하는 토큰을 수집 합니다.
  • TeX가 ⟨number⟩ -quantity 를 모아서 찾은 첫 번째 토큰이 숫자 (예 :) 이면 ⟨number⟩ -quantity에 0속하는 토큰을 모으는 과정은 더 많은 자릿수 또는 그렇지 않은 것을 모으는 과정으로 바뀝니다. 따라서 수집 프로세스를 종료합니다. 확장 가능한 토큰은 숫자를 수집하는 동안 확장됩니다. 숫자 시퀀스를 종료하는 스페이스 토큰은 더 많은 숫자를 수집하는 프로세스를 종료하고 조용히 버려집니다.
  • 수집 된 숫자가 양수가 아니면 TeX는 토큰을 대가로 전달하지 않고 ⟨number⟩- 수량을 형성하는 토큰을 조용히 삼킬 것 입니다.

이것은 \romannumeral결국 양수가 아닌 숫자가 발견된다는 것이 보장되는 한 많은 확장 및 인수 교환 작업을 수행하도록 TeX를 속이는 데 사용할 수 있음을 의미합니다 .

\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}

순서

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

다음을 트리거합니다.

(최상위) 확장을 획득하는 \expandafter과정은 다음 토큰이 하나 인 최상위 확장을 전달하는 과정 을 트리거하고 다음 토큰이 아니라 하나의 토큰을 획득하는 과정이 종료되면 종료됩니다. . 그러므로:

% 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}%%%%%

첫 번째에서 나가는 다음 토큰 \expandafter\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 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}%%%%%

두 번째에서 나가는 다음 토큰 \expandafter\romannumeral이므로 다음과 같습니다.

% 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는 digit를 찾습니다. 0따라서 ⟨number⟩ -quantity의 \romannumeral토큰을 수집하는 하위 프로세스는 더 많은 숫자를 수집하는 프로세스 또는 숫자 시퀀스를 종료하는 프로세스로 바뀝니다.

% 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}%%%%%

⟨number⟩ -quantity에 속하는 더 많은 토큰 / 숫자를 검색하는 동안 TeX는 세 번째 \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}%%%%%

다음으로 세 번째에서 나가는 하나의 토큰 \expandafter\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 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}%%%%%

네 번째 토큰에서 나가는 다음 토큰 \expandafter\trim이므로 최상위 확장 \expandafter을 얻는 프로세스가 종료되면 네 번째 의 최상위 확장을 얻는 프로세스 \trim가 종료됩니다.

% 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}%%%%%

네 번째 \expandafter의 최상위 확장을 획득하는 프로세스가 종료됨에 따라 세 번째의 최상위 확장을 획득하는 프로세스 \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
  %     terminated.
  \exchange
  {0 0 0 0}{ width=\linewidth,trim=},clip%
]{/path/to/graphics/file.jpg}%%%%%

세 번째의 최상위 확장을 얻는 프로세스 \expandafter가 종료되면 \romannumeral-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는 스페이스 토큰을 찾습니다. 이 공간 토큰은 ⟨number⟩- 수량 의 더 많은 자릿수를 수집하는 하위 프로세스를 종료하고 조용히 버려집니다.

% 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}%%%%%

텍 같이 발견 ⟨number⟩에 그 값 -quantity을 0하면서, 0양의 값의 최상위 팽창 얻는 프로세스 아닌 \romannumeral자동으로 그 형성 토큰 삼켜이 종료 ⟨number⟩의 모든 토큰을 전달 텍 않고 -quantity을 반환.

% 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}%%%%%

최상위 확장 \romannumeral을 획득하는 프로세스가 종료됨에 따라 두 번째 최상위 확장을 획득하는 프로세스 \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
% terminated.
[%
  width=\linewidth,trim=0 0 0 0,clip%
]{/path/to/graphics/file.jpg}%%%%%

두 번째 \expandafter의 최상위 확장을 얻는 프로세스가 종료됨에 따라 첫 번째 의 최상위 확장을 얻는 프로세스 \expandafter도 종료됩니다.

% 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}%%%%%