想要生成田字格、米字格、帶拼音標準,方便小學生書法和練字。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).