4

I am trying to follow this example to change the font in a table. It's a partial solution for the code below. I just can't get the values to change fonts, too.

\documentclass{article}

\usepackage{booktabs}
\usepackage{etoolbox}
\usepackage[format=plain,
  labelformat=simple,
  font={small,sf,bf},
  indention=0cm,
  labelsep=period,
  justification=centering,
  singlelinecheck=true,
  tableposition=top,
  figureposition=bottom]{caption}

\makeatletter
\appto\@floatboxreset{%
  \ifx\@captype\andy@table
    \ttfamily
  \fi
}
\def\andy@table{table}
\makeatother

\begin{document}

Blah blah. Should be a serif font.


\begin{table}
\caption{My title}
\begin{center}
\begin{tabular}{l c c c }
\hline
 & treat x time & treat x time x female & treat x time x female \\
\hline
(Intercept)                         & $-0.03$           & $0.01$           & $-0.83^{*}$       \\
                                    & $[-0.16;\ 0.10]$  & $[-0.13;\ 0.15]$ & $[-0.93;\ -0.73]$ \\
v1                            & $-0.06$           & $-0.06$          & $-0.07$           \\
                                    & $[-0.23;\ 0.11]$  & $[-0.23;\ 0.11]$ & $[-0.18;\ 0.05]$  \\
v2                              & $0.05$            & $-0.03$          &                   \\
                                    & $[-0.04;\ 0.15]$  & $[-0.16;\ 0.11]$ &                   \\
\hline
\multicolumn{4}{l}{\scriptsize{$^*$ 0 outside the confidence interval. Fixed effect of time treated as factor.}}
\end{tabular}
\label{m123}
\end{center}
\end{table}

Blah blah. Should be a serif font.

\end{document}

enter image description here

Werner
  • 603,163

2 Answers2

2

Just remove $ where unneeded (that is, almost everywhere).

\documentclass{article}

\usepackage{booktabs}
\usepackage{etoolbox}
\usepackage[format=plain,
  labelformat=simple,
  font={small,sf,bf},
  indention=0cm,
  labelsep=period,
  justification=centering,
  singlelinecheck=true,
  tableposition=top,
  figureposition=bottom,
]{caption}

\makeatletter
\appto\@floatboxreset{%
  \ifx\@captype\andy@table
    \ttfamily
  \fi
}
\def\andy@table{table}
\makeatother

\begin{document}

Blah blah. Should be a serif font.

\begin{table}
\centering

\caption{My title}\label{m123}

% fix the overfull
\small\addtolength{\tabcolsep}{-2pt}

\begin{tabular}{ l c c c }
\hline
 & treat x time & treat x time x female & treat x time x female \\
\hline
(Intercept) & -0.03         & 0.01          & -0.83$^{*}$    \\
            & [-0.16; 0.10] & [-0.13; 0.15] & [-0.93; -0.73] \\
v1          & -0.06         & -0.06         & -0.07          \\
            & [-0.23; 0.11] & [-0.23; 0.11] & [-0.18; 0.05]  \\
v2          & 0.05          & -0.03         &                \\
            & [-0.04; 0.15] & [-0.16; 0.11] &                \\
\hline
\multicolumn{4}{l}{%
  \scriptsize $^*$ 0 outside the confidence interval. Fixed effect of time treated as factor.%
}
\end{tabular}

\end{table}

Blah blah. Should be a serif font.

\end{document}

enter image description here

Some further notes.

  1. Place the \label next to the object it refers to, in this case the \caption

  2. \scriptsize does not take an argument.

  3. Don't use center in a table environment, but \centering.


If you don't want to touch the table as generated by the external program, it's a bit more difficult.

\documentclass{article}

\usepackage{booktabs}
\usepackage{etoolbox}
\usepackage[format=plain,
  labelformat=simple,
  font={small,sf,bf},
  indention=0cm,
  labelsep=period,
  justification=centering,
  singlelinecheck=true,
  tableposition=top,
  figureposition=bottom]{caption}

\makeatletter
\appto\@floatboxreset{%
  \ifx\@captype\andy@table
    \ttfamily
    \everymath{\fam=\group@mathtt\relax\andy@changemathcodes}%
  \fi
}
\def\andy@table{table}
\let\andy@space\ %
\AtBeginDocument{%
  \check@mathfonts
  \sbox\z@{$\mathtt{\xdef\group@mathtt{\gdef\noexpand\group@mathtt{\the\fam}}\group@mathtt}$}%
  \def\andy@changemathcodes{%
    \count@="2\group@mathtt00 \advance\count@`-\mathcode`-=\count@
    \count@="4\group@mathtt00 \advance\count@`[\mathcode`[=\count@
    \count@="5\group@mathtt00 \advance\count@`]\mathcode`]=\count@
    \count@="0\group@mathtt00 \advance\count@`;\mathcode`;=\count@
    \def\ {\mathopen{\andy@space}}%
  }%
}
\makeatother

\begin{document}


Blah blah. Should be a serif font; here's math: $a+b$

\begin{table}
\centering

\caption{With dollars}

% fix the overfull
\small\addtolength{\tabcolsep}{-2pt}

\begin{tabular}{ l c c c }
\hline
& treat x time & treat x time x female & treat x time x female       \\
\hline
(Intercept) & $-0.03$          & $0.01$           & $-0.83^{*}$       \\
            & $[-0.16;\ 0.10]$ & $[-0.13;\ 0.15]$ & $[-0.93;\ -0.73]$ \\
v1          & $-0.06$          & $-0.06$          & $-0.07$           \\
            & $[-0.23;\ 0.11]$ & $[-0.23;\ 0.11]$ & $[-0.18;\ 0.05]$  \\
v2          & $0.05$           & $-0.03$          &                   \\
            & $[-0.04;\ 0.15]$ & $[-0.16;\ 0.11]$ &                   \\
\hline
\multicolumn{4}{l}{%
  \scriptsize$^*$ 0 outside the confidence interval. Fixed effect of time treated as factor.%
}
\end{tabular}

\end{table}



\begin{table}[htp]
\centering

\caption{My title}\label{m123}

% fix the overfull
\small\addtolength{\tabcolsep}{-2pt}

\begin{tabular}{ l c c c }
\hline
 & treat x time & treat x time x female & treat x time x female \\
\hline
(Intercept) & -0.03         & 0.01          & -0.83$^{*}$    \\
            & [-0.16; 0.10] & [-0.13; 0.15] & [-0.93; -0.73] \\
v1          & -0.06         & -0.06         & -0.07          \\
            & [-0.23; 0.11] & [-0.23; 0.11] & [-0.18; 0.05]  \\
v2          & 0.05          & -0.03         &                \\
            & [-0.04; 0.15] & [-0.16; 0.11] &                \\
\hline
\multicolumn{4}{l}{%
  \scriptsize $^*$ 0 outside the confidence interval. Fixed effect of time treated as factor.%
}
\end{tabular}

\end{table}

Blah blah. Should be a serif font; here's math: $a+b$.

\end{document}

As you see, the output is the same.

enter image description here

egreg
  • 1,121,712
0

This utilizes Can I change all math output to use monospaced text? to add the appropriate \everymath command to your \@floatboxreset patch:

enter image description here

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\appto\@floatboxreset{%
  \ifx\@captype\andy@table
    \ttfamily
    % https://tex.stackexchange.com/q/119879/5764
    \everymath{\mathtt{\xdef\tmp{\fam\the\fam\relax}\aftergroup\tmp}}% 
  \fi
}
\def\andy@table{table}
\makeatother

\begin{document}

\begin{table}
  \begin{tabular}{ l *{3}{c} }
    \hline
     & treat x time & treat x time x female & treat x time x female       \\
    \hline
    (Intercept) & $-0.03$          & $0.01$           & $-0.83^{*}$       \\
                & $[-0.16;\ 0.10]$ & $[-0.13;\ 0.15]$ & $[-0.93;\ -0.73]$ \\
    v1          & $-0.06$          & $-0.06$          & $-0.07$           \\
                & $[-0.23;\ 0.11]$ & $[-0.23;\ 0.11]$ & $[-0.18;\ 0.05]$  \\
    v2          & $0.05$           & $-0.03$          &                   \\
                & $[-0.04;\ 0.15]$ & $[-0.16;\ 0.11]$ &                   \\
    \hline
    \multicolumn{4}{l}{\scriptsize{$^*$ 0 outside the confidence interval. Fixed effect of time treated as factor.}}
  \end{tabular}
\end{table}

\end{document}

Unfortunately the spacing around a unary minus is not consistent. For example, see $a - b$ $-b$ $[-b]$ ${-}b$:

enter image description here

You may have to use the {-} to force a unary minus where needed.

Werner
  • 603,163
  • the square brackets aren't in the tt font. but it's not really clear what is wanted there -- is it monospace, or the "look" of a typewriter? – barbara beeton Apr 26 '17 at 01:43
  • interesting, @Werner. the table content comes from the texreg package in R, so i'd have to see if there is an easy way to programmatically add {-}. As Barbara notes, there is also the issue of the brackets. i don't understand latex enough to get why the content is printed in a different font in the first place. – Eric Green Apr 26 '17 at 02:30