如何使用固定宽度的 fontawesome?

如何使用固定宽度的 fontawesome?

我正在使用 XeLaTeX 和fontawesome包。

这是我的 MWE:

\documentclass[]{article}
\RequirePackage{fontspec}
\RequirePackage{fontawesome}

\begin{document}

\section{\faGraduationCap \textbackslash faGraduationCap}
\section{\faBook \textbackslash faBook}

\faGraduationCap \textbackslash faGraduationCap\par\noindent
\faBook \textbackslash publications

\end{document}

这是裁剪后的结果:

例子

如何获得带有fontawesome图标的固定宽度?我不想每次都手动调整空间,解决方案应该适用于简单文本和内部部分。

编辑:如果我可以在左侧、右侧或居中之间进行选择,那就完美了。

答案1

使用 XeLaTeX 或 LuaLaTeX,诸如的命令\faBook将被转换为\faicon{book},并带有预定义的表;因此,我们要更改的是的操作\faicon,默认情况下为

\newcommand*{\faicon}[1]{{\csname faicon@#1\endcsname}}

只需将其更改为

\renewcommand*{\faicon}[1]{{\makebox[1.5em][c]{\csname faicon@#1\endcsname}}

恐怕您必须根据需要打印的最宽图标来视觉调整固定宽度。

\documentclass{article}
\usepackage{fontspec}
\usepackage{fontawesome}

\renewcommand*{\faicon}[1]{\makebox[1.5em][c]{\csname faicon@#1\endcsname}}

\begin{document}

\section{\faGraduationCap \textbackslash faGraduationCap}
\section{\faBook \textbackslash faBook}

\faGraduationCap \textbackslash faGraduationCap\par\noindent
\faBook \textbackslash publications

\end{document}

在此处输入图片描述

您可以为所有命令添加可选的对齐参数fontawesome。这\ignorespaces使得命令忽略后面的空格(即使存在),因此

\faBook Publications
\faBook[r] Publications

\faBook Publications
\faBook[r]Publications

如果添加可选参数,则无需担心空格。

\documentclass{article}
\usepackage{fontspec}
\usepackage{fontawesome}
\usepackage{xparse}

\RenewDocumentCommand{\faicon}{mO{c}}{%
  \makebox[1.5em][#2]{\csname faicon@#1\endcsname}\ignorespaces
}

\begin{document}

\section{\faGraduationCap \textbackslash faGraduationCap}
\section{\faBook \textbackslash faBook}

\faGraduationCap \textbackslash faGraduationCap\par\noindent
\faBook \textbackslash publications

\noindent
\vrule\faGraduationCap\vrule\faBook\vrule \\
\vrule\faGraduationCap[l]\vrule\faBook[l]\vrule \\
\vrule\faGraduationCap[r]\vrule\faBook[r]\vrule

\end{document}

在此处输入图片描述

答案2

您可以将图标包裹在一个固定宽度的框中。此外,我会为此创建一个新宏,以便稍后轻松更改宽度,例如:

% !TeX program = xelatex
\documentclass{article}
\RequirePackage{fontspec}
\RequirePackage{fontawesome}

\newcommand{\faBox}[1]{%
   \makebox[1.25em][l]{%
      \csname fa#1\endcsname   
   }%
}

\begin{document}

\section{\faGraduationCap \textbackslash faGraduationCap}
\section{\faBook \textbackslash faBook}

\faGraduationCap \textbackslash faGraduationCap\par\noindent
\faBook \textbackslash publications

\section{\faBox{GraduationCap} \textbackslash faGraduationCap}
\section{\faBox{Book} \textbackslash faBook}

\faBox{GraduationCap} \textbackslash faGraduationCap\par\noindent
\faBox{Book} \textbackslash publications

\end{document}

第一个参数\makebox是宽度,第二个(可选)参数是框内的对齐方式(center = default、left 或right),最后一个参数是框的内容,实际上可能比框本身更宽。在这种情况下,它将溢出框。

\csname\endcsname可以用来“构造”一个​​宏名并调用它。

答案3

我之所以回答它只是因为它有一个附加功能。但是,出于一个显而易见的原因,我不会将我的答案标记为已接受。

以下是改进Tobi 的回答。我添加了框内的对齐作为可选参数。

\documentclass[]{article}
\RequirePackage{fontspec}
\RequirePackage{fontawesome}

\newcommand{\faBox}[2][c]{%
   \makebox[1em][#1]{%
      \csname fa#2\endcsname
   }%
}

\begin{document}

\section{No \textbackslash fabox}

\subsection*{\faGraduationCap \textbackslash faGraduationCap}
\subsection*{\faBook \textbackslash faBook}

\faGraduationCap \textbackslash faGraduationCap\par\noindent
\faBook \textbackslash publications

\section{Default \textbackslash fabox}

\subsection*{\faBox{GraduationCap} \textbackslash faGraduationCap}
\subsection*{\faBox{Book} \textbackslash faBook}

\faBox{GraduationCap} \textbackslash faGraduationCap\par\noindent
\faBox{Book} \textbackslash publications

\section{Left \textbackslash fabox}

\subsection*{\faBox[l]{GraduationCap} \textbackslash faGraduationCap}
\subsection*{\faBox[l]{Book} \textbackslash faBook}

\faBox[l]{GraduationCap} \textbackslash faGraduationCap\par\noindent
\faBox[l]{Book} \textbackslash publications

\section{Center (default) \textbackslash box}

\subsection*{\faBox[c]{GraduationCap} \textbackslash faGraduationCap}
\subsection*{\faBox[c]{Book} \textbackslash faBook}

\faBox[c]{GraduationCap} \textbackslash faGraduationCap\par\noindent
\faBox[c]{Book} \textbackslash publications

\section{Right \textbackslash box}

\subsection*{\faBox[r]{GraduationCap} \textbackslash faGraduationCap}
\subsection*{\faBox[r]{Book} \textbackslash faBook}

\faBox[r]{GraduationCap} \textbackslash faGraduationCap\par\noindent
\faBox[r]{Book} \textbackslash publications

\end{document}

这就是结果。

托比

相关内容