我正在写论文,我想制作一个包含世纪、年份、月份、日期、事件和历史时期的索引。所以我尝试创建一些命令,但不令人满意,我正在寻求您的帮助。
什么是困难?
- 我有数字数据和名称(停战协定、1857 年 1 月 15 日、1455 年、19 世纪)
- 我有一些创作时期(1801-1812,从 11 世纪到 13 世纪)
- 我需要缩进我的索引(
event!day!month!year!centuries
) - 有时我只有世纪或一年
- 我想对公元前的所有日期和世纪进行分类(-200;-3;23;190;1850;2014)
- 我不知道是否要发出一个或多个命令
我尝试过:
第一步,只针对好的世纪发出一个命令,其中的 a*
表示公元前世纪(对于负面世纪的分类,我使用分数):
% !TEX encoding = UTF-8 Unicode
\documentclass{scrbook}
\usepackage[english,frenchb]{babel}
\usepackage[quiet]{fontspec}
\usepackage[automark]{scrpage2}
\usepackage[babel,french=guillemets*]{csquotes}
\usepackage{index}
\usepackage{ifthen}
\usepackage{ifmtarg}
\usepackage{fp}
\setmainfont{Adobe Garamond Pro}
\addtokomafont{disposition}{\normalfont}
\makeindex
\newindex{can}{cax}{cad}{Index des périodes} % makeindex period.cax -o period.cad
\makeatletter\newcommand*{\sivide}{\@ifmtarg}\makeatother
\makeatletter\newcommand*{\sistar}{\@ifstar}\makeatother
\newcommand*{\siglo}{\sistar\siglom\siglop}
\newcommand\siglop[1]%
{\ifthenelse{#1 = 1}%
{#1\up{er}~siècle de notre ère\index[can]{#1@#1\up{er}~siècle de notre ère}}%
{#1\up{ème}~siècle\index[can]{#1@#1\up{ème}~siècle}}}%
\newcommand\siglom[1]%
{\ifthenelse{#1 = 1}%
{#1\up{er}~siècle avant notre ère\index[can]{0,6@1\up{er}~siècle avant notre ère}}%
{#1\up{ème}~siècle avant notre ère\index[can]{\FPeval{\fraction}{1/#1}\fraction @#1\up{ème}~siècle avant notre ère}}}
\begin{document}
\siglo*{12} … \siglo*{1} … \siglo{14} … \siglo{1}
\printindex[can]
\end{document}
另一个命令(取代第一个命令)已经有几个世纪和几年了,但我的索引失败了:
\newcommand*{\lan}{\sistar\lans\lano}
\newcommand\lano[2]%
{\sivide{#2}%
{{\ifthenelse{#1 = 1}%
{#1\up{er}~siècle de notre ère\index[can]{#1@#1\up{er}~siècle de notre ère}}%
{#1\up{ème}~siècle\index[can]{#1@#1\up{ème}~siècle}}}}%
{\sivide{#1}%
{#2 de notre ère\index[can]{1\up{er}~siècle de notre ère!#2@#2}}%
{#1#2\index[can]{\FPeval{\fraction}{#1+1}\fraction \up{ème}~siècle!#2@#1#2}}}}
\newcommand\lans[2]%
{\sivide{#2}%
{{\ifthenelse{#1 = 1}%
{#1\up{er}~siècle avant notre ère\index[can]{0,6@1\up{er}~siècle avant notre ère}}%
{#1\up{ème}~siècle avant notre ère\index[can]{\FPeval{\fraction}{1/#1}\fraction @#1\up{ème}~siècle avant notre ère}}}}
{\sivide{#1}%
{-#2\index[can]{1\up{er}~siècle avant notre ère!\FPeval{\fraction}{1/#2}\fraction @-#2}}%
{-#1#2\index[can]{\FPeval{\fraction}{#1+1}\fraction \up{ème}~siècle avant notre ère !\FPeval{\fraction}{1/#2}\fraction @-#1#2}}}}
并在文本中
\lan*{12}{} … \lan*{1}{} … \lan{14}{} … \lan{1}{} …
\lan*{11}{16} … \lan*{}{18} … \lan{}{20} … \lan{19}{90} …
所以之后我就卡住了!谢谢你的帮助
答案1
经过几个小时的业余努力,我发布了我所命名的命令,\qd
例如法语单词“quand”(意思是“何时”)。这是完整的形式:\qd*[]{}{}{}{}{}{}
。我向您解释用法:
- 我输入
*
的是负面日期,没有输入正面日期 - 第一个参数
[#1]
是具有不同用法的文本参数。看看完整代码以便更好地理解。例如,如果我想写一个事件,[french Revolution]
它就是我要写的地方。如果我只想写一个日期,我建议有 7 个选项:[]
日期的单一形式为空[l]
使用长格式[c]
缩写形式(法语为 forme courte)[t]
非常简短的形式(forme très courte)[j]
自 1901 年起,星期几名称 (jour) 的单一形式[jc]
以星期几名称缩写的形式 (jour court)[jt]
带有星期几名称的极短形式(jour très court)
- 其他 6 个参数代表日期元素:
{#2}
千年(0 至 ∞){#3}
世纪(0 至 9){#4}
十进制(0 至 9){#5}
年份(0 至 9){#6}
月(1 至 12){#7}
天(1 至 31)
看,这里有一些例子:
Le \qd*[Néolithique]{10}{}{}{}{}{} commence au \qd*[]{10}{}{}{}{}{}, \\
Des \qd*[hiéroglyphes]{3}{2}{}{}{}{} à l'\qd*[alphabet phénicien]{1}{1}{}{}{}{} \\
Les \qd*[c]{1}{0}{}{}{}{}, \qd*[c]{1}{1}{}{}{}{}, \\
En \qd*[l]{0}{9}{8}{3}{}{} & dans les \qd*[]{2}{0}{0}{}{}{}, \\
En \qd*[]{0}{3}{3}{2}{}{}-\qd*[c]{0}{3}{3}{1}{}{}, Alexandre devient pharaon, \\
Le \qd*[l]{0}{0}{4}{4}{3}{15}, on entendit un \qd*[\emph{tu quoque}]{0}{0}{4}{4}{3}{15}, \\
Le \qd*[c]{0}{0}{0}{1}{12}{25}, Marie cria, \\
\qd[l]{0}{0}{0}{9}{1}{1}, \\
Les \qd[c]{1}{0}{}{}{}{} & \qd[c]{1}{1}{}{}{}{}, \\
L'\qd[hégire]{0}{6}{2}{2}{7}{16}, \\
Le \qd[]{1}{7}{8}{9}{7}{14} changea la destinée de la France, \\
Du \qd[jc]{1}{9}{9}{9}{12}{31} au \qd[j]{2}{0}{0}{0}{1}{1}, \\
Du \qd[jt]{1}{9}{8}{4}{1}{1} au \qd[j]{1}{9}{8}{4}{1}{2}, jour de \qd[naissance]{1}{9}{8}{4}{1}{2}.
以下是正文:
& 索引:
我遇到了一些困难,这里总结了一下并给出了解决方案:
- 对于不知道负数的索引中的负数日期进行排名,我在命令中使用了一些分数,例如
1/((#2)+1)
,从而对索引中的千年进行排名是好的:-3(= 1/4),-2(= 1/3),-1(= 1/2),1,2,3 ......, \qd[]{1}{8}{}{}{}{}
对于索引中链接的18 世纪与 1789 年之间的差异\qd[]{1}{7}{8}{9}{}{}
,我使用了一些补充(看看完整代码)- 我区分了第一个(千年、世纪、十年或年份)和其他年份,例如
\ifthenelse{\equal{#2}{0}}{…}{…}
,因为 2000 年是在第二个千年,即 20 世纪,但在 2000 年的十年里……(看看完整代码;) - 我现在正在使用 arara 和一些软件包,例如
datetime
,fp
anwkably,glossaries
&imakeidx
,对我来说是big evolution。
所以,我给她下了命令& 完整代码,因为这里看起来太长了。我在编译中看到一些错误,但是,它在文档中看起来很完美。如果有人想简化这个繁重的命令,我会听取你的建议。谢谢你的帮助。再见