改不动了....一定不会有后续了...Happy LaTeX3!
我食言了。
我还是觉得作为一名开发者,不能对latex3在七窍通了六窍的情况下就开始造轮子
过分使用AI只会陷入vibe coding这种「复制链接大脑,粘贴代替思考」的境地,事实上,对于\keys_value:nn查无此命令的幻觉应该是很容易通过texdoc interface3发觉的。
我删掉了大部分注释,也不打算做介绍了...
Claim:我没太注意ai给的tikz绘制细节,只是把l3keys的错误用法做了修改...
如果我没理解错.meta:n创建的是「元键」是用来创建多层级键值对的,也并不是「定义短名称作为别名,方便用户调用」,这 似乎 又是一个幻觉...
当一些错误混杂在基本正确的逻辑中,挺难debug的,遇到这种情况还是应该自己从最简单的「l3keys」例子开始,一步步测试,不要每次复制粘贴上百行代码...
- 先实现
tikz的绘图逻辑 - 再学会如何用
l3keys控制键值对 - 最后封装
tikzhl命令
一个不基于.initial:n的做法如下:
\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{calc}
\ExplSyntaxOn
\tl_new:N \l_tikzhl_highlight_color_tl
\tl_new:N \l_tikzhl_underline_thickness_tl
\tl_new:N \l_tikzhl_underline_color_tl
\tl_new:N \l_tikzhl_corner_radius_tl
\dim_new:N \l_tikzhl_padding_dim
\dim_new:N \l_tikzhl_underline_offset_dim
\keys_define:nn { tikzhl } {
hlcolor .tl_set:N = \l_tikzhl_highlight_color_tl,
ulcolor .tl_set:N =\l_tikzhl_underline_color_tl,
thickness .tl_set:N = \l_tikzhl_underline_thickness_tl,
radius .tl_set:N = \l_tikzhl_corner_radius_tl,
}
\keys_set:nn { tikzhl } {
hlcolor = yellow!30,
ulcolor= blue,
thickness = 1.5pt,
radius = 0pt,
}
\NewDocumentCommand{\tikzhl}{ O{} m }{%
\tikz[baseline=(current~bounding~box.base)]{
% 设置内部维度变量的值。
\dim_set:Nn \l_tikzhl_padding_dim { 1pt }% 文本与高亮框的内边距
\dim_set:Nn \l_tikzhl_underline_offset_dim { 1pt }% 下划线距离文本的垂直偏移
\keys_set:nn { tikzhl } { #1 }
% 1. 绘制文本节点,并应用高亮背景和圆角。
\node[
inner~sep=\l_tikzhl_padding_dim,
fill=\l_tikzhl_highlight_color_tl,
text=black,
anchor=base,
rounded~corners=\l_tikzhl_corner_radius_tl,
] (textnode) {#2};% 节点内容为 #2 (强制参数)
% 2. 绘制加粗下划线。
\draw[
draw=\l_tikzhl_underline_color_tl,
line~width=\l_tikzhl_underline_thickness_tl
] ($(textnode.south~west) + (0,-\dim_use:N \l_tikzhl_underline_offset_dim)$)
-- ($(textnode.south~east) + (0,-\dim_use:N \l_tikzhl_underline_offset_dim)$);
}%
}
\ExplSyntaxOff
\begin{document}
这是一个示例文本,其中包含一些 \tikzhl{需要高亮} 的内容。
你可以看到它和周围的文本在同一行,并且带有加粗的下划线。
% --- 正确的调用方式示例 (使用键值对) ---
% 1. 仅改变高亮背景颜色
\tikzhl[hlcolor=green!20]{这是绿色高亮}。
% 2. 仅改变下划线粗细
\tikzhl[thickness=2pt]{这是粗下划线}。
% 3. 仅改变下划线颜色
\tikzhl[ulcolor=red]{这是红色下划线}。
% 4. 设置圆角半径
\tikzhl[radius=3pt]{这个是圆角高亮}。
% 5. 组合使用:紫色高亮,3pt下划线,紫色下划线,3pt圆角
\tikzhl[hlcolor=violet!20, thickness=3pt, ulcolor=purple, radius=3pt]{复杂组合示例}。
% 6. 所有参数都使用默认值
默认样式:\tikzhl{默认样式}。
\end{document}
希望下次不要直接把ai的代码丢上来,要注意到这个问题其实不是集中在一个关键点上,而是泛泛而谈「但是无法运行,有很多报错,请问是什么原因?」,后来者看到这个页面的时候很难反应过来这是在「改l3keys的不正确语法」。
请问是否可以增加绘制外部框线的属性,包括可以调节外部框线的粗细,圆角和颜色?
没看太明白,上面好像已经实现了控制(?)...tikz您是高手,应该可以自己搞定...























问 为何自定义的行内高亮命令无法运行?