排版和样式 - TikZ 或 pgfplots 图形中字体样式的良好选择?

排版和样式 - TikZ 或 pgfplots 图形中字体样式的良好选择?

在使用 TikZ 和/或 pgfplots 创建图形或图表时,可以输入多个命令来根据自己的喜好格式化文本。

我的问题是:用 TikZ 或 pgfplots 创建的图形中元素的格式化合理的可能性有哪些?

在我的一个旧项目中,我手动编辑了图形/图表中任何数学表达式中的每个字符,使其变为无衬线,这非常令人厌烦。所以我在想:也许有更聪明的方法来做到这一点?也许有不那么复杂的格式决定?

MWE 图片

在此处输入图片描述

MWE 代码

\documentclass[
a4paper
]{scrartcl}

\usepackage{
newtxtext,
tikz,
amsmath,
subcaption,
capt-of
}
\usepackage[T1]{fontenc}

\begin{document}
\begin{center}
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[font=\sffamily\small]
%
\draw[thick] (0,0) rectangle (25mm, 50mm) node[below,xshift=-12.5mm] {All sans.};
%
\filldraw[thick, fill=black] (12.5mm,25mm) coordinate (A) circle (2pt) node[below right=2pt] {A} node[above=10pt, text width=2cm] {Some more text which is needed!};
%
%x
\draw[thick, ->] (A) -- ++(2,0) node[right=2pt] {\(\text{F}_{\text{x}}\)};
%z
\draw[thick, ->] (A) -- ++(0,-1.5) node[below=2pt] {\(\text{F}_{\text{y}}\)};
\end{tikzpicture}
\captionof{figure}{Text Text word.}
\end{minipage}
\hfill
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[font=\small]
%
\draw[thick] (0,0) rectangle (25mm, 50mm) node[below,xshift=-12.5mm] {All serif.};
%
\filldraw[thick, fill=black] (12.5mm,25mm) coordinate (A) circle (2pt) node[below right=2pt] {A} node[above=10pt, text width=2cm] {Some more text which is needed!};
%
%x
\draw[thick, ->] (A) -- ++(2,0) node[right=2pt] {\(\text{F}_{\text{x}}\)};
%z
\draw[thick, ->] (A) -- ++(0,-1.5) node[below=2pt] {\(\text{F}_{\text{y}}\)};
\end{tikzpicture}
\captionof{figure}{And yet another.}
\end{minipage}
\hfill
\begin{minipage}{0.3\textwidth}
\begin{tikzpicture}[font=\small]
%
\draw[thick] (0,0) rectangle (25mm, 50mm) node[below,xshift=-12.5mm] {All serif.};
%
\filldraw[thick, fill=black] (12.5mm,25mm) coordinate (A) circle (2pt) node[below right=2pt] {A} node[above=10pt, text width=2cm] {Some more text which is needed!};
%
%x
\draw[thick, ->] (A) -- ++(2,0) node[right=2pt] {\(F_{x}\)};
%z
\draw[thick, ->] (A) -- ++(0,-1.5) node[below=2pt] {\(F_{y}\)};
\end{tikzpicture}
\captionof{figure}{Word word text.}
\end{minipage}
\end{center}
\end{document}

答案1

您提到您手动将所有数学文字编辑为无衬线文本。我不建议这样做:它违反了政教分离的内容和风格。1如果您想要/需要无衬线数学,请使用无衬线数学字体。它们很少见,而且在字形/符号方面有些有限,但它们确实存在。为了简单起见,我使用了sansmath此处,但在某些情况下确实存在更好的选择。请参阅这些问题的答案,了解一些可能性的示例:

这里的“正确答案”取决于你的领域。你可以参考在我们的聊天中讨论分享了一些关于这个话题的想法。有些领域通常将所有文本和数学信息显示在与衬线正文/数学字体相匹配的图形中,而其他领域则使用无衬线字体显示图形中的文本,而数学字体与正文中的数学字体相同。还有一些人建议在图形中使用无衬线字体显示所有内容(文本和数学)。

我认为最后一个选项是最可疑的,因为同一个公式在图形或正文中呈现时会有所不同。此外,用于特定数学符号的字体会被重载以赋予数学特定含义。如果它在文档中发生变化,这可能会造成混淆,并且可能与用于赋予含义的某些惯例相冲突。

无论如何,正如我所说,哪种风格“适合”您的文档取决于您的领域。查看您所在领域的高质量、受人尊敬的期刊和书籍,以确定最佳选择。


样式可以这样设计,以便日后可以轻松更改,例如,以反映作者不断变化的偏好或与新出版商合作的要求。以下是实现此目的的简单方法:

\documentclass[tikz]{standalone}

\usepackage[EULERGREEK]{sansmath}

\newcommand{\sample}[2][]{%
\begin{tikzpicture}#1
  \node[draw] (A) at (0,0) {Mathematics: $\sum F = m a$};
  \node[draw] (B) at (5,0) {Emphasized text: \emph{text}};
  \draw[->] (A) -- (B) node[midway,above] {$\Phi\phi$};
  \node at (2.5,-1) {#2};
\end{tikzpicture}}

\begin{document}
\sample{Serif text, serif math}

\sample[\sffamily]{Sans text, serif math}

\sample[\sffamily\sansmath]{Sans text, sans math}

\sample{Serif text, serif math}
\end{document}

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

这是一个玩具示例,只是为了快速展示选项。


对于真正的文档,我会使用类似这样的包进行设置floatrow以便将来轻松更改整个文档。例如:

\documentclass{article}

\usepackage{tikz}

\usepackage{floatrow}
\DeclareFloatFont{henry}{\sffamily}
\floatsetup[figure]{font=henry}

\begin{document}
Here is body text.
\begin{figure}[htbp]
\centering
Text in a figure.
\caption{A figure with just text.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
  \node[draw] (A) at (0,0) {Mathematics: $\sum F = m a$};
  \node[draw] (B) at (5,0) {Emphasized text: \emph{text}};
  \draw[->] (A) -- (B) node[midway,above] {$\Phi\phi$};
\end{tikzpicture}
\caption{A figure with a \texttt{tikzpicture}.}
\end{figure}
\end{document}

在此处输入图片描述

或者,在不改变文档主体源的情况下添加无衬线数学:

\documentclass{article}

\usepackage{tikz}

\usepackage[EULERGREEK]{sansmath}
\usepackage{floatrow}
\DeclareFloatFont{henry}{\sffamily\sansmath}
\floatsetup[figure]{font=henry}

\begin{document}
Here is body text.
\begin{figure}[htbp]
\centering
Text in a figure.
\caption{A figure with just text.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
  \node[draw] (A) at (0,0) {Mathematics: $\sum F = m a$};
  \node[draw] (B) at (5,0) {Emphasized text: \emph{text}};
  \draw[->] (A) -- (B) node[midway,above] {$\Phi\phi$};
\end{tikzpicture}
\caption{A figure with a \texttt{tikzpicture}.}
\end{figure}
\end{document}

在此处输入图片描述

为了完整起见,这里有一个pgfplots axis环境:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\usepackage[EULERGREEK]{sansmath}
\usepackage{floatrow}
\DeclareFloatFont{henry}{\sffamily\sansmath}
\floatsetup[figure]{font=henry}

\begin{document}
Here is body text.
\begin{figure}[htbp]
\centering
Text in a figure.
\caption{A figure with just text.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
  \node[draw] (A) at (0,0) {Mathematics: $\sum F = m a$};
  \node[draw] (B) at (5,0) {Emphasized text: \emph{text}};
  \draw[->] (A) -- (B) node[midway,above] {$\Phi\phi$};
\end{tikzpicture}
\caption{A figure with a \texttt{tikzpicture}.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\begin{axis}[xlabel={Abscissa, $x$}, ylabel={Ordinate, $y$}]
  \addplot {x^2};
\end{axis}
\end{tikzpicture}
\caption{A figure with a \texttt{pgfplots} axis.}
\end{figure}
\end{document}

在此处输入图片描述


总结

因此,底线是:无论你认为哪种风格最适合你的工作/领域,都要以一种将内容与风格分开的方式来实现它。这样,如果你改变主意,或者将来需要与对风格有不同想法的人/出版商合作,你就可以灵活应对。

floatrow软件包提供了很好的方法来实现这一点,或者,如果floatrow由于某种原因您无法使用,您可以自己对环境进行修补。还请注意,某些类可能内置了此功能。如果是这种情况,请使用类的内置功能以获得更好的兼容性。对于 KOMA-Script 类,没有提供内置功能,但进行了floatrow修改以兼容该类提供的一些其他工具。因此,使用以下样式设置浮动floatrow仍然按预期工作:

\documentclass{scrartcl}

\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\usepackage[EULERGREEK]{sansmath}
\usepackage{floatrow}
\DeclareFloatFont{henry}{\sffamily\sansmath}
\floatsetup[figure]{font=henry}

\begin{document}
Here is body text.
\begin{figure}[htbp]
\centering
Text in a figure.
\caption{A figure with just text.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
  \node[draw] (A) at (0,0) {Mathematics: $\sum F = m a$};
  \node[draw] (B) at (5,0) {Emphasized text: \emph{text}};
  \draw[->] (A) -- (B) node[midway,above] {$\Phi\phi$};
\end{tikzpicture}
\caption{A figure with a \texttt{tikzpicture}.}
\end{figure}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\begin{axis}[xlabel={Abscissa, $x$}, ylabel={Ordinate, $y$}]
  \addplot {x^2};
\end{axis}
\end{tikzpicture}
\caption{A figure with a \texttt{pgfplots} axis.}
\end{figure}
\end{document}

在此处输入图片描述


1是的,我知道,我们有时都会这样做(我也是),但这个例子特别极端,而且对一份文件的影响是巨大的。

相关内容