如何排版条件来显示上个月?

如何排版条件来显示上个月?

我之前问过一个问题,已经得到答案这里,它完全按照我提出的问题回答了我的问题。

\chead{\ifnum\day < 15
  Mid-%
  \else
  End-%
  \fi%
  \monthname[\the\month]%
}

但是,这并不是真正需要的。我需要它做的是,如果是该月的前 15 天(即今天仍是 8 月底),则给出上个月的名称;如果大于 15,则给出当前月份。

已尝试创建一个新命令\prevmonth但无法使其工作。

\newcommand{\prevmonth}{\if\month=September%
August%
\fi%
}  

任何帮助,将不胜感激!

答案1

不确定“Mid-”等词语的修改,但对于所提问题,Christian 的回答的这种变体可能有效:

\documentclass{article}

\usepackage{fancyhdr}
\usepackage[english]{babel}
\usepackage{datetime}
\usepackage{blindtext}

\pagestyle{fancy}
\fancyhf{}

\chead{\ifnum\day < 15
  End-%
  \prevmonthname[\the\month]%
  \else
  End-%
  \monthname[\the\month]%
  \fi%
}
\def\prevmonthname[#1]{\ifcase#1%
  \or December\or January\or February\or March\or April\or May%
  \or June \or July \or August\or September\or October\or November\fi}


\begin{document}
\blindtext[5]
\clearpage
\day=10
\month=5
\blindtext[5]


\end{document}

这是采纳了 Manuel 建议的版本,但纠正了“January”的问题。通过这种方式,人们不会被困在英语中。

\documentclass{article}

\usepackage{fancyhdr}
\usepackage[english]{babel}
\usepackage{datetime}
\usepackage{blindtext}

\pagestyle{fancy}
\fancyhf{}

\chead{\ifnum\day < 15
  End-%
  \prevmonthname[\the\month]%
  \else
  End-%
  \monthname[\the\month]%
  \fi%
}
\def\prevmonthname[#1]{%
  \ifnum#1=1\relax\prevmonthnamehelp[13]\else\prevmonthnamehelp[#1]\fi}
\def\prevmonthnamehelp[#1]{\monthname[\the\numexpr#1-1\relax]}

\begin{document}
\blindtext[5]
\clearpage
\day=10
\month=5
\blindtext[5]

\end{document}

答案2

假设,这End -应该始终是前缀 ... 并且如果月份是 1 月且天数 < 15,则环绕。

\documentclass{article}

\usepackage{fancyhdr}
\usepackage[english]{babel}
\usepackage{datetime}
\usepackage{blindtext}

\newcounter{auxmonth}
\pagestyle{fancy}
\fancyhf{}

\chead{%
  \setcounter{auxmonth}{\month}%
  End - %
  \ifnum\day < 15\relax
  \ifnum\month = 1\relax
  \setcounter{auxmonth}{12}% Wrap around
  \else
  \addtocounter{auxmonth}{-1}% Really decrease the help-counter
  \fi
  \fi
  \monthname[\theauxmonth]%
}


\begin{document}
\blindtext[5]
\clearpage

\day=10
\month=1
\blindtext[5]


\clearpage

\day=20
\month=1
\blindtext[5]


\end{document}

答案3

如果您愿意切换到datetime2,则可以计算日期。 可能有点过头了,但它不会对 January/Desember 产生任何问题,并且它可以与该包支持的任何语言一起使用。

该解决方案基于alwaysask 的答案已给出将(n)天添加到变量 date 中

输出

在此处输入图片描述

代码

\documentclass{article}

\usepackage{fancyhdr}
\usepackage[english]{babel}
\usepackage[calc]{datetime2}
\usepackage{lipsum}

\pagestyle{fancy}
\fancyhf{}

\chead{End of\monthEnd{ourDate}
}


\newcount\daycount
\newcommand{\monthEnd}[1]{%
  \DTMsaveddateoffsettojulianday{#1}{-15}\daycount
  \DTMsavejulianday{newDate}{\number\daycount}
  \DTMmonthname{\DTMfetchmonth{newDate}}
}
\DTMsavedate{ourDate}{2016-07-14}
\begin{document}
\lipsum[1-5]
\clearpage
\DTMsavedate{ourDate}{2016-07-16}
\lipsum[1-5]



\end{document}

答案4

将此视为社区 wiki,因为这里的想法大多来自其他解决方案。Ste​​ven 创建了一个\premonthname宏,Christian 使用特殊计数器auxmonth。在我看来,这两者都没有必要:

\documentclass{article}

\newcommand\MonthName[1]{%
  \ifcase#1\or January\or February\or March\or April\or May\or June
    \or July\or August\or September\or October\or November\or December%
  \fi%
}
\newcommand\MyMonth{%
  \the\day\space\MonthName\month $\longrightarrow$ % if illistration nly
  \ifnum\day<15%
    \ifnum\month=1 December
    \else\MonthName{\numexpr\the\month-1}
    \fi%
  \else\MonthName\month\fi\newline%
}

\begin{document}\noindent
  \day=3 \month=1   \MyMonth
  \day=15 \month=1  \MyMonth
  \day=3 \month=8   \MyMonth
  \day=15 \month=8  \MyMonth
  \day=3 \month=12  \MyMonth
  \day=15 \month=12 \MyMonth
\end{document}

相关内容