我正在写论文,我想在很多地方插入一些过去事件的月份和年份!怎么做?有人能告诉我一个最简单的方法吗?我是 LaTeX 的初学者。也请原谅我的英语不好。
我已将这些事件列在一个文本文件中。例如,超导现象是海克·卡默林·昂内斯 (Heike Kamerlingh Onnes) 于 1991 年 4 月发现的。
我只是期望输出格式如下
1991 年 4 月
答案1
您可以简单地定义一个宏来存储相关数据,例如,您可以用它\newcommand\questionDay{Monday}
来存储您提出这个问题的日期。然后您可以\questionDay
在段落中引用这一天的任何位置使用它。但是,请记住,宏名称后的空格会被忽略,因此如果您希望后面有一个空格,\questionDay
您可以使用它\questionDay{}
。
另一种方法是将数据存储在某个数据结构中并检索该数据结构。下面实现了这样一个数据结构,您可以通过给出宏名称和key=value
存储此宏名称属性的对列表来初始化该数据结构。然后,当您使用该宏时,它将接受一个参数,即先前存储的属性之一,并且它将排版该属性的值。
此示例展示了这两种方法:
\documentclass[]{article}
% basic approach
\newcommand\questionday{9th}
\newcommand\questionDay{Monday}
\newcommand\questionyear{2020}
\newcommand\questionmonth{November}
\usepackage{xparse}
% property list based approach
\ExplSyntaxOn
\msg_new:nnn { Bhargav } { already-defined }
{ #1 ~ `#2' ~ is ~ already ~ defined. }
\msg_new:nnn { Bhargav } { unknown~property }
{ The ~ property ~ `#2' ~ isn't ~ found ~ for ~ `#1'. }
\tl_new:N \l_Bhargav_tmp_tl
\NewDocumentCommand \newevent { m m }
{
\prop_if_exist:cTF { c_Bhargav_event_ \token_to_str:N #1 _prop }
{
\msg_error:nnxx { Bhargav } { already-defined }
{ The ~ property ~ list ~ for } { \token_to_str:N #1 }
}
{
\NewDocumentCommand #1 { m }
{
\group_begin:
\prop_get:cnN
{ c_Bhargav_event_ \token_to_str:N #1 _prop }
{ ##1 }
\l_Bhargav_tmp_tl
\quark_if_no_value:NTF \l_Bhargav_tmp_tl
{
\msg_error:nnxx { Bhargav } { unknown~property }
{ \token_to_str:N #1 } { \exp_not:n {##1} }
}
{ \l_Bhargav_tmp_tl }
\group_end:
}
\prop_const_from_keyval:cn
{ c_Bhargav_event_ \token_to_str:N #1 _prop }
{#2}
}
}
\ExplSyntaxOff
% defining a new property list
\newevent\deathfreddie
{%
year=1991,
month=11,
day=24,
Month=November,
}
\begin{document}
Bhargav Rajyaguru asked a question on \questionDay{} the \questionday{} of
\questionmonth, \questionyear.
It was very sad that Freddie Mercury died on
\deathfreddie{year}-\deathfreddie{month}-\deathfreddie{day}. That was the
saddest \deathfreddie{Month} in \deathfreddie{year}.
\end{document}