Module:图书排版:修订间差异

删除的内容 添加的内容
以 heti 官方规则为底补齐版式类,并把版式改为模板参数开关({{图书排版|行间注}} 等)
以 heti 官方规则为底补齐版式类,并把版式改为模板参数开关({{图书排版|行间注}} 等)
第4行:
设计见 content/tushu/DESIGN.md。要点:
 
1) 取代原先的 {{#switch:{{{1|}}}}} 单参数结构,改为**收集全部位置参数**,因此支持叠加:{{图书排版|古籍|楷体}}
因此支持叠加:{{图书排版|古籍|楷体}} → <div class="tushu-body heti--ancient heti--kai">。
用 Lua 而非纯 wikitext,是因为 wikitext 没有循环——要支持叠加就得把下面那张
映射表重复写 N 遍,模板体积会翻几倍,还凭空多了参数个数上限。
2) 容器类一律沿用 heti 官方类名(.heti--*),不另造前缀。
3) **总是输出基础容器 tushu-body**(即使一个参数都没传)。原因:153 个页面已于
3) **不传参数(或全为空串)时返回空串**,保证现有无参页面输出与改造前逐字节一致。
2026-09 加上 {{图书排版/尾}},若模板不输出容器,那些 </div> 会变成孤立的
4) 竖排除了 .heti--vertical 还要输出锚点与横/直排切换条(借 Wikisource SKQS 的▼
闭合标签而破坏页面结构。容器本身不带任何样式——限宽已于 2026-09 改回
:target 纯 CSS 技巧,零 JS),且必须排在正文容器之前。
由 |限宽 参数触发(见样式表里的 .heti--line-length)。
▲ 4) 竖排除了(|竖排 / .heti--vertical 还要输出vertical)及其锚点与、横/直排切换条(借已于 Wikisource2026-09 SKQS 的移除。
样式表内的 .heti--vertical 官方类仍保留,页面手写 <div class="heti--vertical">
仍可用,只是不再有模板参数入口。
]]
 
第22行 ⟶ 第24行:
['诗词'] = 'heti--poetry', ['poetry'] = 'heti--poetry',
['楷体'] = 'heti--kai', ['kai'] = 'heti--kai',
['限宽'] = 'heti--line-length', ['line-length'] = 'heti--line-length',
['双栏'] = 'heti--columns-2', ['columns-2'] = 'heti--columns-2',
['三栏'] = 'heti--columns-3', ['columns-3'] = 'heti--columns-3',
['四栏'] = 'heti--columns-4', ['columns-4'] = 'heti--columns-4',
}
 
-- 竖排需额外输出锚点与切换条
local VERTICAL = { ['竖排'] = true, ['vertical'] = true }
 
function p.main(frame)
local args = frame:getParent().args
local classes, vertical = {}, false
 
for _, v in ipairs(args) do
local key = mw.text.trim(v)
if key ~= '' and CLASS[key] then
ifclasses[#classes VERTICAL+ 1] = CLASS[key] then
vertical = true
classes[#classes + 1] = 'heti--vertical'
elseif CLASS[key] then
classes[#classes + 1] = CLASS[key]
end
end
end
 
-- 总是输出基础容器 tushu-body,即便没有传任何版式参数。
-- 原因:容器的字号**继承正文**(p 的 17px),所以样式表里
-- .tushu-body { max-width: 42em }
-- 的 em 就是正文字号(714px),容器内的标题与段落因而同宽对齐。
-- 反之若在 p / h1–h6 上各自写 max-width,em 会按各元素自身字号计算,
-- h1(32px) 的 42em 是 1344px,标题反而比正文宽一倍。
-- 容器不加闭合标签时会由 HTML5 解析器自动闭合到内容区末尾(因此 153 个
-- 既有页面无需补 {{图书排版/尾}});代价是页末的导航等也会一并被限宽。
local cls = { 'tushu-body' }
for _, c in ipairs(classes) do
第59行 ⟶ 第46行:
end
 
local div =return string.format('<div class="%s">', table.concat(cls, ' '))
if vertical then
div = '<div id="tushu-shu"></div><div id="tushu-heng"></div>'
.. '<div class="noprint tushu-toolbar">[[#tushu-shu|直排]] · [[#tushu-heng|横排]]</div>'
.. div
end
return div
end