模組:Element
![]() | 此模块被引用於約850個頁面。 為了避免造成大規模的影響,所有對此模块的編輯應先於沙盒或測試樣例上測試。 測試後無誤的版本可以一次性地加入此模块中,但是修改前請務必於討論頁發起討論。 模板引用數量會自動更新。 |
Module:Element(编辑 | 讨论 | 历史 | 链接 | 监视 | 日志)
函數說明
symbol
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的元素符號,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|symbol|26}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|symbol|水銀}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|symbol|汞}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|symbol|168}}
→回傳「未輸入元素」
- 例外狀況
- 輸入
{{#invoke:Element|symbol|娜娜奇}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|symbol|-168}}
→回傳「未輸入元素」
- 其他
- 輸入
{{#invoke:Element|symbol|元素}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|symbol|銨}}
→回傳「未輸入元素」
neutron
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素最穩定同位素且豐度最高之同位素的中子數,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|neutron|Oxygen}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|26}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|水銀}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|汞}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|Tc}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|61}}
→回傳「」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|neutron|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|168}}
→回傳「」
protons
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的質子數,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|protons|Oxygen}}
→回傳「」 - 輸入
{{#invoke:Element|protons|26}}
→回傳「」 - 輸入
{{#invoke:Element|protons|水銀}}
→回傳「」 - 輸入
{{#invoke:Element|protons|汞}}
→回傳「」 - 輸入
{{#invoke:Element|protons|Tc}}
→回傳「」 - 輸入
{{#invoke:Element|protons|61}}
→回傳「」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|protons|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|protons|168}}
→回傳「」
protons與neutron
結合protons與neutron可輸出質量數
- 輸入
{{#expr:{{#invoke:Element|protons|1=Oxygen}}+{{#invoke:Element|neutron|1=Oxygen}} }}
→回傳「表达式错误:缺少+的操作数。」 - 輸入
{{#expr:{{#invoke:Element|protons|1=26}}+{{#invoke:Element|neutron|1=26}} }}
→回傳「表达式错误:缺少+的操作数。」 - 輸入
{{#expr:{{#invoke:Element|protons|1=水銀}}+{{#invoke:Element|neutron|1=水銀}} }}
→回傳「表达式错误:缺少+的操作数。」 - 輸入
{{#expr:{{#invoke:Element|protons|1=汞}}+{{#invoke:Element|neutron|1=汞}} }}
→回傳「表达式错误:缺少+的操作数。」 - 輸入
{{#expr:{{#invoke:Element|protons|1=Tc}}+{{#invoke:Element|neutron|1=Tc}} }}
→回傳「表达式错误:缺少+的操作数。」 - 輸入
{{#expr:{{#invoke:Element|protons|1=61}}+{{#invoke:Element|neutron|1=61}} }}
→回傳「表达式错误:缺少+的操作数。」
getAtomicWeight
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的轉換標準原子量,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getAtomicWeight|Oxygen}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|26}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|水銀}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|汞}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|Tc}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|61}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|getAtomicWeight|娜娜奇}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」 - 輸入
{{#invoke:Element|getAtomicWeight|168}}
→回傳「脚本错误:函数“getAtomicWeight”不存在。」
getName
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的元素名稱,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getName|26}}
→回傳「脚本错误:函数“getName”不存在。」 - 輸入
{{#invoke:Element|getName|水銀}}
→回傳「脚本错误:函数“getName”不存在。」 - 輸入
{{#invoke:Element|getName|汞}}
→回傳「脚本错误:函数“getName”不存在。」
- 例外狀況
- 輸入
{{#invoke:Element|getName|娜娜奇}}
→回傳「脚本错误:函数“getName”不存在。」
getPhase
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的相態,值有可能是soild、gas、liquid或unknown四者其中之一,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getPhase|26}}
→回傳「脚本错误:函数“getPhase”不存在。」 - 輸入
{{#invoke:Element|getPhase|水銀}}
→回傳「脚本错误:函数“getPhase”不存在。」 - 輸入
{{#invoke:Element|getPhase|汞}}
→回傳「脚本错误:函数“getPhase”不存在。」 - 輸入
{{#invoke:Element|getPhase|氮}}
→回傳「脚本错误:函数“getPhase”不存在。」 - 輸入
{{#invoke:Element|getPhase|113}}
→回傳「脚本错误:函数“getPhase”不存在。」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|getPhase|娜娜奇}}
→回傳「脚本错误:函数“getPhase”不存在。」 - 輸入
{{#invoke:Element|getPhase|168}}
→回傳「脚本错误:函数“getPhase”不存在。」
wikidataID
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的維基數據項目編號,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|wikidataID|26}}
→回傳「脚本错误:函数“wikidataID”不存在。」 - 輸入
{{#invoke:Element|wikidataID|水銀}}
→回傳「脚本错误:函数“wikidataID”不存在。」 - 輸入
{{Q|{{#invoke:Element|wikidataID|26}}}}
→回傳「[[d:Q脚本错误:函数“wikidataID”不存在。| (Q脚本错误:函数“wikidataID”不存在。)]]」 - 輸入
{{Q|{{#invoke:Element|wikidataID|水銀}}}}
→回傳「[[d:Q脚本错误:函数“wikidataID”不存在。| (Q脚本错误:函数“wikidataID”不存在。)]]」
meltingPoint
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的熔點(單位為絕對溫標),資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|meltingPoint|26}}
→回傳「脚本错误:函数“meltingPoint”不存在。」 - 輸入
{{#invoke:Element|meltingPoint|水銀}}
→回傳「脚本错误:函数“meltingPoint”不存在。」
boilingPoint
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的熔點(單位為絕對溫標),資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|boilingPoint|26}}
→回傳「脚本错误:函数“boilingPoint”不存在。」 - 輸入
{{#invoke:Element|boilingPoint|水銀}}
→回傳「脚本错误:函数“boilingPoint”不存在。」
decaylink
輸入一個與衰變方式相關字串,回傳該衰變方式的內部連結,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|decaylink|γ衰變}}
→回傳「」
ElectronConfiguration
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的電子組態,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|ElectronConfiguration|26}}
→回傳「脚本错误:函数“ElectronConfiguration”不存在。」 - 輸入
{{#invoke:Element|ElectronConfiguration|水銀}}
→回傳「脚本错误:函数“ElectronConfiguration”不存在。」
link
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的條目名稱(用於在導航模板提供直接連結,以使在對應條目顯示為粗體,達到導航效果),注意,使用getName可能會連結到重新導向頁,資料記載於Module:Element/data。
- 輸入
[[{{#invoke:Element|link|26}}]]
→回傳「[[未輸入元素]]」 - 輸入
[[{{#invoke:Element|link|水銀}}]]
→回傳「[[未輸入元素]]」 - 輸入
[[{{#invoke:Element|link|汞}}]]
→回傳「[[未輸入元素]]」 - 輸入
[[{{#invoke:Element|link|氮}}]]
→回傳「[[未輸入元素]]」 - 輸入
[[{{#invoke:Element|link|113}}]]
→回傳「[[未輸入元素]]」
- 例外狀況
- 輸入
{{#invoke:Element|link|娜娜奇}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|link|元素}}
→回傳「未輸入元素」 - 輸入
{{#invoke:Element|link|168}}
→回傳「未輸入元素」
- 使用getName
- 輸入
[[{{#invoke:Element|getName|鉑}}]]
→回傳「[[脚本错误:函数“getName”不存在。]]」 - 輸入
[[{{#invoke:Element|link|鉑}}]]
→回傳「[[未輸入元素]]」
elementlink
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳顯示為該元素符號且指向該元素條目的內部連結,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|elementlink|26}}
→回傳「」 - 輸入
{{#invoke:Element|elementlink|水銀}}
→回傳「」
check
當字串不是有效的元素名稱或「x」時,會顯示以下錯誤信息:
- 輸入
{{#invoke:Element|check|C}}
→會顯示「未輸入元素」(正確無誤) - 輸入
{{#invoke:Element|check|Carbon}}
→會顯示「未輸入元素」(正確無誤) - 輸入
{{#invoke:Element|check|碳}}
→會顯示「未輸入元素」(正確無誤) - 輸入
{{#invoke:Element|check|娜娜奇}}
→會顯示「未輸入元素」 - 輸入
{{#invoke:Element|check|Blablabla}}
→會顯示「未輸入元素」
支持"link=yes"參數。如果元素或符號沒有對應的頁面,則錯誤信息如下:
- 輸入
{{#invoke:Element|check|C | link=yes}}
→會顯示「未輸入元素」 - 輸入
{{#invoke:Element|check|Carbon | link=yes}}
→會顯示「未輸入元素」 - 輸入
{{#invoke:Element|check|碳 | link=yes}}
→會顯示「未輸入元素」(正確無誤) - 輸入
{{#invoke:Element|check|X | link=yes}}
→會顯示「未輸入元素」
如果所輸入的元素名稱不符合英文維基百科的拼寫規則,則會顯示以下錯誤信息:
- 輸入
{{#invoke:Element|check|Aluminum}}
→會顯示「未輸入元素」 - 輸入
{{#invoke:Element|check|Sulphur}}
→會顯示「未輸入元素」 - 輸入
{{#invoke:Element|check|Sulfur}}
→會顯示「未輸入元素」(正確無誤) - 輸入
{{#invoke:Element|check|Cesium}}
→會顯示「未輸入元素」
compare_series
比對兩個輸入是否屬於同一種元素分類。
- 輸入
{{#invoke:Element|compare_series|鹼金屬|鉀}}
→回傳「yes」 - 輸入
{{#invoke:Element|compare_series|鹼金屬|氫}}
→回傳「」 - 輸入
{{#invoke:Element|compare_series|鐵|金屬}}
→回傳「yes」 - 輸入
{{#invoke:Element|compare_series|氯|鉀}}
→回傳「」 - 輸入
{{#invoke:Element|compare_series|氯|氟}}
→回傳「yes」
- 失敗回傳空白
- 輸入
{{#invoke:Element|compare_series|氯|娜娜奇}}
→回傳「」
series
輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素主要的元素分類,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|series|氫}}
→回傳「非金屬」 - 輸入
{{#invoke:Element|series|鋰}}
→回傳「鹼金屬」 - 輸入
{{#invoke:Element|series|硼}}
→回傳「類金屬」 - 輸入
{{#invoke:Element|series|氖}}
→回傳「惰性氣體」 - 輸入
{{#invoke:Element|series|鐵}}
→回傳「過渡金屬」 - 輸入
{{#invoke:Element|series|鑭}}
→回傳「鑭系元素」 - 輸入
{{#invoke:Element|series|銨}}
→回傳「官能基」 - 輸入
{{#invoke:Element|series|116}}
→回傳「未知」 - 輸入
{{#invoke:Element|series|119}}
→回傳「鹼金屬(預測)」 - 輸入
{{#invoke:Element|series|9487}}
→回傳「未知」
相關模板
![]() | 此模块使用Lua语言: |
核素模板是用來顯示核素、同位素和元素符號的,特別是用在化學公式當中。編者可以選擇加上指向對應頁面的鏈接。
以下為不同模板對碳-12的輸出效果,包括有鏈接的和沒有鏈接的:
模板名稱 沒有鏈接 有鏈接 {{Element}}
C
C
{{SimpleNuclide}} 12
C
12
C
{{Nuclide}} 12
6C
12
6C
{{ComplexNuclide}} 12
6C
612
6C
6
參數
所有有關模板都是用同樣的參數。
1 要輸出符號的元素名稱(中文、英文或符號) 2
(可選)該同位素的質量數。
默認值為最常見或最穩定的同位素質量數。3
(可選)表示原子核在激發態時的同核異構體符號(「m」、「m2」等等)。
可以直接輸入這項選項,無需先輸入質量數。link=yes
(可選)自動加上指向相關元素或同位素頁面的鏈接。
許多同位素沒有單獨的頁面,請編者建立新頁面,或者重定向至「『某某元素』的同位素」頁面。anti=yes
(可選)表示該元素由反物質組成,因此需要在頂端標以橫線。 charge=...
(可選)表示離子的電荷。 q=...
(可選)指定該原子的數量(在化學公式中非常有用)。
例子
{{SimpleNuclide|Carbon}}
12
C
{{SimpleNuclide|Carbon|14}}
14
C
{{SimpleNuclide|碳|14}}
14
C
{{SimpleNuclide|link=yes|Carbon}}
12
C
{{SimpleNuclide|anti=yes|Carbon}}
12
C
{{SimpleNuclide|link=yes|Carbon|14}}
14
C
{{SimpleNuclide|Carbon|12|m}}
12m
C
{{Element|Carbon|12|charge=2+}}
C2+
{{ComplexNuclide|link=yes|anti=yes|Carbon|12|m|charge=2+}}
12m
6C2+
6
包含的模板
- 以上所有模板都使用{{ProtonsForElement}}來檢測元素名稱是否正確,而當link=yes參數被加入時,檢測是否使用統稱的元素名「X」或「element」。
- 以上某些模板使用{{ProtonsForElement}}為某特定元素提取其原子序。
- 以上某些模板使用{{NeutronsForElement}}為某特定元素提取其中子數
- 以上某些模板使用{{ProtonsForElement}}和{{NeutronsForElement}}為某特定元素提取其質量數。
- 以上所有模板都使用{{LinkForElement}},在link=yes參數被加入時加上鏈接。
- 以上所有模板都使用{{PhysicsParticle}}為所有物理符號創建視覺上統一的HTML輸出。
錯誤使用
錯誤使用這些模板的頁面將會被加入分類:帶有錯誤格式模板的頁面。請定時查看分類並修改錯處。
以下為一些錯誤信息:
{{Nuclide |Blabla}} | 未知的元素“Blabla ” |
{{Nuclide |Aluminum}} | “Aluminum ”不是“鋁”的正確拼法。 |
{{Element |Element |link=yes}} | 元素“Element ”沒有對應的頁面。 |
模板编辑说明
- 資料皆儲存於Module:Element/data
若要調整本模板的內容請至Module:Element/data編輯
- 編輯時請按照下面格式,以鎝為例,其中參數有大小寫敏感,大小寫要跟下列示例一致
{
name='鎝',
isotopePage='鎝的同位素',
page='锝',
stability={
stableCount=0,
halflife=1.3276656e14
},
Symbol='Tc',
period=5, group=7, block='d',
series={'過渡金屬','金屬'},
Z=43,N=56,
Melting=2430,Boiling=4538,
othername={'Tc','tc','technetium','Technetium','鎝','鍀','锝'},
Isotope={
{N=56,name='鎝-99m',page='鎝-99m'}
{N=56,name='鎝-99'}
},
wikidata=1054,
density=11,
atomicRadius=136,CovalentRadius=147,vdwRadius="nan",EN=1.9,
EC={{2},{2,6},{2,6,10},{2,6,5},{2},cen="Kr"}
}
參數名稱 | 意義 | 說明 | 範例 (以锝為主) |
備註 |
---|---|---|---|---|
name | 元素名稱 | 這是本資料表的key,應先到先得,請勿竄改, 否則部分模板將會出現查無資料類的錯誤 |
'鎝' |
|
page | 元素條目名稱 | 元素的條目名稱,請使用未繁簡轉換的原始條目名 (否則連到頁面的鏈接在條目中不會變成粗體) |
'锝' |
|
isotopePage | 同位素條目名稱 | 同位素的條目名稱,請使用未繁簡轉換的原始條目名 (否則連到頁面的鏈接在條目中不會變成粗體) |
'鎝的同位素' |
|
stability | 元素穩定資訊 | stability={
stableCount=0,
halflife=1.3276656e14
},
|
||
stability={ stableCount } |
穩定同位素的數量 | 0 | ||
stability={ halflife } |
最穩定同位素的半衰期 | 以秒為單位。若有同位素穩定請不要寫此參數 | 1.3276656e14 |
|
Symbol | 元素符號 | 'Tc' |
開頭字母大寫 | |
period | 週期 | 元素的週期,整數 用於確定元素在週期表的位置 |
5 |
|
group | 族 | 元素的族,整數 用於確定元素在週期表的位置 |
7 |
|
block | 元素分區 | 元素的區 用於確定元素在週期表的位置 |
'd' |
|
series | 元素種類 | 元素的種類/系列 | ||
Z | 原子序 | |||
N | 中子數 | 主同位素的中子數 | ||
stdAtomicWeight | 標準原子量 | 元素的標準原子質量 |
以氦為例
以氫為例
|
未填即使用Z和N推算 並標記為未確定特性 |
Melting | 熔點 | 熔點,單位為絕對溫度 | 2430 |
|
Boiling | 沸點 | 沸點,單位為絕對溫度 | 4538 |
|
othername | 別名 | 能夠表示此種元素的各種別名。 | ||
Isotope | 同位素 | 同位素列表,以有條目存在的為主。 | Isotope={
{N=56,name='鎝-99m',page='鎝-99m'}
{N=56,name='鎝-99'}
},
|
|
wikidata | 維基數據項目 | 元素條目的維基數據項目。 | wikidata=1054 |
|
density | 密度 | 密度,單位為g/cm³ | 11 |
|
atomicRadius | 原子半径 | 原子半径,單位為皮米 | 136 |
|
CovalentRadius | 共价半径 | 共价半径,單位為皮米 | 147 |
|
vdwRadius | 范德华半径 | 范德华半径,單位為皮米 | ||
EN | 電負度 | 电负性,單位為鮑林標度 | 1.9 |
|
EC | 電子組態 | 電子組態,表達方式為{{1s},{2s,2p},{3s,3p,3d}...,cen="內層元素"} |
{{2}, {2,6}, {2,6,10}, {2,6,5}, {2}, cen="Kr"} |
local p = {}
local origArgs
local error = require( 'Module:Error' )
local element_data = require( 'Module:Element/data' )
local series_name_data = {{"錒系元素", "锕系元素", "錒系金屬", "锕系金属", "actinide"},{"鹼金屬", "碱金属", "alkali metal"},{"鹼金屬(預測)", "碱金属(预测)", "alkali metal (predicted)"},{"鹼土金屬", "碱土金属", "alkaline earth metal"},{"鹼土金屬(預測)", "碱土金属(预测)", "alkaline earth metal (predicted)"},{"雙原子非金屬", "双原子非金属", "diatomic nonmetal"},{"雙原子非金屬(預測)", "双原子非金属(预测)", "diatomic nonmetal (predicted)"},{"多原子非金屬", "多原子非金属", "polyatomic nonmetal"},{"多原子非金屬(預測)", "多原子非金属(预测)", "polyatomic nonmetal (predicted)"},{"eka-超錒系元素", "eka-超锕系元素", "下超錒系元素", "eka-superactinide"},{"eka-超錒系元素(預測)", "eka-超锕系元素(预测)", "eka-superactinide (predicted)"},{"惰性氣體", "惰性气体", "稀有氣體", "稀有气体", "noble gas"},{"惰性氣體(預測)", "惰性气体(预测)", "稀有氣體(預測)", "稀有气体(预测)", "noble gas (predicted)"},{"鹵素", "卤素", "halogen"},{"鹵素(預測)", "卤素(预测)", "halogen (predicted)"},{"金屬", "金属", "metal"},{"類金屬", "类金属", "metalloid"},{"類金屬(預測)", "类金属(预测)", "metalloid (predicted)"},{"鑭系元素", "镧系元素", "鑭系金屬", "镧系金属", "lanthanide"},{"其他非金屬", "其他非金属", "非金属", "非金屬", "other non-metal"},{"其他非金屬(預測)", "其他非金属(预测)", "非金屬(預測)", "other non-metal (predicted)"},{"貧金屬", "贫金属", "主族金屬", "主族金属", "post-transition metal"},{"貧金屬(預測)", "贫金属(预测)", "主族金屬(預測)", "主族金属(预测)", "post-transition metal (predicted)"},{"超錒系元素", "超锕系元素", "superactinide"},{"超錒系元素(預測)", "超锕系元素(预测)", "superactinide (predicted)"},{"過渡金屬", "过渡金属", "过渡元素", "過渡元素", "transition metal"},{"過渡金屬(預測)", "过渡金属(预测)", "过渡元素(预测)", "過渡元素(預測)", "transition metal (predicted)"},{"超臨界原子", "離子態", "超临界原子", "离子态", "supercritical atoms", "supercritical atoms (predicted)"},{"無電子", "无电子", "no electron"},{"可能不存在", "maybe not exist"},{"s區元素", "s区元素", "s區", "s区", "s block"},{"s區元素(預測)", "s区元素(预测)", "s區(預測)", "s区(预测)", "s block (predicted)"},{"p區元素", "p区元素", "p區", "p区", "p block"},{"p區元素(預測)", "p区元素(预测)", "p區(預測)", "p区(预测)", "p block (predicted)"},{"d區元素", "d区元素", "d區", "d区", "d block"},{"d區元素(預測)", "d区元素(预测)", "d區(預測)", "d区(预测)", "d block (predicted)"},{"ds區元素", "ds区元素", "ds區", "ds区", "ds block"},{"ds區元素(預測)", "ds区元素(预测)", "ds區(預測)", "ds区(预测)", "ds block (predicted)"},{"f區元素", "f区元素", "f區", "f区", "f block"},{"f區元素(預測)", "f区元素(预测)", "f區(預測)", "f区(预测)", "f block (predicted)"},{"g區元素", "g区元素", "g區", "g区", "g block"},{"g區元素(預測)", "g区元素(预测)", "f區(預測)", "g区(预测)", "g block (predicted)"},{"h區元素", "h区元素", "h區", "h区", "h block"},{"h區元素(預測)", "h区元素(预测)", "h區(預測)", "h区(预测)", "h block (predicted)"},{"未知特性", "未知", "化學性質未知", "化学性质未知", "unknown", "unknown chemical properties"}}
function p.symbol(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._symbol(args)
end
function p.link(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._link(args)
end
function p.check(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._check(args)
end
function p.neutron(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._neutron(args)
end
function p._neutron(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return '' end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return ''
end
if (ele1.correct and ele1.correct ~= '') then
return ''
end
if (ele1.N and ele1.N ~= '') then
return ele1.N
end
return ''
end
function p.compare_series(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
args = {}
for k, v in pairs( frame.args ) do
args[k] = v;
end
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
return p.compareSeries(arg1, arg2)
end
function p.compareSeries(series1, series2)
checked = false
for v, x in ipairs(series_name_data) do
for v1, x1 in ipairs(x) do
if (x1 == series1) then
series_left = {x[1]}
checked = true
break
end
end
if checked then break end
end
if not checked then
eleSeries = p.getSeries({series1})
eleSeries = mw.text.split( table.concat(eleSeries, ',') .. ',' .. series1 , ',' )
for index, it in ipairs(eleSeries) do
checked = false
for v, x in ipairs(series_name_data) do
for v1, x1 in ipairs(x) do
if (x1 == it) then
eleSeries[index] = x[1]
checked = true
break
end
end
if checked then break end
end
end
series_left = eleSeries
end
checked = false
for v, x in ipairs(series_name_data) do
for v1, x1 in ipairs(x) do
if (x1 == series2) then
series_right = {x[1]}
checked = true
break
end
end
if checked then break end
end
if not checked then
eleSeries = p.getSeries({series2})
eleSeries = mw.text.split( table.concat(eleSeries, ',') .. ',' .. series2 , ',' )
for index, it in ipairs(eleSeries) do
checked = false
for v, x in ipairs(series_name_data) do
for v1, x1 in ipairs(x) do
if (x1 == it) then
eleSeries[index] = x[1]
checked = true
break
end
end
if checked then break end
end
end
series_right = eleSeries
end
if series_left.predicted then series_left.predicted = nil end
if series_right.predicted then series_right.predicted = nil end
for v_left, x_left in ipairs(series_left) do
for v_right, x_right in ipairs(series_right) do
if mw.text.trim(x_left) == mw.text.trim(x_right) then return 'yes' end
end
end
if series_left == series_right then return 'yes' end
return ''
end
function p.series(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
args = {}
for k, v in pairs( frame.args ) do
args[k] = v;
end
eleSeries = p.getSeries(args)
if (eleSeries.predicted) then return eleSeries[1] .. '(預測)' end
return eleSeries[1]
end
function p.getSeries(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return {'錯誤'} end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then return {'未知'} end
if (ele1.correct and ele1.correct ~= '') then
eleid = p.getListID(ele1.correct)
ele1 = element_data[eleid]
if (eleid==-1) then return {'未知'} end
end
if (ele1.series and ele1.series ~= '') then
if (ele1.predictedSeries and ele1.predictedSeries ~= '') then ele1.series.predicted=1 end
return ele1.series
end
return {'錯誤'}
end
function p.protons(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._protons(args)
end
function p._protons(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return '' end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return ''
end
if (ele1.correct and ele1.correct ~= '') then
return ''
end
if (ele1.Z and ele1.Z ~= '') then
return ele1.Z
end
return ''
end
function p._check(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return error.error{ '未輸入元素' } end
linkString='' if (args['link'] and args['link'] ~= '') then linkString = string.gsub(args['link'] , "%s$", "") end
if (linkString and linkString ~= '') then
if (linkString == 'yes') then
pagetest=true
end
end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return error.error{ '未知的元素“' .. args[1] .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return ''
end
if(pagetest)then
return error.error{ '元素“' .. args[1] .. '”' .. '沒有對應的頁面。'}
else
return ''
end
end
function p._symbol(args)
if not(args[1] and args[1] ~= '') then return error.error{ '未輸入元素' } end
myString = string.gsub(args[1] , "%s$", "") --去除模板引用時可能產生的空格
eleid = p.getListID(myString)
if (eleid==-1) then
return error.error{ '未知的元素“' .. args[1] .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
if(ele1.NotElement)then
return ele1.Symbol
end
num = ele1.Z + ele1.N --計算質量數
n = ele1.N
number=tonumber(args[2])
if (number and number ~= '') then
num = number
n = num - ele1.Z
if (n > 0) then --讀到有效的原子量才會進來這裡執行
if (ele1.Isotope) then
for v, x in ipairs(ele1.Isotope) do
if (x.N == n) then
if (x.Symbol and x.Symbol ~= '') then
return x.Symbol
end
end
end
end
end
end
return ele1.Symbol
end
function p._link(args)
--去除模板引用時可能產生的空格
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return error.error{ '未輸入元素' } end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
arg3='' if (args[3] and args[3] ~= '') then arg3 = string.gsub(args[3] , "%s$", "") end
eleid = p.getListID(arg1)
has_m=''
if (arg3 and arg3 ~= '') then
has_m=arg3
end
if (eleid == -1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
if(ele1.NotElement)then
return ele1.page
end
if (ele1.page and ele1.page ~= '') then
num = ele1.Z + ele1.N --計算質量數
n = ele1.N
hasmass=false
number=tonumber(arg2)
if (number and number ~= '') then
num = number
n = num - ele1.Z
hasmass=true
if (n < 0) then
return error.error{ '中子數不得為“' .. n .. '”' }
end
else
if (args2 and args2 ~= '') then
return error.error{ '未知的質量數“' .. args2 .. '”' }
end
end
if (hasmass == true) then
if (ele1.Isotope) then
for v, x in ipairs(ele1.Isotope) do
if (x.N == n) then
if (x.page and x.page ~= '') then
return x.page
else
return error.error{ '元素“' .. args[1] .. '”' .. '質量數為“'.. num ..'”的同位素沒有對應的頁面。'}
end
end
end
return ele1.page .. '-' .. num .. has_m
end
end
return ele1.page
end
return error.error{ '元素“' .. args[1] .. '”' .. '沒有對應的頁面。'}
end
function p.getListID(names)
local body =''
i=1
for v, x in ipairs(element_data) do
if ((x.name == names) or (x.page == names)) then
return i
end
for v1, x1 in ipairs(x.othername) do
if (x1 == names) then
return i
end
end
i=i+1
end
return -1
end
function p.decaylink(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._decaylink(args)
end
function p.elementlink(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._elementlink(args)
end
function p._elementlink(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
eleid = p.getListID(arg1)
if (eleid==-1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
symbol1=ele1.Symbol
if(arg2 and arg2 ~= '')then if(arg2 ~= '1' )then
if (ele1.compound)then symbol1 ='(' .. symbol1 .. ')' end
symbol1 = symbol1 .. '<sub>' .. arg2 .. '</sub>'
end end
if (ele1.compound)then
return '[[' .. ele1.page .. '|' .. symbol1 .. ']]'
end
if (ele1.NotElement)then
return error.error{ '“' .. args[1] .. '”不是元素。'}
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return '[[' .. ele1.page .. '|' .. symbol1 .. ']]'
else
return error.error{ '元素“' .. args[1] .. '”沒有對應的頁面。'}
end
return ''
end
function p._element_symbol(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
eleid = p.getListID(arg1)
if (eleid==-1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
symbol1=ele1.Symbol
if(arg2 and arg2 ~= '')then if(arg2 ~= '1' )then
if (ele1.compound)then symbol1 ='(' .. symbol1 .. ')' end
symbol1 = symbol1 .. '<sub>' .. arg2 .. '</sub>'
end end
if (ele1.compound)then
return symbol1
end
if (ele1.NotElement)then
return error.error{ '“' .. args[1] .. '”不是元素。'}
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return symbol1
else
return error.error{ '元素“' .. args[1] .. '”沒有對應的頁面。'}
end
return ''
end
function p._decaylink(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
if(arg1=='p') then arg1='p+'end if(arg1=='n') then arg1='n0'end
decayid = p.getListID(arg1)
if (decayid==-1) then
return ''
end
decay1 = element_data[decayid]
if (decay1.decay)then
return '[[' .. decay1.page .. '|' .. decay1.Symbol .. ']]'
end
return ''
end
p.IUPAC = { [0] = 'n', [1] = 'u', [2] = 'b', [3] = 't', [4] = 'q', [5] = 'p', [6] = 'h', [7] = 's', [8] = 'o', [9] = 'e' }
p.IUPAC_name = { [0] = 'nil', [1] = 'un', [2] = 'bi', [3] = 'tri', [4] = 'quad', [5] = 'pent',
[6] = 'hex', [7] = 'sept', [8] = 'oct', [9] = 'enn', [10] = 'ium', [11] = 'um' }
function p.DecodeByIUPAC_rules(symbol_data)
symbol = mw.ustring.lower(symbol_data)
symbol_len = mw.ustring.len(symbol)
Z_data = ''
for i = 1, symbol_len do
get_id = nil
for j = 0, 9 do if mw.ustring.sub(symbol ,i, i) == p.IUPAC[j] then get_id = j end end
if get_id == nil then return nil end
Z_data = Z_data .. get_id
end
return tonumber(Z_data)
end
function p.getElementByIUPAC_rules(index_input)
result = ''
result_name = ''
index = tonumber(index_input)
if index ~= nil then index = math.floor(index) else index = 0 end
index_str = '' .. index
index_len = mw.ustring.len(index_str)
if index > 100 then
for i = 1, index_len do
data = p.IUPAC[tonumber('' .. mw.ustring.sub(index_str ,i, i)) or 0]
name = p.IUPAC_name[tonumber('' .. mw.ustring.sub(index_str ,i, i)) or 0]
if i == 1 then
result = result .. mw.ustring.upper(data)
result_name = result_name .. mw.ustring.upper(mw.ustring.sub(name,1,1)) .. mw.ustring.sub(name,2,-1)
else
result = result .. data
result_name = result_name .. name
end
end
end
if result == '' then
return nil
end
result_name_index = 11 if mw.ustring.sub(result_name,-1,-1) ~= 'i' then result_name_index = result_name_index - 1 end
return { name=result_name .. p.IUPAC_name[result_name_index] , page=result, Symbol=result, Z=index }
end
function p.getElementByZ(index)
local body =''
for v, x in ipairs(element_data) do
if (x.Z == index) then
return x
end
end
if index > 0 then
return p.getElementByIUPAC_rules(index)
end
return nil
end
function p.next_element(symbol)
eleid = p.getListID(symbol)
ele1 = element_data[eleid]
if ele1 == nil then ele_z = p.DecodeByIUPAC_rules(symbol) else if ele1.Z == nil then
ele_z = p.DecodeByIUPAC_rules(symbol) else ele_z = ele1.Z end
end
if ele_z ~= nil then
return p.getElementByZ(ele_z + 1)
end
return nil
end
function p.last_element(symbol)
eleid = p.getListID(symbol)
ele1 = element_data[eleid]
if ele1 == nil then ele_z = p.DecodeByIUPAC_rules(symbol) else if ele1.Z == nil then
ele_z = p.DecodeByIUPAC_rules(symbol) else ele_z = ele1.Z end
end
if ele_z ~= nil then
return p.getElementByZ(ele_z - 1)
end
return nil
end
--本模塊的沙盒(測試)函數
function p.sandbox(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._elementlink(args)
end
function p._sandbox(args)
return element_data[p.getListID(args[1])].name
end
return p