允许值在文档过程中进行调整的命令存在错误

允许值在文档过程中进行调整的命令存在错误

我正在尝试编写一个命令,按顺序执行以下操作:

  1. 测量输入单词的宽度。
  2. 将该值与现有值进行比较。
  3. 如果输入单词的宽度较大,则将该度量作为值。否则,不执行任何操作。

以下代码出了什么问题?

\documentclass{article}
\usepackage{ifthen}
\usepackage{calc}
\usepackage{showframe}

\newlength\shape
\setlength{\shape}{1mm}

\newcommand{\shifter}[1]{\ifthenelse
{\shape<\widthof{#1}}              % If the width of the input word is greater than the length of \shape,
{\setlength{\shape}{\widthof{#1}}} % then make the length of \shape equal to the width of the input word.
{}                                 % Otherwise, do nothing.
}%

\setlength{\parindent}{0pt}

\begin{document}

\hspace{\shape}Hello % Output as expected: `Hello' is indented 1mm from the left margin.

\shifter{Tyrannosaurus}

\hspace{\shape}Hello % Output not as expected. I wanted `Hello' to be indented the width of the word `Tyrannosaurus' from the left margin. Instead, `Hello' is indented 1mm from the left margin.

\end{document}

可能相关:我收到以下错误:

这里应该有一个数字;我插入了“0”。

为什么?

答案1

您既不需要ifthen也不需要calc。只需定义第二个维度进行比较,将其设置为宽度settowidth(非常具有描述性),并使用更强大的条件etoolbox

\documentclass{article}
\usepackage{etoolbox}
\usepackage{showframe}

\newdimen\shape
\setlength{\shape}{1mm}
\newdimen\shapecompare
\newcommand{\shifter}[1]{%
\settowidth\shapecompare{#1}%
\ifdimless{\shape}{\shapecompare}%
{\setlength{\shape}{\shapecompare}}%
{}%
}%

\setlength{\parindent}{0pt}

\begin{document}

\hspace{\shape}Hello

\shifter{Tyrannosaurus}

Tyrannosaurus

\hspace{\shape}Hello 

\end{document}

答案2

您的代码存在一些问题。

第一个问题:如果您想比较\ifthenelse您需要的长度\lengthtest(只有整数之间的比较不需要任何东西)。

第二个问题:\widthof不起作用\lengthtest

修复:使用临时维度寄存器。

\documentclass{article}
\usepackage{ifthen}
\usepackage{showframe}

\newlength\shape
\setlength{\shape}{1mm}

\newcommand{\shifter}[1]{%
  \settowidth{\dimen0}{#1}%
  \ifthenelse{\lengthtest{\shape<\dimen0}}{\setlength{\shape}{\dimen0}}{}%
}

\setlength{\parindent}{0pt}

\begin{document}

\hspace{\shape}Hello

\shifter{Tyrannosaurus}

\hspace{\shape}Hello

Tyrannosaurus % check the space

\end{document}

在此处输入图片描述

实际上你并不需要ifthen

\newcommand{\shifter}[1]{%
  \settowidth{\dimen0}{#1}%
  \ifdim\shape<\dimen0
    \setlength{\shape}{\dimen0}%
  \fi
}

相关内容