我有一个非常简单的文档,其中我声明了一个计数器并为每个列表项添加粗体文本,如下所示:
\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
并删除了epsfig
和epstopdf
。
答案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{...}
。