11

As I understand it, a counter is supposed to increment automatically. However, when I try to use one all I get is zeros. Here is a MWE.

\documentclass[12pt]{article}
\usepackage{lipsum}
\newcounter{mcounter}


\begin{document}
\themcounter \lipsum[1]

\themcounter \lipsum[2]

\themcounter \lipsum[3]
\end{document}

Printed lipsum text with zeros preceding each paragraph.

Truthfully, I'm trying to create a counter for pages in the middle of a list of teaching plans. The list looks something like "Day 1: Worksheets #1, #2, and Notes. Day 2: Worksheets #3, Notes, and Worksheet #4". If I add a worksheet (or take one away) I don't want to renumber everything in the list for that day and any subsequent days.

Any suggestion as to what I'm doing wrong? I'm using LauLaTeX on Texmaker on a Win 10 PC.

Michael
  • 464
  • 6
    To increase a counter by a value of 1 you can use \stepcounter (or \refstepcounter if you want to use the \label \ref mechanism) – leandriis Aug 10 '19 at 13:36
  • Could you please add some more information on wha exactly you want to achieve with your counter? Your example document looks like it could easily be recreated with an enumerate environment instead of using a self defined counter. – leandriis Aug 10 '19 at 13:37
  • Added, just below the MWE. – Michael Aug 10 '19 at 13:45
  • 1
    a counter is supposed to increment automatically; only if requested to. Your MWE only created a new counter, which starts in 0, but no commands increasing it anywhere. – Sigur Aug 10 '19 at 13:49
  • Thank you @Sigur, but I feel like that is an answer which only tells me what I'm doing incorrectly if I already know what I'm doing and I've just forgotten. In this situation I'm new to this function and I'm not sure how to incorporate your response to resolve my problem. Could you flush it out by saying "add \somethingmagical{thecounter} in from of all your lipsum calls?" or something similar? – Michael Aug 10 '19 at 13:59
  • 2
    \stepcounter{mcounter} for a simple increment by 1 unit. \refstepcounter{mcounter} if you want the next \label{name-of-label} command to use this counter value (i.e., store it in the .aux file associated to the label name-of-label so that it can be retrieved with \ref{name-of-label}, and the corresponding page number with \pageref{name-of-label}). – frougon Aug 10 '19 at 14:06
  • Thanks @frougon. So I guess you are saying that I should replace the first line after begining the document with "\stepcounter{mcounter}\themcounter \lipsum[1]" (and each other, respectively). It works, but I feel like there should be a shorter, more concise way to do this so that my code doesn't balloon so quickly. Am I mistaken? – Michael Aug 10 '19 at 14:13
  • \newcommand{\nextvalue}[1]{\refstepcounter{#1}\csname the#1\endcsname} Then every call of \nextvalue{mcounter} will print the next value... If you dont want it with an argument ... just \newcommand{\nextvalue}{\refstepcounter{mcounter}\themcounter} would be enough. – koleygr Aug 10 '19 at 14:25

1 Answers1

21

You wrote,

As I understand it, a counter is supposed to increment automatically.

That's not correct. If you create a counter but never do anything to or with it except display its value (say, via \themcounter), the counter's value will remain at its initial value (generally, 0) throughout the document.

In LaTeX, a counter's value can be modified with the commands \setcounter, \addtocounter, \stepcounter, and \refstepcounter. \setcounter and \addtocounter take two arguments: the name of the counter and a whole number. \stepcounter and \refstepcounter increment the counter's value by 1, and they take just one argument -- the name of the counter whose value is to be incremented.

If you want to create a LaTeX macro which (a) increments the counter named mycounter by 1 and (b) displays the newly-incremented value of mycounter, you can do so in several ways. E.g., after creating the counter with

\newcounter{mycounter}

you could use one of the following three definitions of \showmycounter:

\newcommand\showmycounter{\addtocounter{mycounter}{1}\themycounter}
\newcommand\showmycounter{\stepcounter{mycounter}\themycounter}
\newcommand\showmycounter{\refstepcounter{mycounter}\themycounter}

By default, the directives \themycounter and \arabic{mycounter} produce the same output, i.e., arabic numerals are used by default to show the value of a counter. If you wanted to show the counter's value as, say, an uppercase-Roman numeral, you'd either have to redefine \themycounter (via \renewcommand\themycounter{\Roman{mycounter}}) or change the above \newcommand instructions, e.g.,

\newcommand\showmycounter{\stepcounter{mycounter}\Roman{mycounter}}

The value of a counter can be any whole number, including 0 and negative whole numbers. Unsurprisingly, if the value of mycounter is non-positive, an attempt to represent its value as an alphabetic character or as a Roman numeral will generate an error message.


An MWE (minimum working example) that builds on these ideas:

enter image description here

\documentclass{article}
\newcounter{mycounter} % create a new counter, called 'mycounter'
% default def'n of '\themycounter' is '\arabic{mycounter}'

%% command to increment 'mycounter' by 1 and to display its value: \newcommand\showmycounter{\stepcounter{mycounter}\themycounter}

\usepackage{lipsum} \newcommand\showlips{\stepcounter{mycounter}\lipsum[\value{mycounter}]}

\begin{document} \showmycounter, \showmycounter, \showmycounter

\showlips

% verifying that the preceding command used '4': \lipsum[4] \end{document}

Mico
  • 506,678