最近计划使用source3的原生命令编写一个答题卡宏包,目标是实现高考答题卡的仿真,用于中学生日常测试的规范答题中。但是,在绘制圆角矩形时,由于借助了tikz宏包,这导致了系统报错,报错的代码是
报错的代码1 2 3 4 5 6 7 8 9
| \begin{tikzpicture} \int_while_do:nNnn {\gkcolumn_columnx_int} {<} {\gkcolumn_column_int} { \draw [color=red, rounded corners] (\gkcolumn_start_dim,0) rectangle (\gkcolumn_end_dim,\gksheet_ht_dim); \dim_add:Nn \gkcolumn_start_dim {\gkcolumn_wd_dim+\gkcolumnspace_wd_dim} \dim_set:Nn \gkcolumn_end_dim{\gkcolumn_start_dim+\gkcolumn_wd_dim} \int_add:Nn \gkcolumn_columnx_int {1} } \end{tikzpicture}
|
当我去掉圆角括号rounded corners后发现可以正常工作,但是追加上这人括号后系统再次报错。经过研究发现,主要是rounded corners中包含了一个空格,这会导致问题的产生,因为在expl3语法中,空格会被忽略,而在tikz中空格被解释为参数分隔符,这导致了tikz实际获得的是roundedcorners,
于是错误出现了。而~是不可忽略的空格,于是切换成rounded~corners后问题立刻解决。这是expl3与tikz集成时的一个隐蔽陷阱,所以本文的方案为解决这一问题提供了最佳实践。
正确的代码1 2 3 4 5 6 7 8 9
| \begin{tikzpicture} \int_while_do:nNnn {\gkcolumn_columnx_int} {<} {\gkcolumn_column_int} { \draw [color=red, rounded~corners] (\gkcolumn_start_dim,0) rectangle (\gkcolumn_end_dim,\gksheet_ht_dim); \dim_add:Nn \gkcolumn_start_dim {\gkcolumn_wd_dim+\gkcolumnspace_wd_dim} \dim_set:Nn \gkcolumn_end_dim{\gkcolumn_start_dim+\gkcolumn_wd_dim} \int_add:Nn \gkcolumn_columnx_int {1} } \end{tikzpicture}
|