模組:Element/sandbox
这是Module:Element(差异)的沙盒。 |
此模块sandbox被引用於約850個頁面。 為了避免造成大規模的影響,所有對此模块sandbox的編輯應先於沙盒或測試樣例上測試。 測試後無誤的版本可以一次性地加入此模块sandbox中,但是修改前請務必於討論頁發起討論。 模板引用數量會自動更新。 |
Module:Element(编辑 | 讨论 | 历史 | 链接 | 监视 | 日志)
函數說明
[编辑]symbol
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的元素符號,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|symbol|26}}
→回傳「Fe」 - 輸入
{{#invoke:Element|symbol|水銀}}
→回傳「Hg」 - 輸入
{{#invoke:Element|symbol|汞}}
→回傳「Hg」 - 輸入
{{#invoke:Element|symbol|168}}
→回傳「Uho」
- 例外狀況
- 輸入
{{#invoke:Element|symbol|娜娜奇}}
→回傳「未知的元素“娜娜奇”」 - 輸入
{{#invoke:Element|symbol|-168}}
→回傳「未知的元素“-168”」
- 其他
- 輸入
{{#invoke:Element|symbol|元素}}
→回傳「X」 - 輸入
{{#invoke:Element|symbol|銨}}
→回傳「NH4」
neutron
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素最穩定同位素且豐度最高之同位素的中子數,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|neutron|Oxygen}}
→回傳「8」 - 輸入
{{#invoke:Element|neutron|26}}
→回傳「30」 - 輸入
{{#invoke:Element|neutron|水銀}}
→回傳「122」 - 輸入
{{#invoke:Element|neutron|汞}}
→回傳「122」 - 輸入
{{#invoke:Element|neutron|Tc}}
→回傳「54」 - 輸入
{{#invoke:Element|neutron|61}}
→回傳「84」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|neutron|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|neutron|168}}
→回傳「」
protons
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的質子數,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|protons|Oxygen}}
→回傳「8」 - 輸入
{{#invoke:Element|protons|26}}
→回傳「26」 - 輸入
{{#invoke:Element|protons|水銀}}
→回傳「80」 - 輸入
{{#invoke:Element|protons|汞}}
→回傳「80」 - 輸入
{{#invoke:Element|protons|Tc}}
→回傳「43」 - 輸入
{{#invoke:Element|protons|61}}
→回傳「61」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|protons|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|protons|168}}
→回傳「168」
protons與neutron
[编辑]結合protons與neutron可輸出質量數
- 輸入
{{#expr:{{#invoke:Element|protons|1=Oxygen}}+{{#invoke:Element|neutron|1=Oxygen}} }}
→回傳「16」 - 輸入
{{#expr:{{#invoke:Element|protons|1=26}}+{{#invoke:Element|neutron|1=26}} }}
→回傳「56」 - 輸入
{{#expr:{{#invoke:Element|protons|1=水銀}}+{{#invoke:Element|neutron|1=水銀}} }}
→回傳「202」 - 輸入
{{#expr:{{#invoke:Element|protons|1=汞}}+{{#invoke:Element|neutron|1=汞}} }}
→回傳「202」 - 輸入
{{#expr:{{#invoke:Element|protons|1=Tc}}+{{#invoke:Element|neutron|1=Tc}} }}
→回傳「97」 - 輸入
{{#expr:{{#invoke:Element|protons|1=61}}+{{#invoke:Element|neutron|1=61}} }}
→回傳「145」
getAtomicWeight
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的轉換標準原子量,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getAtomicWeight|Oxygen}}
→回傳「15.999」 - 輸入
{{#invoke:Element|getAtomicWeight|26}}
→回傳「55.845」 - 輸入
{{#invoke:Element|getAtomicWeight|水銀}}
→回傳「200.592」 - 輸入
{{#invoke:Element|getAtomicWeight|汞}}
→回傳「200.592」 - 輸入
{{#invoke:Element|getAtomicWeight|Tc}}
→回傳「[97]」 - 輸入
{{#invoke:Element|getAtomicWeight|61}}
→回傳「[145]」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|getAtomicWeight|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|getAtomicWeight|168}}
→回傳「」
getName
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的元素名稱,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getName|26}}
→回傳「鐵」 - 輸入
{{#invoke:Element|getName|水銀}}
→回傳「汞」 - 輸入
{{#invoke:Element|getName|汞}}
→回傳「汞」
- 例外狀況
- 輸入
{{#invoke:Element|getName|娜娜奇}}
→回傳「未知的元素“娜娜奇”」
getPhase
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的相態,值有可能是soild、gas、liquid或unknown四者其中之一,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|getPhase|26}}
→回傳「solid」 - 輸入
{{#invoke:Element|getPhase|水銀}}
→回傳「liquid」 - 輸入
{{#invoke:Element|getPhase|汞}}
→回傳「liquid」 - 輸入
{{#invoke:Element|getPhase|氮}}
→回傳「gas」 - 輸入
{{#invoke:Element|getPhase|113}}
→回傳「solid」
- 失敗則回傳空白
- 輸入
{{#invoke:Element|getPhase|娜娜奇}}
→回傳「」 - 輸入
{{#invoke:Element|getPhase|168}}
→回傳「unknown」
wikidataID
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的維基數據項目編號,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|wikidataID|26}}
→回傳「Q677」 - 輸入
{{#invoke:Element|wikidataID|水銀}}
→回傳「Q925」 - 輸入
{{Q|{{#invoke:Element|wikidataID|26}}}}
→回傳「鐵 (Q677)」 - 輸入
{{Q|{{#invoke:Element|wikidataID|水銀}}}}
→回傳「汞 (Q925)」
meltingPoint
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的熔點(單位為絕對溫標),資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|meltingPoint|26}}
→回傳「1811」 - 輸入
{{#invoke:Element|meltingPoint|水銀}}
→回傳「234.43」
boilingPoint
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的熔點(單位為絕對溫標),資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|boilingPoint|26}}
→回傳「3134」 - 輸入
{{#invoke:Element|boilingPoint|水銀}}
→回傳「629.88」
decaylink
[编辑]輸入一個與衰變方式相關字串,回傳該衰變方式的內部連結,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|decaylink|γ衰變}}
→回傳「γ」
ElectronConfiguration
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳該元素的電子組態,資料記載於Module:Element/data。
- 輸入
{{#invoke:Element|ElectronConfiguration|26}}
→回傳「[Ar]3d64s2」 - 輸入
{{#invoke:Element|ElectronConfiguration|水銀}}
→回傳「[Xe]4f145d106s2」
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}}
→回傳「元素“168”沒有對應的頁面。」
- 使用getName
elementlink
[编辑]輸入一個與元素相關字串(如原子序、名稱、符號、別名等),回傳顯示為該元素符號且指向該元素條目的內部連結,資料記載於Module:Element/data。
check
[编辑]當字串不是有效的元素名稱或「x」時,會顯示以下錯誤信息:
- 輸入
{{#invoke:Element|check|C}}
→會顯示「」(正確無誤) - 輸入
{{#invoke:Element|check|Carbon}}
→會顯示「」(正確無誤) - 輸入
{{#invoke:Element|check|碳}}
→會顯示「」(正確無誤) - 輸入
{{#invoke:Element|check|娜娜奇}}
→會顯示「未知的元素“娜娜奇”」 - 輸入
{{#invoke:Element|check|Blablabla}}
→會顯示「未知的元素“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}}
→會顯示「元素“X”沒有對應的頁面。」
如果所輸入的元素名稱不符合英文維基百科的拼寫規則,則會顯示以下錯誤信息:
- 輸入
{{#invoke:Element|check|Aluminum}}
→會顯示「“Aluminum”不是“鋁”的正確拼法。」 - 輸入
{{#invoke:Element|check|Sulphur}}
→會顯示「“Sulphur”不是“硫”的正確拼法。」 - 輸入
{{#invoke:Element|check|Sulfur}}
→會顯示「」(正確無誤) - 輸入
{{#invoke:Element|check|Cesium}}
→會顯示「“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' )
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.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