“填写缺失的单词”需要在 \phantom{word} 前换行,并列出已删除的单词

“填写缺失的单词”需要在 \phantom{word} 前换行,并列出已删除的单词

抱歉,标题太长了。

我正在写一篇“填写缺失单词”文档。我制作了一个 makro \fjern{}(挪威语中意为“删除”),它强调了论点并将其放置在环境中phantom

问题:

  1. 在提供的 MWE 中,我得到了令人讨厌的 overfull hbox。有没有办法可以避免这种情况,而不必查看raggedright整个文档?
  2. 我想以随机顺序打印所有我删除的单词,最好有一个选项,可以打印或不打印多次出现的单词(为学生区分)。我该怎么做?我完全不知道……(如果有选项solution可以将删除的单词打印在正确的位置并以某种方式突出显示,那就太棒了)

梅威瑟:

\documentclass[12pt, a4paper, norsk]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}

\usepackage{parskip}

\newcommand\fjern[1]{\underline{\phantom{#1}}}

\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}

\LARGE Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner} i kjernen, med \fjern{elektroner} som kretser rundt. \fjern{Protoner} har en positiv ladning, \fjern{nøytroner} er nøytralt ladet og \fjern{elektroner} har en negativ ladning. 
% Print the removed words
\vspace{4em}
\textbf{Sett inn ordene:} atom, protoner, nøytroner, elektroner

% section vokabular (end)
\end{document}

生产

在此处输入图片描述

答案1

我会给“填充”规则一些灵活性:

\documentclass[12pt, a4paper, norsk]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}

\usepackage{parskip}

%\newcommand\fjern[1]{\linebreak[2]\underline{\phantom{#1}}}
\newcommand\fjern[1]{%
  \sbox0{#1}%
  \hspace*{0pt}\leaders\hrule height 0pt depth 1pt\hskip\wd0 plus 2em\relax\mbox{}}

\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}

{\LARGE Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner}
i kjernen, med \fjern{elektroner} som kretser rundt.
\fjern{Protoner} har en positiv ladning, \fjern{nøytroner}
er nøytralt ladet og \fjern{elektroner} har en negativ ladning.\par}

% Print the removed words
\vspace{4em}

\textbf{Sett inn ordene:} atom, protoner, nøytroner, elektroner

% section vokabular (end)
\end{document}

在此处输入图片描述

下列\hspace*{0pt}前导符不会在行首消失,因为它们会跟随粘连。最后一项\mbox{}可避免它们在行尾消失。


这是自动打乱单词顺序的版本。唯一的限制是:单词必须全部小写;可以想出一种不太具侵略性的语法来允许大小写变化。

\documentclass[12pt, a4paper, norsk]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}

\usepackage{parskip}
\usepackage{xparse}
\input{random}

\NewDocumentEnvironment{fillin}{}
 {\par\LARGE}
 {\par\bigskip\printremoved\par}

\ExplSyntaxOn
\NewDocumentCommand{\fjern}{O{2em}m}
 {
  \holene_fjern:nn { #1 } { #2 }
 }
\NewDocumentCommand{\printremoved}{ }
 {
  \holene_print_removed:
 }

\seq_new:N \l_holene_removed_words_seq
\seq_new:N \l_holene_shuffled_words_seq
\tl_new:N \l_holene_word_tl
\int_new:N \l_holene_random_int

\cs_new_protected:Npn \holene_fjern:nn #1 #2
 {
  \seq_put_right:Nn \l_holene_removed_words_seq { #2 }
  \sbox0{#2}%
  \hspace*{0pt}
  \leaders\hrule height 0pt depth 1pt\hskip\wd0 plus #1\scan_stop:
  \mbox{}
 }
\cs_new_protected:Npn \holene_print_removed:
 {
  \textbf{Sett~inn~ordene:~}
  \holene_shuffle:
  \seq_use:Nn \l_holene_shuffled_words_seq { ,~ }
 }
\cs_new_protected:Npn \holene_shuffle:
 {
  \int_compare:nF
   { \seq_count:N \l_holene_removed_words_seq = 0 }
   { \holene_get_random: \holene_shuffle: }
 }
\cs_new_protected:Npn \holene_get_random:
 {
  \setrannum { \l_holene_random_int }
    { 1 } { \seq_count:N \l_holene_removed_words_seq }
  \tl_set:Nx \l_holene_word_tl 
   { \seq_item:Nn \l_holene_removed_words_seq { \l_holene_random_int } }
  \seq_remove_all:NV  \l_holene_removed_words_seq \l_holene_word_tl
  \seq_put_right:NV \l_holene_shuffled_words_seq \l_holene_word_tl
 }
\cs_generate_variant:Nn \seq_remove_all:Nn { NV }
\cs_generate_variant:Nn \seq_put_right:Nn { NV }
\ExplSyntaxOff

\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}

\begin{fillin}
Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner}
i kjernen, med \fjern{elektroner} som kretser rundt.
\fjern{protoner} har en positiv ladning, \fjern{nøytroner}
er nøytralt ladet og \fjern{elektroner} har en negativ ladning.
\end{fillin}

% section vokabular (end)
\end{document}

这是一个例子

在此处输入图片描述

答案2

这样使用前导符,下划线就可以拉伸或收缩目标宽度的 0.2,并且在之前有额外的拉伸空白:

在此处输入图片描述

\documentclass[12pt, a4paper, norsk]{article}

\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[margin=1in]{geometry}

\usepackage{parskip}

\newcommand\fjern[1]{\leavevmode\sbox0{#1}%
\hskip0pt plus 1em
\hbox{}%
\nobreak
\leaders
\vbox{\kern.1ex\hrule width 1pt height 1pt\kern-.1ex}%
\hskip\wd0 plus.2\wd0 minus.2\wd0
\penalty0 }

\begin{document}
\section*{Vokabular} % (fold)
\label{sec:vokabular}

\LARGE Et \fjern{atom} består av \fjern{protoner} og \fjern{nøytroner} i kjernen, med \fjern{elektroner} som kretser rundt. \fjern{Protoner} har en positiv ladning, \fjern{nøytroner} er nøytralt ladet og \fjern{elektroner} har en negativ ladning. 

% Print the removed words ALWAYS have a blank line before \vspace!
\vspace{4em}
\textbf{Sett inn ordene:} atom, protoner, nøytroner, elektroner

% section vokabular (end)
\end{document}

答案3

这是一个使用我的exsheets包及其\blank命令带有扩展名,用于打印要填写的单词列表。不过,要填写的条目不是随机排列的,而是按字母顺序排列的。

exsheets尚未有挪威语标题翻译,因此我使用了快速网络搜索显示的内容...exsheets如果您告诉我是哪些,我会添加正确的标题。

在此处输入图片描述

\documentclass[12pt, a4paper, norsk]{article}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage{fouriernc}
\usepackage[showframe,margin=1in]{geometry}

\usepackage{exsheets}
\SetupExSheets{
  headings-format = \bfseries
}

% no idea if those translations are correct:
\DeclareTranslation{Norsk}{exsheets-exercise-name}{Utøve}
\DeclareTranslation{Norsk}{exsheets-question-name}{Problemet}
\DeclareTranslation{Norsk}{exsheets-solution-name}{Oppløsning}


\usepackage{parskip}

\usepackage{expl3,l3sort}
\ExplSyntaxOn
\seq_new:N \g_holene_fillin_list_seq
\cs_new_protected:Npn \holene_addto_fillin_list:n #1
  {
    % \tl_to_lowercase:n ensures that entries are added lowercase only; this
    % means however, that you have to use \o instead of ø inside of \fjern,
    % probably other special characters need to be treated similarly.  (I
    % haven't checked the reason for this...)
    \tl_to_lowercase:n {
      \seq_gput_right:Nn \g_holene_fillin_list_seq {#1}
    }
  }

\NewDocumentCommand \fjern { m }
  {
    \IfInsideQuestionT
      { \holene_addto_fillin_list:n {#1} }
    \blank {#1}
  }

\cs_new_protected:Npn \holene_write_fillins:
  {
    \textbf{Sett~ inn~ ordene:}~
    % remove duplicate entries:
    \seq_remove_duplicates:N \g_holene_fillin_list_seq
    % and sort alphabetically:
    \seq_sort:Nn \g_holene_fillin_list_seq
      {
        % \tl_to_lowercase:n ensures that uppercase and lowercase variants are
        % treated the same when ordered (unnecessary when it is used in
        % \holene_addto_fillin_list:n already):
        % \tl_to_lowercase:n {
          \int_compare:nTF { \pdftex_strcmp:D { ##1 } { ##2 } = -1 }
            { \sort_ordered: }
            { \sort_reversed: }
        % }
      }
    \seq_use:Nnnn \g_holene_fillin_list_seq
      { ,~ }
      { ,~ }
      { ,~ }
    \seq_gclear:N \g_holene_fillin_list_seq
  }

\NewDocumentCommand \printfillins { }
  { \holene_write_fillins: }
\ExplSyntaxOff

\begin{document}
\LARGE


\section*{Vokabular} % (fold)
\label{sec:vokabular}
\begin{question}
  Et \fjern{atom} består av \fjern{protoner} og \fjern{n\o ytroner} i kjernen,
  med \fjern{elektroner} som kretser rundt. \fjern{Protoner} har en positiv
  ladning, \fjern{n\o ytroner} er nøytralt ladet og \fjern{elektroner} har en
  negativ ladning.\par
  \printfillins
\end{question}

\begin{solution}[print]
  Et \fjern{atom} består av \fjern{protoner} og \fjern{n\o ytroner} i kjernen,
  med \fjern{elektroner} som kretser rundt. \fjern{Protoner} har en positiv
  ladning, \fjern{n\o ytroner} er nøytralt ladet og \fjern{elekt\-roner} har en
  negativ ladning.
\end{solution}

% section vokabular (end)
\end{document}

相关内容