0

My problem is best explained by showing you my Latex source:

\documentclass[10pt,a4paper]{article}
\usepackage{changepage}
\begin{document}
\section*{Homework January, 2017}
\subsubsection*{4.23}
\begin{adjustwidth}{1.2cm}{}\vspace*{-0.68cm}
  A fence is 2 m tall and 3 m wide. Bla bla
  $\iff (\sqrt{x + 5} - \sqrt{x + 2})^2 = 1^2$ and so on. Then also
  something more in teh problem. And more and more...
  \vspace*{0.15cm}
\end{adjustwidth}
Then I solve it here...
\begin{gather*}
x^2 - 3x + 2 = 1 \\
\iff (x - \frac{3}{2})^2 - \frac{9}{4} + 2 = 1 \\
\iff (x - \frac{3}{2})^2 = \frac{5}{4} \\
\iff x - \frac{3}{2} = \pm\frac{\sqrt{5}}{2} \\
\iff x = \frac{3\pm\sqrt{5}}{2} \\
x_1 = \frac{3-\sqrt{5}}{2}\\
x_2 = \frac{3+\sqrt{5}}{2}
\end{gather*}
...
\section{Homework February, 2017}
...
\end{document}

Note how I'm using ugly vspace commands to get the paragraph "A fence is ..." to line up next to the subsection heading. My question is if I can achieve the same layout in a more "semantic" way, without hardcoding measurements? For example, by creating a new Latex command so that I can write:

\problemsection{4.23}{A fence is 2 m tall ... }
Then I solve it here...
\begin{gather*}
    x^2 - 3x + 2 = 1 \\
...

and have it being layouted exactly as the above code?

3
  • Please do not post fragments, but compilable minmal working examples.
    – TeXnician
    Mar 19, 2017 at 11:39
  • Floating is misleading here, in my point of view. Especially if you provide the problem number manually -- a floating 'section' would scramble the order of appearance....
    – user31729
    Mar 19, 2017 at 11:41
  • You're right. I've changed the question title. Mar 19, 2017 at 11:46

2 Answers 2

2

So it seems you want to have a labeled paragraph with hanging indentation. One way to do it: Put the following lines into your preamble:

\newenvironment{assignment}[1]%
   {\begin{description}\item[#1]}%
   {\end{description}}

and use it like

\begin{assignment}{4.23}
  A fence is 2 m tall and 3 m wide. Bla bla
\end{assignment}

Edit: It turns out that there should also be a table of contents containing entries for the assignments. I guess that also the headlines ("Homework ...") should be reflected in the toc. However, \section* does not add toc entries. The easiest way to achieve this is to set secnumdepth to 0 and to use \section.

\newenvironment{assignment}[1]%
   {\addcontentsline{toc}{subsection}{#1}%
    \begin{description}\item[#1]}%
   {\end{description}}
\setcounter{secnumdepth}{0} % don't number sections
\begin{document}
\tableofcontents
\section{Homework ...}
\begin{assignment}{4.23}
  ...
\end{assignment}

enter image description here

\documentclass{article}
\usepackage{amsmath}
\newenvironment{assignment}[1]%
   {\addcontentsline{toc}{subsection}{#1}%
    \begin{description}\item[#1]}%
   {\end{description}}
\setcounter{secnumdepth}{0} % don't number sections
\begin{document}
\tableofcontents
\section{Homework January, 2017}
\begin{assignment}{4.23}
  A fence is 2 m tall and 3 m wide. Bla bla
  $\iff (\sqrt{x + 5} - \sqrt{x + 2})^2 = 1^2$ and so on. Then also
  something more in teh problem. And more and more...
\end{assignment}
Then I solve it here...

\begin{gather*}
x^2 - 3x + 2 = 1 \\
\iff (x - \frac{3}{2})^2 - \frac{9}{4} + 2 = 1 \\
\iff (x - \frac{3}{2})^2 = \frac{5}{4} \\
\iff x - \frac{3}{2} = \pm\frac{\sqrt{5}}{2} \\
\iff x = \frac{3\pm\sqrt{5}}{2} \\
x_1 = \frac{3-\sqrt{5}}{2}\\
x_2 = \frac{3+\sqrt{5}}{2}
\end{gather*}
...
\section{Homework February, 2017}
...
\end{document}

Edit 2: To get a reasonable error messages in case of a missing label change the definition of the assignment environment as follows.

\makeatletter
\newenvironment{assignment}%
   {\@ifnextchar\bgroup
      {\assignmenta}%
      {\GenericError{}{}{Label of assignment missing.}{}%
       \assignmenta{\bfseries???}%
      }
   }%
   {\end{description}}
\makeatother
\newcommand\assignmenta[1]%
   {\addcontentsline{toc}{subsection}{#1}%
    \begin{description}\item[#1]%
   }
8
  • Not bad, but the paragraph "A fence is 2 m.." doesn't line up as it does in my code. Mar 19, 2017 at 12:33
  • 1
    @BjörnLindqvist Nothing lines up in your code, it is not compilable.
    – Johannes_B
    Mar 19, 2017 at 12:37
  • @BjörnLindqvist I have revised my answer. This kind of alignment?
    – gernot
    Mar 19, 2017 at 12:51
  • Exactly! I didn't know it was called hanging indentation. But now there is no entry created for the section in the table of contents. Mar 19, 2017 at 13:04
  • 2
    @BjörnLindqvist Well, you didn't indicate that you want to have a table of contents. Quite the opposite, since you use \section* which does not write toc entries either. See my modified answer.
    – gernot
    Mar 19, 2017 at 13:15
2

It depends what you want in the end, so a bit of thought at the beginning might be worth your while. Right now, spacing and numbering is done by hand, using commands that suit by accident the wanted output. Not really the way LaTeX was meant.

Here a few suggestions with semantic markup. Depending how complex it will get in the future, a look into package exsheets might be a good idea.

Note: As always, the code can be as complex as you want it to be.

bjoernProblemsSolutions2

\documentclass{article}
\usepackage{mathtools}
\usepackage{blindtext}
\usepackage{xparse}
\usepackage{etoolbox}
\newcommand{\hwyear}{2017}
\newcounter{hwmonth}
\DeclareDocumentCommand{\nexthomeworkmonth}{ o }{
    \refstepcounter{hwmonth}
    \addsec{Homework \arabic{hwmonth}, \hwyear}
}
\newcounter{problemcounter}
\newbool{inproblem}
\makeatletter
\DeclareDocumentEnvironment{problem}{ o }{
    \refstepcounter{problemcounter}
    \booltrue{inproblem}
    \par\noindent\@hangfrom{\bfseries\IfValueTF{#1}{#1}{\arabic{problemcounter}}\enspace}\ignorespaces%
}{
    \par\boolfalse{inproblem}
}
\makeatother
\DeclareDocumentEnvironment{solution}{}{
    \ifbool{inproblem}{\par\bigbreak\noindent\ignorespaces}{This
    doesn't belong to any problem. Be careful!\par}
}{
    \par
}
\begin{document}

\begin{problem}
    Wombat? \blindtext
    \begin{solution}
        Capybara!
    \end{solution}
\end{problem}
\nexthomeworkmonth
\begin{problem}[4.23]
    A fence is 2 m tall and 3 m wide. Bla bla
    $\iff (\sqrt{x + 5} - \sqrt{x + 2})^2 = 1^2$ and so on. Then also
    something more in the problem. And more and more 
    \begin{solution}
        Then I solve it here...\blindtext
        \begin{gather*}
            x^2 - 3x + 2 = 1 \\
            \iff (x - \frac{3}{2})^2 - \frac{9}{4} + 2 = 1 \\
        \end{gather*}
    \end{solution}
\end{problem}
\nexthomeworkmonth
\begin{solution}
    Duck
\end{solution}
\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .