想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用表格、打虚线,然后文字可以表格中或漂浮的文本框、艺术字,但问题是文字和网格的对齐非常困难,不容易调整;Excel里面也可以调网格,但Excel就很难所见即所得,打印出来文字和网格总会发生意想不到的漂移。——而且顺便发现Excel中还有本文标题中提到的“问题”(这个问题是视图没有切换到page layout导致的,这是本文解释的初衷)。
大家都以所接触的世界为“黑箱”(不看文档的情况下),通过各种互动和观察,尝试理解“黑箱”的工作原理。尝试用Excel制作田字格的时候,发现。
但对比下来,还是用LaTeX生成田字格最合适。因为Excel并非严格所见即所得,看到的并非能够严格按照所见打印出来的。Office局限性足见一斑。而用LaTeX生成类似的效果明显更好:
本来这篇博客只是想解释一下,Excel中并不存在行高、列宽单位不统一的问题,顺便吐糟了一下Office总是不如LaTeX。于是想到不妨用LaTeX来做!而且搜索、加上特种大语言模型齐上阵,调整代码,很快就得到了想要的效果。——附带证明了LaTeX完成这类任务,简直就是神一样的存在!秒杀Office和各种插件及技巧。我搜索的时候发现有秀出LaTeX效果的网友,却不肯分享好用的代码。我对此深不以为然。所以,调整出好用的代码之后,我特地把代码和效果都分享出来,方便其他人用。为什么?这些主要是方便中国的孩子,以及对中国语言文字感兴趣的人。当然要免费分享。
下面的代码是在CTeX 3.x里面依次使用 LaTeX, dvips, ps2pdf编译得到PDF;其它方式或许也能用。但我没有专门尝试。
\documentclass{article}
\usepackage{ctex}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{microtype}
\usepackage{xstring}
\usepackage{xpinyin}\geometry{a4paper,landscape,margin=1cm}\newcommand\pygrid[2]{%
\fontsize{100}{100}
\begin{tikzpicture}[baseline=(current bounding box.south)]%\tikzstyle help lines=[color=red!90,thin]\path[use as bounding box](0,0) rectangle (1em,1.6em);\draw[help lines,step=0.5em](0,0) grid (1em,1em);\draw[help lines,dashed](0,0) -- (1em,1em) (0,1em) -- (1em,0);\draw[help lines] (0em,1em) -- (0em,1.6em)(0em,1.6em) -- (1em,1.6em) (1em,1.6em) -- (1em,1em);\draw[help lines,dashed] (0em,1.2em) -- (1em,1.2em);\draw[help lines,dashed] (0em,1.4em) -- (1em,1.4em);\node[inner sep=0pt,anchor=south west](char) at (0em,0.06em)[font=\kaishu, scale=0.92] {#1};
%
% % 拼音标注
% \node[anchor=south, font=\small, yshift=0.4em]
% (char) at (0.5em,1.6em) {#2};
\end{tikzpicture}
}% \grid for a single character
\newcommand\grid[1]{%
\fontsize{100}{100}\begin{tikzpicture}[baseline=(char.base)]\tikzstyle help lines=[color=red!90,thin]\path[use as bounding box](0,0) rectangle (1em,1em);\draw[help lines,step=0.5em](0,0) grid (1em,1em);\draw[help lines,dashed](0,0) -- (1em,1em) (0,1em) -- (1em,0);\node[inner sep=0pt,anchor=base west](char) at (0em,0.12em) [font=\kaishu, scale=0.92]{#1}; %调整了位置\end{tikzpicture}%
}% \gridraiseamount is a font-specific value
\newcommand\gridraiseamount{0.12em}\makeatletter
\newcommand\sgrid[1]{%\@for\nextchar:=#1\do{\grid{\nextchar}}% 使用 @for 循环
}
\makeatother\begin{document}
\centering
\grid{好}\grid{的}\grid{帅}\grid{呆}\grid{了}
\\[30pt]
\pygrid{\xpinyin{你}{ni3}}
{2pt}
\pygrid{\xpinyin{真}{zhen1}}
{2pt}
\pygrid{\xpinyin{厉}{li4}}
{2pt}
\pygrid{\xpinyin{害}{hai}}
{2pt}
\\[30pt]
\sgrid{好,的,帅,呆}
\end{document}
可以上面这些,跟 hanzibox:田字格-米字格汉字练习宏包比起来,又孤陋寡闻小儿科。
不过这里就不扯太远了。总而言之,本来是研究Office实现相关功能的,结果发现还是用LaTeX更方便。Office相关的探讨继续如下:
使用应用软件而不看文档、不跟别人交流,也会有类似问题。探索黑箱的网友很多。但有些分享出来的经验,可能是误读,盲人摸象。比如:
看完这个,直觉,Excel 也是需要打印的、微软虽然Office在字处理方面比LaTeX口碑差,但还不至于到尺寸还没有整明白的地步。实际上,Word、Excel 都可以显示Ruler或标尺(直尺?)出来的。但Excel需要在“页面布局” Page Layout视图模式下。普通视图下面,视图选项卡下面Ruler\标尺\直尺是灰色的,无法勾选或取消而已。
在“视图”View选显卡,直尺\标尺Ruler勾选的情况下,显示标尺,这时候,再选择特定行、特定列,行高或者列高的单位就是统一的cm之类的了:
所以,不是Excel行高和列宽的单位不统一,而是在特定视图的情况下,的确存在那种幻觉;转变一下视图就可以了。
为什么会要求在特定视图下才能够显示统一的单位呢?这个我还不懂,有谁知道答案?
另外,对hanzibox(西北农林大学),我还是有些失望,因为对LaTeX发行版的要求条件太过苛刻了:
基于LaTeX3的带注音和译文的汉字练习宏包
hanzibox是一个用
LaTeX3
开发的LaTeX宏包,它提供了\hanzibox
、\hanzidialog
和\writegrid
三个个命令。这三个命令分别用于排版汉字学习中带有或不带田字格、米字格等背景格子的汉字,并可以根据需要在汉字正上方显示拼音,在正下方显示译文。其中,\hanzibox命令能够根据汉字自动调用xpinyin
宏包的\xpinyin*
命令实现汉字注音。并且\hanzibox命令提供了\hanzibox*星号版本,其注音功能是通过自动调用xpinyin宏包的\pinyin命令实现的。\hanzidialog
命令的注音功能是通过在拼音选项中手动插入xpinyin宏包\pinyin命令实现的。\writegrid
命令用于排版作文题目的答题格子纸。hanzibox 是一个用于学习汉字书写与发音的工具,可以用于汉字学习教案、演示文稿、习题册等文档工作。
该宏包的开发灵感源自Jan Vorisek的hanzibox宏包。但对
\hanzibox
和\hanzidialog
命令重新进行了设计,并参考zitie字贴宏包重新用l3draw宏包设计了背景格子。同时,新的宏包也提供了更多命令选项和参数,以期更好地控制排版结果。目前,
hanzibox.sty
宏包仅支持XeTeX
编译引擎,并且只支持UTF-8
编码的LaTeX源文件。可以通过阅读宏包手册(中文)以也解该宏包更多的使用细节和使用样例。 参与贡献
github仓库: (1). 仓库地址: hanzibox-l3 (2). Issues和PR: issue or pull request.
gitee仓库: (1). 仓库地址: hanzibox-l3 (2). Issues and PR: issue or pull request.
Copyright and LicenceCopyright © 2020-2022 by Nan Geng nangeng@nwafu.edu.cn
This work may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3c of this license
or (at your option) any later version. This version of this license is
in http://www.latex-project.org/lppl/lppl-1-3c.txt and the latest
version of this license is in http://www.latex-project.org/lppl.txt
and version 1.3 or later is part of all distributions of LaTeX version
2005/12/01 or later.This work has the LPPL maintenance status “maintained”.
The Current Maintainer of this work is Nan Geng.
This package consists of the file hanzibox.dtx,
and the derived files hanzibox.sty,
hanzibox.pdf,
hanzibox.ins,
README.md (this file).