결과로 직접 확장되는 pgfmath 매크로가 없는 이유는 무엇입니까?

결과로 직접 확장되는 pgfmath 매크로가 없는 이유는 무엇입니까?

\pgfmath{<expression>}평가된 의 결과로 직접 확장되는 기본 매크로(예: )가 없는 특별한 이유가 있나요 <expression>? \pgfmathparse{\linewidth-2.7cm}\pgfmathresult한 번만 사용되는 길이를 계산하기 위해 입력해야 할 때 항상 특히 번거롭다는 생각이 듭니다 .

이러한 매크로는 일회용 계산에 매우 유용하기 때문에 직접 정의하려고 시도했지만 소용이 없었습니다. 이러한 정의에 대해 도움을 주실 수 있나요? 아니면 적어도 그런 일이 불가능한 이유를 설명해 주실 수 있나요?

\pgflength나를 괴롭히는 것은 my 와 default가 모두 \pgfmathresult(에 따른 \show) 매크로일 뿐이고 둘 다 궁극적으로 일련의 숫자로 확장된다는 사실입니다 .:-(

\documentclass{article}

\usepackage{pgf}

\newcommand\pgfmath[1]{\pgfmathparse{#1}\pgfmathresult}
\newcommand\pgftrunc[1]{\pgfmathparse{int(#1)}\pgfmathresult}
\newcommand\pgflength[1]{\pgfmathparse{#1}\pgfmathresult pt}

\begin{document}
% Fails:
%\hspace{\pgflength{1cm+2cm}}

% Error message:
% ! Missing number, treated as zero.
% <to be read again> 
%                  \begingroup 
% l.14     \hspace{\pgflength{1cm+2cm}}

% Works:
\pgfmathparse{1cm+2cm}
\hspace{\pgfmathresult pt}

% Curiously this also fails:
%\edef\mylength{\pgflength{1cm+2cm}}

% Error message:
% ! Incomplete \iffalse; all text was ignored after line 24.
% <inserted text> 
%                 \fi 

\end{document}

답변1

\pgfmath확장할 수 없으므로 결과를 제공하기 위해 '알려진' 출력 매크로와 함께 사용해야 합니다(확장 가능한 코드에 대한 자세한 내용은 예를 참조하세요).매크로를 확장 가능하게 만드는 요령그리고왜 모든 것이 확장 가능하지 않습니까?). 그만큼LaTeX3 FPU확장 가능하므로 다음을 수행할 수 있습니다.

\documentclass{article}

\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\fpmath}[1]{\fp_eval:n{#1}}
\newcommand{\fptrunc}[1]{\fp_to_int:n{#1}}
\newcommand{\fplength}[1]{\fp_eval:n{#1}~pt~}
\ExplSyntaxOff

\begin{document}
\hspace{\fplength{1cm+2cm}}

\edef\mylength{\fplength{1cm+2cm}}

\end{document}

LaTeX3 FPU는 현재 코드와 동일한 적용 범위를 갖지 않으며 pgfmath일부 기능은 확장 가능한 방식으로 불가능합니다(예: 상자에 조판된 재료 측정). 확장 가능한 FPU는 또한 많은 경우 비확장 코드보다 느립니다(여기서는 정밀도는 더 높지만 계산에는 약 두 배의 길이가 필요합니다).

관련 정보