以下是 MWE:
\documentclass[a4paper]{report}
\usepackage{graphicx,multirow,multicol}
\makeatletter
\newcommand{\blocks}[9][-10]{
\def\bar{\@ifstar{\raisebox{-5pt}{\scb{1}[1]{\Huge{|}}}\hsp{0.2cm}}{\raisebox{-14pt}{\scb{1}[1.3]{\Huge{|}}}\hsp{0.2cm}}}
\!\!\mat{cccc}
#2\hsp{-0.2cm}&\multicolumn{2}{r}{\multirow{2}{*}{\bar\raisebox{#1pt}{\Huge{$#6$}}}}\\
#4\hsp{-0.2cm}\\[0.2em]\hline\multicolumn{2}{r}{\multirow{2}{*}{\raisebox{#9pt}{\Huge{$#7$}\hsp{-0.2cm}}}}&\multicolumn{2}{r}{\multirow{2}{*}{\bar*\raisebox{#9pt}{\Huge{$#8$}}}}\\
\\
\emat\!\!}
\makeatother
\newcommand{\mat}{\begin{array}}
\newcommand{\emat}{\end{array}}
\newcommand{\scb}{\scalebox}
\newcommand{\hsp}{\hspace}
\begin{document}
$$\blocks{\cosh u}{\sinh u}{\sinh u}{\cosh u}{0}{0}{1}.$$
\end{document}
排版后,它会产生我期望的结果,只是 | 显示为水平条。为什么?为什么要将它们更改为$|$
垂直?
答案1
ascii|
有内部代码"7C
。
在计算机现代文本字体中,位置"7C
由破折号占据。
当您将某物装入盒子(\raisebox
此处)时,它会恢复为水平模式,从而|
访问破折号。
正如您所发现的,$|$
访问垂直条,因为在数学字体中,此符号使用 ascii 位置。
纯属运气,你找到了一个组合,看上去它所改变的只是形状的方向。如果你想要垂直放置该条,请记住如果它在一个框中,它必须处于数学模式。
答案2
重新定义 确实是一个坏主意\bar
。另外,你手动执行已经可用的操作,使用你不期望的字符:|
在文本模式下打字并不是一个好主意,除非你正在加载 T1 编码。
\documentclass[a4paper]{report}
\newcommand{\blocks}[7]{%
\begin{array}{c|c}
\begin{array}{@{}cc@{}}
#1 & #2 \\
#3 & #4
\end{array} &
\xbox[-0.8ex]{#5} \\[2ex]
\hline
& \\[-1.5ex]
\xbox{#6} &
\xbox{#7}
\end{array}%
}
\newcommand\xbox[2][0pt]{%
\begin{tabular}{@{}c@{}}\raisebox{#1}{\Huge\ $#2$\ }\end{tabular}%
}
\begin{document}
\[
\blocks{\cosh u}{\sinh u}{\sinh u}{\cosh u}{0}{0}{1}
\]
\end{document}
答案3
该示例显示了许多问题,其中包括:
- 为什么
\[
…比…\]
更好?$$
$$
\def
和有什么区别\newcommand
?\bar
被 覆盖\blocks
。\Huge
和朋友没有参数。字体大小命令的效果保持有效,直到当前组结束:{\Huge #1}
而不是\Huge{#1}
。- 代码格式化,代码格式化,代码格式化。
- ...
例子:
\documentclass[a4paper]{report}
\makeatletter
\newcommand*{\blocks}[7]{%
\begingroup
\newcommand*{\hugemath}[1]{\mbox{\Huge$##1$}}%
\begin{tabular}{r|l}
$%
% @{} removes space at the left and right, because
% the surrounding tabular adds already space.
\begin{array}[b]{@{}cc@{}}
#1\\
#3%
\end{array}
$%
& \mbox{\Huge$#5$}\\
\hline
% the following trick adds vertical space above
% the contents of the row with the amount of the depth
% of a table line. Then the `\hline` is in the middle.
% \@finalstrut\@arstrutbox is the depth of a tabular
% line (e.g. this is added at the end of a line in
% a cell of column type "p".
\settodepth{\dimen@}{\@finalstrut\@arstrutbox}%
\raisebox{\dimen@}{%
\vphantom{\hugemath#6#7}%
}%
\hugemath{#6}
& \hugemath{#7}%
\end{tabular}%
\endgroup
}
\makeatother
\begin{document}
\[
\blocks{\cosh u}{\sinh u}{\sinh u}{\cosh u}{0}{0}{1}
\]
\end{document}
答案4
默认的 OT1 编码在 ASCII 标点符号槽中有连字符(此处为破折号)和其他内容,请尝试
\documentclass{article}
\begin{document}
OT1 is strange < | >
\end{document}