addtocounter 副作用

addtocounter 副作用

我正在尝试定义以下宏:

\newcounter{cp}
\setcounter{cp}{1}

\newcommand{\phase}[3]{
    \multicolumn{#2}{|l|}{\makecell[l]{Phase \thecp{} - #3 JEH \\ \footnotesize{#1}}}
    \addtocounter{cp}{1}
}

这个想法是它应该在表格块中使用:

\begin{tabularx}{\linewidth}{|*{10}{X|}}\hline

   [...]

   \phase{Etude de faisabilité}{6}{3}
\end{tabularx}

我的问题是

\addtocounter{cp}{1}

命令,一切正常: 在此处输入图片描述

但如果我把这一行加回来,它会移动右边的分隔条: 在此处输入图片描述

你能帮助我理解为什么会这样吗,以及如何避免这种情况?

多谢

编辑:这是完整的代码:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[dvipsnames,table]{xcolor}
\usepackage[french]{babel}
\usepackage[protrusion=true,expansion=true]{microtype}  
\usepackage{fourier}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{graphicx}   
\usepackage{url}
\usepackage{float}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{calc}
\usepackage{geometry}
\usepackage{colortbl}
\usepackage{array}
\usepackage{makecell}
\usepackage{lastpage}
\usepackage{adjustbox}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{lipsum}
\usepackage{sectsty}
\usepackage{fp}
\usepackage{fancyhdr}
\usepackage{totcount}
\usepackage{forloop}
\usepackage{ifthen}

\usepackage[sfdefault,light]{FiraSans} %% option 'sfdefault' activates Fira Sans as the default text font
\usepackage[T1]{fontenc}
\renewcommand*\oldstylenums[1]{{\firaoldstyle #1}}
\definecolor{tableGray}{RGB}{220, 180, 180}

\begin{document}

\newcounter{cp} %compteur pour la numérotation des phases
\setcounter{cp}{1}

\newcommand{\phase}[3]{
    \multicolumn{#2}{|l|}{\makecell[l]{Phase \thecp{} - #3 JEH \\ footnotesize{#1}}}
    \addtocounter{cp}{1}
}

\noindent
\begin{tabularx}{\linewidth}{|*{10}{X|}}\hline

    \rowcolor{tableGray}
    \multicolumn{10}{|c|}{Semaines} \\\hline

    \rowcolor{tableGray}
    \newcounter{c}
    \forloop{c}{1}{\value{c} < 10}%
    {%
      \thec &
    }
    \thec \\\hline

    \phase{Etude de faisabilité}{6}{3}

\end{tabularx}

\end{document}

答案1

与原始版本相比,我将其放在\newcounter{c}了前言部分(在文档部分内,但在tabularx环境之外也应该可以工作),以消除“命令 \c@c 已定义。”错误消息。此外,我将其替换\addtocounter{cp}{1}\stepcounter{cp}并将此命令放在命令内部\multicolumn而不是命令之后。

在此处输入图片描述

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[dvipsnames,table]{xcolor}
\usepackage[french]{babel}
\usepackage[protrusion=true,expansion=true]{microtype}  
\usepackage{fourier}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage{graphicx}   
\usepackage{url}
\usepackage{float}
\usepackage{longtable}
\usepackage{tabularx}
\usepackage{calc}
\usepackage{geometry}
\usepackage{colortbl}
\usepackage{array}
\usepackage{makecell}
\usepackage{lastpage}
\usepackage{adjustbox}
\usepackage{multicol}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{lipsum}
\usepackage{sectsty}
\usepackage{fp}
\usepackage{fancyhdr}
\usepackage{totcount}
\usepackage{forloop}
\usepackage{ifthen}

\usepackage[sfdefault,light]{FiraSans} %% option 'sfdefault' activates Fira Sans as the default text font
\usepackage[T1]{fontenc}
\renewcommand*\oldstylenums[1]{{\firaoldstyle #1}}
\definecolor{tableGray}{RGB}{220, 180, 180}

\begin{document}

\newcounter{cp} %compteur pour la numérotation des phases
\setcounter{cp}{1}

\newcounter{c}
\newcommand{\phase}[3]{%
    \multicolumn{#2}{|l|}{\makecell[l]{Phase \thecp{} - #3 JEH \\ \footnotesize{#1}}\stepcounter{cp}}% 
}

\noindent
\begin{tabularx}{\linewidth}{|*{10}{X|}}\hline

    \rowcolor{tableGray}
    \multicolumn{10}{|c|}{Semaines} \\\hline

    \rowcolor{tableGray}
    
    \forloop{c}{1}{\value{c} < 10}%
    {%
      \thec &
    }
    \thec \\\hline

    \phase{Etude de faisabilité}{6}{3}

\end{tabularx}

\end{document}

相关内容