![使用 fillwithgrid 时网格宽度不是文本宽度(考试包)](https://linux22.com/image/389373/%E4%BD%BF%E7%94%A8%20fillwithgrid%20%E6%97%B6%E7%BD%91%E6%A0%BC%E5%AE%BD%E5%BA%A6%E4%B8%8D%E6%98%AF%E6%96%87%E6%9C%AC%E5%AE%BD%E5%BA%A6%EF%BC%88%E8%80%83%E8%AF%95%E5%8C%85%EF%BC%89.png)
当插入答案的空间时,\fillwithdottedlines
生成的行具有与文本宽度相同的宽度。当使用\fillwithgrid
生成的网格时,两侧都较小:
\documentclass[addpoints,a4paper,12pt,answers]{exam}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\begin{document}
\begin{questions}
\question[4] Warum gibt es Luft?
\lipsum[1]
\fillwithdottedlines{2cm}
\bigskip
\fillwithgrid{2cm}
\end{questions}
\end{document}
如何获得完全相同的宽度?
旧帖子中的解决方案是更改\textwidth
。但这只会扩展右侧的网格。
答案1
我认为这是问题的组合。首先,\fillwithgrid
仅绘制具有特定大小的完整正方形(默认为 5 毫米),这使得生成的网格不太可能与宽度完全相同\linewidth
(\textwidth
不考虑由于问题的枚举导致线条较短)
我认为使用\linewidth
正方形大小的一小部分应该可以避免这个问题,例如
\setlength{\gridsize}{\dimexpr.1\linewidth-11\gridlinewidth}
\fillwithgrid{2cm}
但出于我不知道的原因,这只画了 9 个方块,而不是我预期的 10 个......
诉诸重型tikz
武器
\documentclass[addpoints,a4paper,12pt,answers]{exam}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}
\begin{document}
\begin{questions}
\question[4] Warum gibt es Luft?
\lipsum[1]
\fillwithdottedlines{2cm}
\bigskip
\begin{tikzpicture}%
\draw[step=0.5,black,thin] (0,0) grid (\linewidth,2cm);
\end{tikzpicture}%
\end{questions}
\end{document}
使用这种方法,也可以计算正方形的大小作为作品的一部分\linewidth
:
\documentclass[addpoints,a4paper,12pt,answers]{exam}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}
\begin{document}
\begin{questions}
\question[4] Warum gibt es Luft?
\lipsum[1]
\fillwithdottedlines{2cm}
\bigskip
\begin{tikzpicture}%
\draw[step=0.05\linewidth-0.01pt,black,thin] (0,0) grid (\linewidth,0.2\linewidth);
\end{tikzpicture}%
\end{questions}
\end{document}
答案2
代码exam.cls
用于\leaders
在列表环境中水平定位,在占据整个行宽的水平框中,以及总左边距的初始空白。该类的这一特性意味着网格方块将看起来垂直对齐,与实际左边距无关。但这个左边距不可能是单位网格大小的精确倍数,因此方块的起点看起来有点随意,如果使用较大的值,则总是系统地向右移动,因为它的绝对水平定位必须从文本区域左边界的网格大小的整数倍开始。
在这里的代码中,我修补了 ,\list
使其左边距为 2 个网格大小。我调整了网格大小,使整数倍适合整个宽度。这给出了修改后的网格大小,5.13mm
代替5mm
。
\documentclass[addpoints,a4paper,12pt,answers]{exam}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{etoolbox}
\patchcmd\questions{\settowidth{\leftmargin}{10.\hskip\labelsep}}
{\leftmargin=2\gridsize}
{\typeout{PATCH SUCCEEDED}}
{\PATCHFAILED}
\begin{document}
\makeatletter
\count@ \dimexpr\textwidth-\gridlinewidth\relax
\divide\count@ by \numexpr\dimexpr5mm\relax\relax
\gridsize\dimexpr(\textwidth-\gridlinewidth)/\count@\relax
\typeout{WE MODIFIED \string\gridsize\space TO \the\gridsize, i.e.
\the\numexpr\gridsize*15875/29601792 mm/100
SO WHEN USED INSIDE QUESTION THERE ARE \the\numexpr\count@-2\relax
\space SQUARES IN HORIZONTAL LINES}
\makeatother
\begin{questions}
\question[4] Warum gibt es Luft?
blah blah blah (\number\gridsize)
\fillwithdottedlines{2cm}
\bigskip
\noindent X\dotfill X\par
\bigskip
\fillwithgrid{2cm}
\end{questions}
\end{document}
WE MODIFIED \gridsize TO 14.60864pt, i.e. 513mm/100 SO WHEN USED INSIDE QUESTION THERE ARE 29 SQUARES IN HORIZONTAL LINES