有人能解释为什么这两个条目的输出不同吗?有人知道如何使第二个与第一个匹配吗?
\documentclass{article}
\include{fp}
\newcommand\entryOne[1]{
\ifnum #1 = 100 #1 \fi
}
\newcommand\entryTwo[1]{
\FPeval{\result}{#1}
\ifnum \result = 100 \result \fi
}
\begin{document}
\begin{table}
\centering
\begin{tabular}{|l|c|}
\hline
Entry 1 & \entryOne{100} \\
Entry 2 & \entryTwo{100} \\
\hline
\end{tabular}
\end{table}
\end{document}
提前致谢。
答案1
TeX 不是“自由形式”,空格很重要:请记住它是一个排版程序。
您的命令中有几个空格:
\newcommand\entryOne[1]{
\ifnum #1 = 100 #1 \fi
}
括号后的行尾算作空格;第二个#1
括号后的空格也算。在表格单元格中,这两者都会被删除,但这并不是在定义中包含它们的好理由。固定定义:
\newcommand\entryOne[1]{%
\ifnum #1 = 100 #1\fi
}
请注意,第一个空格后的空格#1
将被语法规则忽略,例如 后的空格100
。
第二个定义:
\newcommand\entryTwo[1]{
\FPeval{\result}{#1}
\ifnum \result = 100 \result \fi
}
后面有一个空格{
,第二行末尾也有一个空格。这个空格没有被删除,因为它不在单元格的开头,导致单元格包含<space>100
,这解释了错位。
固定定义:
\newcommand\entryTwo[1]{%
\FPeval{\result}{#1}%
\ifnum \result = 100 \result \fi
}
请注意,读取过程中会忽略控制序列后的空格。
最后的评论:\include{fp}
是错误的,应该是\usepackage{fp}
;我使用的缩进使替换文本的开始和结束位置更清晰。
\documentclass{article}
\usepackage{fp}
\newcommand\entryOne[1]{%
\ifnum #1 = 100 #1\fi
}
\newcommand\entryTwo[1]{%
\FPeval{\result}{#1}%
\ifnum \result = 100 \result \fi
}
\begin{document}
\begin{table}
\centering
\begin{tabular}{|l|c|}
\hline
Entry 1 & \entryOne{100} \\
Entry 2 & \entryTwo{100} \\
\hline
\end{tabular}
\end{table}
\end{document}