在记笔记时发现有些SQL语言的关键字并未能被 minted
环境识别出来,被当成普通字符处理,输出为黑色。但强迫症让我想去手动修改未被上色的关键字以保证笔记效果,昨日查询资料时得知 minted
包的 escapeinside
键能够起到临时启动转义的效果,所以想在中间使用 \textcolor
命令的 RGB
模式对关键字进行上色,但是编译报错,报错结果如下:
后来找到另外一种解决办法,使用 \definecolor
的 RGB
模式预先定义好颜色,再使用 \textcolor
就没问题了。但是想弄清楚前者为什么会出现编译报错的原因,现已上传最小工作实例,未注释部分为原有的报错代码,注释部分为后续找到的解决方案。
本人LaTeX小白,恳请各位大佬指点一下,谢谢!
MWE如下:
\documentclass{ctexart}
\usepackage{color}
\usepackage[svgnames]{xcolor}
\usepackage{minted}
% \definecolor{codegreen}{RGB}{0,128,0}
\begin{document}
\begin{minted}[bgcolor = gray!10, breaklines = true, escapeinside=||]{SQL}
|\textcolor[RGB]{0,128,0}{text}|
\end{minted}
% \begin{minted}[bgcolor = gray!10, breaklines = true, escapeinside=||]{SQL}
% |\textcolor{codegreen}{text}|
% \end{minted}
\end{document}
更建议从源头上解决问题。
在记笔记时发现有些SQL语言的关键字并未能被 minted 环境识别出来,被当成普通字符处理,输出为黑色。但强迫症让我想去手动修改未被上色的关键字以保证笔记效果。例如DATABASE
关键字无法被SQL
正确识别为高亮。
注意到minted
是基于pygments
的,因此所有支持的语言和关键字应该查看这里。
我没有仔细搜索,但是
DATABASES
不是 SQL
的关键字DATABASES
是 MySQL
的关键字所以可以考虑治本...
\documentclass[fontset=fandol]{ctexart}
\usepackage[margin=1cm]{geometry}
\usepackage[svgnames]{xcolor}
\usepackage{minted}
\begin{document}
\begin{minted}[
bgcolor = gray!10,
breaklines = true
]{MySQL}
DATABASES Explorer
-- 按产品类别和季度统计销售数据
SELECT
product_category, -- 产品类别
quarter, -- 季度(1-4)
total_sales, -- 总销售额
order_count, -- 订单数量
avg_order_value -- 平均客单价(总销售额/订单数)
FROM (
-- 子查询:计算每个订单的销售额,并提取年份和季度
SELECT
product_category,
-- 提取订单日期的年份和季度(兼容 MySQL、PostgreSQL、SQL Server)
DATE_FORMAT(order_date, '%Y') AS year,
QUARTER(order_date) AS quarter,
order_id,
SUM(unit_price * quantity) AS order_sales -- 单订单销售额 = 单价×数量
FROM
sales
WHERE
order_date >= '2023-01-01' -- 筛选2023年数据
AND order_date < '2024-01-01'
AND unit_price > 0 -- 排除异常数据(单价为0的订单)
GROUP BY
product_category, year, quarter, order_id -- 按订单粒度聚合
) AS order_details
-- 外层聚合:按类别和季度统计
GROUP BY
product_category, quarter
-- 按类别升序、季度升序排序
ORDER BY
product_category ASC,
quarter ASC;
\end{minted}
\end{document}
至于如何「自定义minted
的关键字」,按照这里的说法,这似乎不是一个LaTeX的问题,而是一个Python层面的问题....
有空可以研究一下补上,挖坑😀
感谢大佬的回答!
BTW, 我个人觉得自定义minted关键字似乎有些伪需求,大多数情况都应该遵循该语言官方的关键字高亮规则(除非你在开发一门新的语言,那样的话显然应该向
pygments
提issues)补充关于
\textcolor
报错的测试信息:minted v3.7.0
没有这个问题minted v2.9.0
有这个问题