newcounter 和 newcommand 的奇怪组合行为

newcounter 和 newcommand 的奇怪组合行为

我有一个非常简单的文档,其中我声明了一个计数器并为每个列表项添加粗体文本,如下所示:

\documentclass[11pt]{article}
\usepackage{vmargin}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{epstopdf}
\usepackage{epsfig}
\usepackage{alltt}
\setpapersize{USletter}
\setmarginsrb{1in}{1.0in}{0.8in}{.8in}{0pt}{0mm}{0.25in}{7mm}
%problems start here
\newcounter{problem}
\newcounter{total}
\newcommand{\question}[1]{\addtocounter{total}{#1}
\addtocounter{problem}{1} \noindent {\bf \theproblem.} ({\bf #1 point})}


\begin{document}

\question{0.5} lost in latex

\question{1.5}  lost in latex

\question{2.5}  lost in latex
\end{document}

现在一切正常,我只使用整数,如 1、2、3 等

良好的输出

但是,如果我使用小数:0.5、1.5 等,LaTeX 会产生一些奇怪的输出:

破损乳胶

对于如何修复该问题的任何建议,我们深表感谢!

答案1

计数器应该是整数,因此当您这样做时\addtocounter{total}{0.5},其余部分.5将被忽略\addtocounter并排版(并且您可能会收到错误)。

您可以使用长度来代替:

\documentclass{article}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{alltt}
\usepackage[letterpaper,left=1in,top=1in,right=.8in,bottom=.8in]{geometry}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0mm}
\setlength{\footskip}{7mm}

\newcounter{problem}
\newlength{\total}
\newcommand{\question}[1]{%
  \addtolength{\total}{#1 pt}%
  \addtocounter{problem}{1}\noindent {\bfseries \theproblem.} ({\bfseries #1 point})}
\makeatletter
\newcommand{\printtotal}{{\bfseries Total: \strip@pt\total}}
\makeatother

\begin{document}

\question{0.5} Getting along with \LaTeX

\question{1.5} Getting along with \LaTeX

\question{2.5} Getting along with \LaTeX

\printtotal

\end{document}

在此处输入图片描述

我还vmargin用替换了geometry并删除了epsfigepstopdf

答案2

这是部分expl3解决方案。我没有更改原始代码中可以正常工作的部分(除非已过时)。这意味着语法是 2e 和 3 的混合,但我希望这能更清楚地说明跟踪总数的工作。

\documentclass[11pt]{article}
\usepackage{expl3}
\newcounter{problem}
\ExplSyntaxOn
\fp_new:N \l_califlower_total_fp
\fp_set:Nn \l_califlower_total_fp { 0 }
\newcommand{\question}[1]{
  \fp_add:Nn \l_califlower_total_fp { #1 }
  \stepcounter{problem}\noindent\textbf{\theproblem. ~ (#1 ~ point)} ~ Total: ~ \fp_to_decimal:N \l_califlower_total_fp}
\ExplSyntaxOff
\begin{document}

\question{0.5} lost in latex

\question{1.5}  lost in latex

\question{2.5}  lost in latex
\end{document}

保持超过整数的计数

答案3

正如评论所说,LaTeX 计数器只接受整数值。解决这个问题的一种方法是使用\newdim来创建计数器,但使用 打印维度需要一些技巧\strip@pt

以下是完整的 MWE:

\documentclass[11pt]{article}
\usepackage{vmargin}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{epstopdf}
\usepackage{epsfig}
\usepackage{alltt}
\usepackage{pgfmath}
\setpapersize{USletter}
\setmarginsrb{1in}{1.0in}{0.8in}{.8in}{0pt}{0mm}{0.25in}{7mm}
%problems start here
\newcounter{problem}
\newdimen\total
\makeatletter
\newcommand\printtotal{\strip@pt\total}
\makeatother
\newcommand{\question}[1]{
  \total=\dimexpr\total+#1pt\relax%
  \refstepcounter{problem}%
  \noindent \textbf{\theproblem. (#1 point)}%
}

\begin{document}

  \question{0.5} lost in latex

  \question{1.5}  lost in latex

  \question{2.5}  lost in latex

  Total: \printtotal
\end{document}

输出为:

在此处输入图片描述

请注意,我已使用\refstepcounter来增加问题计数器。这样更好,因为您可以随后使用\label{...}\ref{...}命令以及问题编号。正如评论中所建议的,我还使用了\textbf{...}

相关内容