
1. LaTeX 中劃鉤與打叉的常見需求場(chǎng)景寫論文、做技術(shù)報(bào)告、整理審稿意見的時(shí)候經(jīng)常需要在文檔里標(biāo)記“對(duì)”和“錯(cuò)”。比如一份實(shí)驗(yàn)記錄表某些條目通過了驗(yàn)證某些條目失敗了又比如一份檢查清單需要逐項(xiàng)確認(rèn)是否完成。這種場(chǎng)景下用 LaTeX 排版時(shí)怎么優(yōu)雅地打出勾號(hào)和叉號(hào)就成了一個(gè)很實(shí)際的問題。很多人第一反應(yīng)是直接復(fù)制粘貼 Unicode 字符 ? 和 ?。這個(gè)做法在純文本編輯器里看著沒問題但到了 LaTeX 里尤其是用 pdfLaTeX 編譯的時(shí)候大概率會(huì)報(bào)錯(cuò)或者顯示成空白方塊。原因很簡(jiǎn)單pdfLaTeX 默認(rèn)的字體編碼不包含這些符號(hào)的字形。你看到的“亂碼”不是 LaTeX 的 bug而是字體本身就沒有這個(gè)字符。所以LaTeX 里劃鉤打叉這件事核心要解決的是符號(hào)來源和編譯引擎兼容性兩個(gè)問題。不同的方案適用于不同的使用場(chǎng)景選錯(cuò)了方案輕則符號(hào)顯示不出來重則整個(gè)文檔編譯失敗。這篇文章面向的是已經(jīng)會(huì)用 LaTeX 寫基本文檔、但遇到符號(hào)問題時(shí)不知道從哪下手的人。不管你是寫學(xué)術(shù)論文、做項(xiàng)目報(bào)告還是整理個(gè)人筆記下面這些方法都能直接拿去用。我會(huì)把每種方案的適用條件、具體操作、踩坑經(jīng)驗(yàn)都講清楚讓你看完就能動(dòng)手。2. 方案選型五種主流做法及其適用條件2.1 方案對(duì)比與選擇邏輯在 LaTeX 里實(shí)現(xiàn)勾號(hào)和叉號(hào)目前主流的路子有這么幾條用amssymb宏包提供的數(shù)學(xué)符號(hào)、用pifont宏包的 dingbat 字符、用fontawesome5宏包、用 TikZ 手繪、以及直接插入圖片。每條路都有自己的脾氣選哪個(gè)取決于你的編譯引擎、文檔類型和對(duì)符號(hào)外觀的要求。先看一張對(duì)比表心里有個(gè)底方案依賴宏包編譯引擎要求符號(hào)外觀適用場(chǎng)景amssymb數(shù)學(xué)符號(hào)amssymb無特殊要求數(shù)學(xué)風(fēng)格偏細(xì)學(xué)術(shù)論文、公式環(huán)境pifontdingbatpifont無特殊要求裝飾性較粗表格、清單fontawesome5fontawesome5XeLaTeX/LuaLaTeX 最佳圖標(biāo)風(fēng)格現(xiàn)代報(bào)告、演示文稿TikZ 手繪tikz無特殊要求完全自定義需要特殊樣式時(shí)圖片插入graphicx無特殊要求取決于圖片特殊需求選擇的核心邏輯是這樣的如果你用的是 pdfLaTeX優(yōu)先考慮amssymb和pifont這兩個(gè)最穩(wěn)。如果你用 XeLaTeX 或 LuaLaTeXfontawesome5可以放心用符號(hào)樣式也更好看。TikZ 方案最靈活但代碼量最大適合對(duì)符號(hào)外觀有精確控制需求的情況。圖片方案一般不推薦除非你有現(xiàn)成的矢量圖且不想折騰代碼。2.2 為什么 pdfLaTeX 下 Unicode 字符不靠譜這里得單獨(dú)說一下為什么不能直接打 Unicode 字符。pdfLaTeX 處理字符的方式是查字體表默認(rèn)的 Computer Modern 字體里根本沒有 ?U2713和 ?U2717這兩個(gè)碼位。你打進(jìn)去它就當(dāng)不認(rèn)識(shí)要么報(bào)Missing character警告要么直接輸出一個(gè)空白。有人會(huì)說那我用inputenc宏包聲明 UTF-8 不就行了不行。inputenc解決的是“輸入編碼”問題它告訴 LaTeX 你寫的字節(jié)序列對(duì)應(yīng)哪個(gè) Unicode 碼位但字體里有沒有這個(gè)碼位的字形是另一回事。這就像你告訴別人一個(gè)地址但那個(gè)地址根本沒有房子結(jié)果還是一樣的。XeLaTeX 和 LuaLaTeX 在這方面就好很多它們直接支持 Unicode配合系統(tǒng)字體可以顯示大部分符號(hào)。但即便如此不同字體對(duì)符號(hào)的支持程度也不一樣不是所有字體都有勾號(hào)和叉號(hào)。所以最穩(wěn)妥的做法還是用專門的宏包來生成這些符號(hào)。3. 基于 amssymb 的數(shù)學(xué)符號(hào)方案3.1 基本用法與代碼示例amssymb是美國(guó)數(shù)學(xué)學(xué)會(huì)提供的符號(hào)宏包里面包含了大量數(shù)學(xué)符號(hào)其中就有勾號(hào)和叉號(hào)。用法非常簡(jiǎn)單\documentclass{article} \usepackage{amssymb} \begin{document} 勾號(hào)\(\checkmark\) \\ 叉號(hào)\(\times\) \\ 粗叉號(hào)\(\boldsymbol{\times}\) \end{document}\checkmark輸出的是一個(gè)帶勾的符號(hào)\times輸出的是乘號(hào)在標(biāo)記場(chǎng)景下可以當(dāng)叉號(hào)用。如果你覺得\times太細(xì)可以配合\boldsymbol加粗但需要amsmath宏包支持。這個(gè)方案最大的好處是不需要任何特殊編譯引擎pdfLaTeX 直接就能編譯符號(hào)也能正常顯示。而且amssymb幾乎是所有數(shù)學(xué)文檔的標(biāo)配你大概率已經(jīng)在用了不需要額外引入新依賴。3.2 數(shù)學(xué)符號(hào)方案的局限與應(yīng)對(duì)\checkmark的樣式偏數(shù)學(xué)化線條比較細(xì)放在表格里做標(biāo)記的時(shí)候視覺沖擊力不夠強(qiáng)。如果你想要更醒目的效果可以配合顏色宏包xcolor來加色\usepackage{amssymb} \usepackage{xcolor} \newcommand{\yes}{\textcolor{green}{\checkmark}} \newcommand{\no}{\textcolor{red}{\(\times\)}}這樣在表格里用\yes和\no就能得到綠色勾和紅色叉辨識(shí)度立刻上來了。還有一個(gè)問題是\checkmark在有些字體下大小不太協(xié)調(diào)跟周圍文字對(duì)不齊。這時(shí)候可以用\raisebox微調(diào)位置\newcommand{\yes}{\raisebox{0.1ex}{\checkmark}}0.1ex這個(gè)值需要根據(jù)實(shí)際效果微調(diào)一般上下浮動(dòng)0.05ex到0.2ex之間就能找到合適的對(duì)齊位置。注意\checkmark在amssymb里的定義依賴amsfonts如果你只加載了amssymb但沒加載amsfonts可能會(huì)報(bào)錯(cuò)。不過現(xiàn)代 TeX 發(fā)行版里amssymb會(huì)自動(dòng)加載amsfonts一般不用手動(dòng)加。4. 基于 pifont 的 dingbat 符號(hào)方案4.1 pifont 的基本用法pifont宏包提供了一套 dingbat 字符也就是裝飾性符號(hào)。它的用法跟amssymb不太一樣需要用\ding{編號(hào)}來調(diào)用。勾號(hào)和叉號(hào)的編號(hào)分別是 51 和 55\documentclass{article} \usepackage{pifont} \begin{document} 勾號(hào)\ding{51} \\ 叉號(hào)\ding{55} \end{document}\ding{51}輸出的是一個(gè)粗體的勾號(hào)\ding{55}輸出的是一個(gè)粗體的叉號(hào)。這兩個(gè)符號(hào)的線條比amssymb的版本粗不少放在表格里非常醒目。pifont同樣不需要特殊編譯引擎pdfLaTeX 直接支持。而且它提供的符號(hào)種類很多除了勾和叉還有箭頭、星星、圓圈等做檢查清單的時(shí)候可以搭配使用。4.2 在表格中批量使用 pifont實(shí)際項(xiàng)目里最常見的場(chǎng)景是在表格里批量標(biāo)記。下面是一個(gè)完整的例子\documentclass{article} \usepackage{pifont} \usepackage{xcolor} \newcommand{\cmark}{\textcolor{green!70!black}{\ding{51}}} \newcommand{\xmark}{\textcolor{red!70!black}{\ding{55}}} \begin{document} \begin{tabular}{lcc} \hline 檢查項(xiàng) 結(jié)果 備注 \\ \hline 數(shù)據(jù)完整性 \cmark 通過 \\ 格式規(guī)范性 \cmark 通過 \\ 引用準(zhǔn)確性 \xmark 需修正 \\ 圖表清晰度 \cmark 通過 \\ \hline \end{tabular} \end{document}這里用了green!70!black和red!70!black這種顏色混合寫法目的是讓顏色不那么刺眼打印出來也清晰。純綠色和純紅色在屏幕上看著還行但打印成黑白之后對(duì)比度可能不夠混一點(diǎn)黑色進(jìn)去會(huì)好很多。4.3 pifont 的注意事項(xiàng)pifont的\ding命令生成的符號(hào)是文本模式下的不能直接在數(shù)學(xué)環(huán)境里用。如果你需要在公式里打勾得用\text{}包起來或者改用amssymb的方案。另外\ding{51}和\ding{55}在不同字體下的外觀可能有細(xì)微差異但整體風(fēng)格是一致的。如果你發(fā)現(xiàn)符號(hào)大小跟周圍文字不匹配可以用\scalebox調(diào)整\usepackage{graphicx} \newcommand{\cmark}{\scalebox{1.2}{\ding{51}}}1.2是縮放比例根據(jù)實(shí)際需要調(diào)整就行。提示pifont的符號(hào)在 beamer 幻燈片里表現(xiàn)也很好做演示文稿的時(shí)候可以直接用不需要額外調(diào)整。5. 基于 fontawesome5 的現(xiàn)代圖標(biāo)方案5.1 fontawesome5 的安裝與基本用法fontawesome5是一個(gè)圖標(biāo)字體宏包提供了大量現(xiàn)代風(fēng)格的圖標(biāo)其中就包括勾號(hào)和叉號(hào)。它的用法跟前面兩個(gè)方案差別比較大需要先加載宏包然后用\faCheck和\faTimes來調(diào)用\documentclass{article} \usepackage{fontawesome5} \begin{document} 勾號(hào)\faCheck \\ 叉號(hào)\faTimes \\ 圓圈勾號(hào)\faCheckCircle \\ 圓圈叉號(hào)\faTimesCircle \end{document}fontawesome5提供了多種樣式的勾號(hào)和叉號(hào)有實(shí)心的、空心的、帶圓圈的、帶方框的選擇余地很大。而且圖標(biāo)風(fēng)格統(tǒng)一做出來的文檔看起來很現(xiàn)代。5.2 編譯引擎的坑與解決方案fontawesome5最大的問題是對(duì)編譯引擎有要求。它底層依賴fontspec宏包而fontspec只能在 XeLaTeX 或 LuaLaTeX 下工作。如果你用 pdfLaTeX 編譯會(huì)直接報(bào)錯(cuò)。所以用這個(gè)方案之前先確認(rèn)你的編譯引擎。如果你在 Overleaf 上可以在項(xiàng)目設(shè)置里把編譯器改成 XeLaTeX 或 LuaLaTeX。如果你在本地用 TeX Live 或 MiKTeX命令行編譯時(shí)加-xelatex或-lualatex參數(shù)。有人會(huì)問那我能不能在 pdfLaTeX 下用fontawesome5答案是不能。fontawesome5的文檔里寫得很清楚它只支持 Unicode 引擎。如果你必須用 pdfLaTeX就老老實(shí)實(shí)回到amssymb或pifont方案。5.3 fontawesome5 在表格中的實(shí)戰(zhàn)配置下面是一個(gè)在 XeLaTeX 下用fontawesome5做檢查表的完整例子\documentclass{article} \usepackage{fontawesome5} \usepackage{xcolor} \usepackage{booktabs} \newcommand{\yes}{\textcolor{green!60!black}{\faCheckCircle}} \newcommand{\no}{\textcolor{red!60!black}{\faTimesCircle}} \begin{document} \begin{tabular}{lc} \toprule 項(xiàng)目 狀態(tài) \\ \midrule 需求分析 \yes \\ 架構(gòu)設(shè)計(jì) \yes \\ 編碼實(shí)現(xiàn) \yes \\ 單元測(cè)試 \no \\ 集成測(cè)試 \no \\ \bottomrule \end{tabular} \end{document}booktabs宏包提供的\toprule、\midrule、\bottomrule比默認(rèn)的\hline好看很多做正式報(bào)告的時(shí)候建議用上。注意fontawesome5的圖標(biāo)默認(rèn)是文本模式如果在數(shù)學(xué)環(huán)境里用需要\text{}包裹。另外圖標(biāo)的顏色默認(rèn)繼承當(dāng)前文字顏色用\textcolor可以單獨(dú)設(shè)置。6. TikZ 手繪方案完全自定義勾和叉6.1 為什么要用 TikZ 畫勾和叉前面三種方案都是“拿來主義”用現(xiàn)成的符號(hào)。但有時(shí)候現(xiàn)成符號(hào)滿足不了需求比如你想要一個(gè)特定粗細(xì)、特定角度、特定顏色的勾號(hào)或者想要勾和叉之間有動(dòng)畫效果的過渡在 beamer 里這時(shí)候就得自己畫。TikZ 是 LaTeX 里最強(qiáng)大的繪圖工具畫一個(gè)勾號(hào)或者叉號(hào)對(duì)它來說是小菜一碟。而且 TikZ 畫的符號(hào)是矢量圖形放大縮小都不會(huì)失真打印質(zhì)量極高。6.2 用 TikZ 畫勾號(hào)的完整代碼下面是一個(gè)畫勾號(hào)的例子\documentclass{article} \usepackage{tikz} \newcommand{\tikzcheck}{% \begin{tikzpicture}[scale0.3,baseline0.1ex] \draw[line width2pt,green!60!black,line capround,line joinround] (0,0.5) -- (0.5,0) -- (1.5,1.2); \end{tikzpicture}% } \begin{document} 這是一個(gè)勾號(hào)\tikzcheck \end{document}這段代碼的邏輯是定義三個(gè)點(diǎn)(0,0.5)是勾號(hào)的起點(diǎn)(0.5,0)是轉(zhuǎn)折點(diǎn)(1.5,1.2)是終點(diǎn)。用\draw連接這三個(gè)點(diǎn)設(shè)置線寬2pt、顏色green!60!black、線帽round、線接頭round就得到了一個(gè)圓潤(rùn)的勾號(hào)。scale0.3控制整體大小baseline0.1ex控制跟周圍文字的對(duì)齊。這兩個(gè)參數(shù)需要根據(jù)實(shí)際效果微調(diào)。6.3 用 TikZ 畫叉號(hào)的完整代碼叉號(hào)更簡(jiǎn)單兩條交叉的線就行\(zhòng)newcommand{\tikzxmark}{% \begin{tikzpicture}[scale0.3,baseline0.1ex] \draw[line width2pt,red!60!black,line capround] (0,0) -- (1,1); \draw[line width2pt,red!60!black,line capround] (0,1) -- (1,0); \end{tikzpicture}% }兩條線分別從(0,0)到(1,1)和從(0,1)到(1,0)交叉點(diǎn)自然形成叉號(hào)。線寬和顏色跟勾號(hào)保持一致視覺上統(tǒng)一。6.4 TikZ 方案的優(yōu)缺點(diǎn)與適用建議TikZ 方案最大的優(yōu)點(diǎn)是完全可控。線寬、顏色、角度、大小、對(duì)齊方式全都可以精確調(diào)整。而且不依賴任何特殊字體或編譯引擎pdfLaTeX 直接就能用。缺點(diǎn)也很明顯代碼量大每個(gè)符號(hào)都要寫一段 TikZ 代碼。如果文檔里只有幾個(gè)勾和叉還能接受如果要批量使用代碼會(huì)顯得很臃腫。這時(shí)候可以把 TikZ 代碼封裝成命令像前面那樣定義\tikzcheck和\tikzxmark用的時(shí)候直接調(diào)用就清爽多了。提示TikZ 畫的符號(hào)在 beamer 里可以配合\only或\onslide做出現(xiàn)動(dòng)畫效果很好。比如先顯示問題再顯示叉號(hào)最后顯示勾號(hào)引導(dǎo)觀眾注意力。7. 常見問題與排查技巧實(shí)錄7.1 符號(hào)顯示為空白或方塊的排查思路這是最常見的問題。符號(hào)打出來了編譯也不報(bào)錯(cuò)但 PDF 里就是看不到或者顯示成一個(gè)空心方塊。排查步驟是這樣的第一步確認(rèn)編譯引擎。如果你用的是 pdfLaTeX檢查是否加載了正確的宏包。amssymb和pifont在 pdfLaTeX 下都能正常工作fontawesome5則必須用 XeLaTeX 或 LuaLaTeX。第二步檢查宏包加載順序。有些宏包之間有沖突比如pifont和某些符號(hào)宏包同時(shí)加載時(shí)可能會(huì)覆蓋彼此的定義。把pifont放在靠后的位置通常能解決問題。第三步查看編譯日志。pdfLaTeX 遇到不認(rèn)識(shí)的字符時(shí)會(huì)輸出Missing character警告在日志里搜索這個(gè)關(guān)鍵詞能快速定位是哪個(gè)字符出了問題。第四步如果以上都沒問題嘗試換一個(gè)方案。比如amssymb的\checkmark顯示不出來換成pifont的\ding{51}試試。不同宏包對(duì)字體的依賴不同換一個(gè)可能就好了。7.2 符號(hào)大小與文字不匹配的調(diào)整方法勾號(hào)和叉號(hào)的大小跟周圍文字不協(xié)調(diào)是很常見的視覺問題。調(diào)整方法取決于你用的方案amssymb方案用\raisebox調(diào)整垂直位置用\scalebox調(diào)整大小。pifont方案用\scalebox調(diào)整大小用\raisebox調(diào)整位置。fontawesome5方案用\fontsize配合\selectfont調(diào)整大小或者用\scalebox。TikZ 方案直接改scale參數(shù)和baseline參數(shù)。下面是一個(gè)通用的調(diào)整示例\usepackage{graphicx} \newcommand{\yes}{\raisebox{-0.1ex}{\scalebox{1.1}{\ding{51}}}} \newcommand{\no}{\raisebox{-0.1ex}{\scalebox{1.1}{\ding{55}}}}\raisebox{-0.1ex}把符號(hào)往下移一點(diǎn)\scalebox{1.1}把符號(hào)放大 10%。這兩個(gè)值需要根據(jù)實(shí)際字體大小微調(diào)沒有萬能參數(shù)。7.3 在表格中批量標(biāo)記時(shí)的對(duì)齊問題表格里批量放勾和叉最容易出現(xiàn)的問題是列寬不一致、符號(hào)對(duì)不齊。解決方法是用固定寬度的列比如c列配合\makebox\begin{tabular}{l{\centering\arraybackslash}m{1cm}c} \hline 項(xiàng)目 狀態(tài) 備注 \\ \hline 需求分析 \yes 完成 \\ 架構(gòu)設(shè)計(jì) \yes 完成 \\ 編碼實(shí)現(xiàn) \no 進(jìn)行中 \\ \hline \end{tabular}{\centering\arraybackslash}m{1cm}定義了一個(gè)寬度固定為 1cm、內(nèi)容居中的列。這樣不管符號(hào)本身多寬列寬都是固定的表格看起來整齊。如果表格里勾和叉混用建議把符號(hào)命令統(tǒng)一封裝確保大小和顏色一致。不要一會(huì)兒用\checkmark一會(huì)兒用\ding{51}那樣視覺上會(huì)很亂。7.4 常見問題速查表問題現(xiàn)象可能原因解決方法符號(hào)顯示為空白字體缺少字形換用pifont或 TikZ 方案符號(hào)顯示為方塊編碼不匹配確認(rèn)宏包加載正確檢查編譯引擎編譯報(bào)錯(cuò)Missing characterpdfLaTeX 不支持該字符改用amssymb或pifontfontawesome5報(bào)錯(cuò)編譯引擎不是 XeLaTeX/LuaLaTeX切換編譯引擎符號(hào)太大或太小默認(rèn)大小不合適用\scalebox調(diào)整符號(hào)跟文字不對(duì)齊基線位置偏差用\raisebox微調(diào)表格中符號(hào)不對(duì)齊列寬不固定用m{寬度}定義固定列寬顏色打印后看不清顏色對(duì)比度不夠用green!70!black等混合色提示遇到問題時(shí)先看編譯日志再換方案最后調(diào)參數(shù)。這個(gè)順序能幫你快速定位問題避免在錯(cuò)誤的方向上浪費(fèi)時(shí)間。8. 實(shí)操心得與避坑經(jīng)驗(yàn)8.1 宏包沖突的預(yù)防與處理pifont和amssymb同時(shí)加載時(shí)一般不會(huì)直接沖突但如果你還加載了其他符號(hào)宏包比如bbding或wasysym就可能出現(xiàn)命令重定義的問題。癥狀是編譯時(shí)報(bào)Command \ding already defined之類的錯(cuò)誤。解決辦法有兩個(gè)一是用\let命令重命名沖突的命令二是調(diào)整宏包加載順序。更穩(wěn)妥的做法是只加載你真正需要的宏包不要一股腦全加上。比如你只需要勾和叉pifont就夠了不需要再加載bbding。8.2 顏色選擇的實(shí)戰(zhàn)建議勾和叉的顏色選擇不只是好看的問題還涉及打印效果和色盲友好性。純綠色和純紅色在色盲用戶眼里可能難以區(qū)分建議用green!70!black和red!70!black這種混合色或者用藍(lán)色和橙色代替綠色和紅色。另外如果文檔需要打印成黑白顏色就完全失效了。這時(shí)候可以靠形狀區(qū)分勾號(hào)用\ding{51}叉號(hào)用\ding{55}形狀差異足夠明顯黑白打印也能分辨。8.3 在 beamer 中使用的特殊注意事項(xiàng)beamer 幻燈片里用勾和叉跟普通文檔差不多但有幾個(gè)地方要注意。beamer 默認(rèn)會(huì)覆蓋一些命令的定義如果你在導(dǎo)言區(qū)定義了\yes和\no在 beamer 里可能需要重新定義或者用\newcommand而不是\renewcommand。另外beamer 的\only和\onslide命令可以讓勾和叉分步出現(xiàn)做演示的時(shí)候效果很好。比如先顯示問題列表再逐個(gè)顯示勾和叉引導(dǎo)觀眾跟著你的節(jié)奏走。8.4 批量替換的實(shí)用技巧如果你已經(jīng)寫了一篇文檔里面用了 Unicode 的 ? 和 ?現(xiàn)在想批量替換成 LaTeX 命令可以用編輯器的查找替換功能。把?替換成\yes把?替換成\no然后在導(dǎo)言區(qū)定義這兩個(gè)命令就行。但要注意替換之前先確認(rèn)文檔里沒有其他地方用到這兩個(gè)字符。如果有替換后會(huì)出錯(cuò)。建議先備份再替換替換后編譯一遍確認(rèn)沒問題再繼續(xù)。注意批量替換時(shí)如果文檔里有\(zhòng)verb或lstlisting環(huán)境里面的內(nèi)容不應(yīng)該被替換。大多數(shù)編輯器的查找替換功能都支持排除特定區(qū)域用之前先看一下編輯器的文檔。8.5 符號(hào)在 PDF 書簽和目錄中的表現(xiàn)勾號(hào)和叉號(hào)如果出現(xiàn)在章節(jié)標(biāo)題里會(huì)影響到 PDF 書簽和目錄的顯示。因?yàn)闀灪湍夸浻玫氖羌兾谋静恢С?LaTeX 命令。如果你在\section{}里用了\ding{51}書簽里可能會(huì)顯示成亂碼或者空白。解決辦法是用\texorpdfstring命令給 PDF 書簽提供一個(gè)純文本替代\section{檢查結(jié)果\texorpdfstring{\ding{51}}{[通過]}}這樣在正文里顯示勾號(hào)在書簽里顯示[通過]兩邊都正常。8.6 跨平臺(tái)兼容性的最后檢查如果你把 LaTeX 源碼發(fā)給別人對(duì)方用的編譯引擎可能跟你不一樣。為了確保兼容性建議在文檔開頭加一個(gè)引擎檢查\usepackage{iftex} \ifPDFTeX \usepackage{pifont} \newcommand{\yes}{\ding{51}} \newcommand{\no}{\ding{55}} \else \usepackage{fontawesome5} \newcommand{\yes}{\faCheck} \newcommand{\no}{\faTimes} \fiiftex宏包可以檢測(cè)當(dāng)前使用的編譯引擎然后根據(jù)引擎加載不同的宏包和定義不同的命令。這樣不管對(duì)方用 pdfLaTeX 還是 XeLaTeX文檔都能正常編譯。這個(gè)技巧在合作寫論文的時(shí)候特別有用因?yàn)槟悴恢篮献髡哂檬裁匆婕右欢我鏅z查能省去很多來回溝通的成本。8.7 我個(gè)人在實(shí)際操作中的體會(huì)我最早用的是amssymb的\checkmark后來發(fā)現(xiàn)它在表格里太細(xì)不夠醒目就換成了pifont的\ding{51}。再后來做演示文稿發(fā)現(xiàn)fontawesome5的圖標(biāo)風(fēng)格更現(xiàn)代又換了一次。折騰了幾輪之后我的經(jīng)驗(yàn)是不要追求一個(gè)方案打天下根據(jù)場(chǎng)景選方案才是正道。學(xué)術(shù)論文用amssymb因?yàn)閿?shù)學(xué)符號(hào)風(fēng)格統(tǒng)一技術(shù)報(bào)告用pifont因?yàn)榇煮w符號(hào)醒目演示文稿用fontawesome5因?yàn)閳D標(biāo)好看特殊需求用 TikZ因?yàn)橥耆煽?。每個(gè)方案都有它的位置關(guān)鍵是知道什么時(shí)候用哪個(gè)。還有一個(gè)教訓(xùn)是盡早確定方案不要中途換。我有一篇文檔寫到一半從amssymb換到pifont結(jié)果所有表格里的符號(hào)都要重新調(diào)整大小和對(duì)齊白白浪費(fèi)了一個(gè)下午。如果一開始就選好方案后面就不用返工了。最后再分享一個(gè)小技巧如果你經(jīng)常需要在文檔里打勾和叉可以建一個(gè)自己的宏包文件把所有符號(hào)定義都放進(jìn)去以后每個(gè)文檔只需要\usepackage{mycheckmarks}就行。這樣既統(tǒng)一了風(fēng)格又省去了重復(fù)定義的麻煩。宏包文件里可以同時(shí)包含多種方案的定義用的時(shí)候根據(jù)編譯引擎自動(dòng)切換一勞永逸。