软件包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
\deflength
etoolbox
\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}