我正在寫論文,我想在很多地方插入一些過去事件的月份和年份!怎麼做?誰能建議我一個最簡單的方法來做到這一點?我是 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}