了解 etoolbox 宏 \deflength

了解 etoolbox 宏 \deflength

软件包etoolbox文档说明了\deflength

此命令可用作 的直接替代品\setlength

我无法让它与包\minof中的宏一起工作calc。以下 MWE 给了我一个

"missing number, treated as zero" 

错误。

\documentclass{article}
\usepackage{calc}
\usepackage{etoolbox}
\newlength{\foo}
\begin{document}
\deflength{\foo}{\minof{1in}{2in}}
\setlength{\foo}{\minof{1in}{2in}}
\end{document}

答案1

该包对 以及等calc进行了大量重新定义。它不适用于加法等或。这是一个可以使用 的包装器,因为它使用了宏。\setlength\stepcounter\deflength\minof\deflengthetoolbox\ifdimgreater

\ifdimgreater并且\ifdimless是的包装纸\ifdimcomp

两个宏都以这种方式工作\ifdim...{first dim}{second dim}{true code}{false code}

请注意,\deflength{}可以在其参数中对长度进行加减运算。

\documentclass{article}
\usepackage{etoolbox}
%\usepackage{calc}

\newcommand{\etminof}[2]{%
  \ifdimgreater{#1}{#2}{%
    #2%
  }{%
    #1% Is smaller or equal
  }%
}


\newcommand{\etmaxof}[2]{%
  \ifdimgreater{#1}{#2}{%
    #1%
  }{%
    #2% Is greater or equal
  }%
}


\newlength{\foo}

\newlength{\foobar}

\begin{document}


\deflength{\foo}{\etminof{1in}{2in}}

\deflength{\foobar}{\etmaxof{5in}{10in}}

% Outputting the whole stuff
\the\foo

\the\foobar

\end{document}

在此处输入图片描述

以下是一些\ifdim版本expl3

\documentclass{article}
\usepackage{etoolbox}

\usepackage{expl3}

\newcommand{\etminof}[2]{%
  \ifdimgreater{#1}{#2}{%
    #2%
  }{%
    #1% Is smaller or equal
  }%
}


\newcommand{\etmaxof}[2]{%
  \ifdimgreater{#1}{#2}{%
    #1%
  }{%
    #2% Is greater or equal
  }%
}

\newcommand{\texminof}[2]{%
  \ifdim#1<#2
  #1%
  \else
  #2%
  \fi
}

\ExplSyntaxOn
\newcommand{\explminof}[2]{%
  \dim_min:nn {#1} {#2}
% or
%  \dim_compare:nNnTF {#1} < {#2}
%  {#1} % True 
%  {#2} % False
}
\ExplSyntaxOff


\newlength{\foo}

\begin{document}

\texttt{etoolbox}
\deflength{\foo}{\etminof{5in}{10in}}

\the\foo

Now \LaTeXe

\deflength{\foo}{\texminof{5in}{10in}}

\the\foo



Now \texttt{expl3}

\deflength{\foo}{\explminof{5in}{10in}}


\the\foo



\end{document}

相关内容