为了创建类似日记的内容,我使用了 2 个目录中的多个输入文件,一个名为 01-12 的 MONTH 目录和每个月内的 day 目录...01-31
所以
12/(十二月)有一个文件 12.tex,它输入 12/01/01.tex(还有一个 12/02/02.tex 等等...当天的 tex 文件调用了当天目录中的一堆其他文件)
这个想法是打印currfile
出月份目录名称和日期目录名称,然后使用它来自动创建页眉和章节标题。我只需要输入年份,它就会在正确的页面上显示正确的星期几和日期。
我开始在这里探索这个问题:在日记的回忆录章节中使用宏但稍微改变了我的方法并使用了这个答案来回答我的最后一个问题:
https://tex.stackexchange.com/a/220450/26651
我以为我已经找到解决方案了......
我尝试过这个:
\DeclareRobustCommand{\dateforheader}{\formatdate{\StrBehind{\currfiledir}{/}[\currfilesubdir]\StrBefore{\currlastdir}{/}}{\StrBefore{\parentfiledir}{/}}{2015}}
我尝试过这个
\DeclareRobustCommand{\MyDay}{{\StrBehind{\currfiledir}{/}[\currfilesubdir]\StrBefore{\currlastdir}{/}}
\DeclareRobustCommand{\MyMonth}{\StrBefore{\parentfiledir}{/}}
\formatdate{\MyDay}{\MyMonth}{2015}
希望在页眉中使用它们
\makeoddhead{mypagestyle}{}{\dateforheader}{\thepage}
这不管用。
仅使用 12/01/01.tex 页面上的宏也不起作用:
\dateforheader
尽管
\MyDay
\MyMonth
会自行工作
我的错误信息:
./12/1/1.tex:4: Missing number, treated as zero. [{\dateforheader]
./12/1/1.tex:4: Undefined control sequence. [{\dateforheader]
./12/1/1.tex:4: Missing number, treated as zero. [{\dateforheader]
./12/1/1.tex:4: Missing number, treated as zero. [{\dateforheader]
./12/1/1.tex:4: Undefined control sequence. [{\dateforheader]
./12/1/1.tex:4: Missing number, treated as zero. [{\dateforheader]
./12/1/1.tex:4: Package datetime Error: Invalid Month number 0. [{\dateforheader]
更新:
使用下面的@karlkoeller 答案我创建了一个 MWE,但它似乎对我来说不起作用,所以我想我会使用下面的 MWE 测试单个宏:
使用以下代码设置里面的主目录是 test.tex:
\documentclass{memoir}
\usepackage{xstring}
\usepackage{datetime}
\usepackage{currfile}
\usepackage{import}
\StrBehind{\currfiledir}{/}[\currfilesubdir]
\StrBefore{\currfilesubdir}{/}[\MyDay]
\StrBefore{\currfiledir}{/}[\MyMonth]
\newcommand{\mydate}{\MyDay, \MyMonth}
\begin{document}
\input{8/8.tex}
\end{document}
在主目录中有一个名为 8 的目录
一个名为 8.tex 的 tex 文件,其中包含以下代码:
\input{8/1/1.tex}
另外,目录 8 中的目录 1 包含 1.tex 文件,其中包含下面的代码......我认为这可以测试宏:
currfiledir:\currfiledir
part 1 of My Day: \StrBehind{\currfiledir}{/}
part 2 of My Day: \StrBefore{\currfilesubdir}{/}
MyMonth: \StrBefore{\currfiledir}{/}
date: \mydate
结果如下:
currfiledir: 8/1/
我的一天第 1 部分:1/
我的一天 第二部分:
我的月份:8
日期: ,
知道这里有什么问题吗?
答案1
您必须将字符串操作的结果保存在宏中,以便它们可以用作的参数\formatdate
。
因此,将您的代码替换为
\StrBehind{\currfiledir}{/}[\currfilesubdir]
\StrBefore{\currfilesubdir}{/}[\MyDay]
\StrBefore{\currfiledir}{/}[\MyMonth]
上面的几行必须放在每个文件的开头<day>.tex
。
此时\MyDay
包含日期数字和\MyMonth
月份数字,您可以定义
\DeclareRobustCommand{\dateforheader}{\formatdate{\MyDay}{\MyMonth}{2015}}
它必须放在你的主文件中。
梅威瑟:
\documentclass{memoir}
\usepackage{xstring}
\usepackage{datetime}
%\usepackage{currfile} % uncomment this line in your mainfile.tex
\newcommand{\currfiledir}{12/01/} % comment this line in your mainfile.tex
\usepackage{lipsum} % Just for the example
\StrBehind{\currfiledir}{/}[\currfilesubdir] % to be put in each <day>.tex
\StrBefore{\currfilesubdir}{/}[\MyDay] % to be put in each <day>.tex
\StrBefore{\currfiledir}{/}[\MyMonth] % to be put in each <day>.tex
\DeclareRobustCommand{\dateforheader}{\formatdate{\MyDay}{\MyMonth}{2015}} % to be put in your mainfile.tex
\makeoddhead{headings}{}{\dateforheader}{\thepage} % to be put in your mainfile.tex (change headings to mypagestyle)
\begin{document}
\lipsum[1]
\end{document}
输出: