\# Copyright 2004, 2005, 2006, 2009, 2010, 2011, 2012, 2013 \# Free Software Foundation, Inc. \# \# Copying and distribution of this file, with or without modification, \# are permitted in any medium without royalty provided the copyright \# notice and this notice are preserved. \# \# Most mom users rely on mom's document processing macros to format \# their work. The doc processing macros take care of all things \# typographic and are simple, clear and easy to learn. The kind of \# "by hand" typesetting this file demonstrates is geared towards \# professional typographers. Bear in mind, though, that the full \# power of mom's typesetting capabilities can be brought to bear on \# document processing as well. \# \# Basic page setup \# .PAGE 8.5i 11i 1i 1i 1i \" Page size, margins \# \# Basic type parameters \# .FAMILY T \" Times Roman family .FT B \" Bold font .PT_SIZE 12 \" Point size .LS 14 \" Leading (line spacing) .LEFT \" Set lines flush left, nofill mode \# \# Refinements \# .HY \" Hyphenate .KERN \" Automatic pairwise kerning .LIGATURES \" Automatic ligature generation .SMARTQUOTES \" Enable smartquotes .SS 0 \" No extra space between sentences \# .SP |1i-1v \" Advance 1 inch from top of paper to first baseline Example 1\*[BU 2]: .ALD .25v \" Advance an extra 1/4 linespace .UNDERSCORE 3.75p "T\*[BU 4]asting notes using padding, string tabs \ and multi-columns" \# .SP \" Add an extra line space \# .FAM H \" Helvetica family .PT_SIZE 10 .LS 11 \" New leading \# \# The following uses a combination of padding, string tabs, and the \# FWD escape to set up five tabs with 1-pica gutters stretched over \# the full line length. \# .SILENT \" Don't print the next line .PAD "\*[ST1]VIN#\*[ST1X]\*[FWD 1P]\*[ST2]ROBE#\*[ST2X]\ \*[FWD 1P]\*[ST3]NEZ#\*[ST3X]\*[FWD 1P]\*[ST4]BOUCHE#\*[ST4X]\ \*[FWD 1P]\*[ST5]COMMENTAIRES\*[ST5X]" .SILENT OFF \" Resume normal printing of text \# \# Now that the string tabs have been marked off, we "set" them. \# .ST 1 L \" First string tab flush left, nofill (line-for-line) mode .ST 2 L QUAD \" Remaining tabs are flush left/rag right, fill mode .ST 3 L QUAD .ST 4 L QUAD .ST 5 L QUAD \# .TAB 1 \" Call first tab .UNDERSCORE "VIN" .TN \" Move to next tab and stay on the same baseline .UNDERSCORE "ROBE" .TN \" Ibid .UNDERSCORE "NEZ" .TN \" Ibid .UNDERSCORE "BOUCHE" .TN \" Ibid .UNDERSCORE "COMMENTAIRES" .TQ \" Quit tabs \# .ALD 6p \" Advance an extra 6 points .FT R \" Change font to roman (medium) .MCO \" Turn multi-column mode on \# .TAB 1 \" Notice that this tab gets set line-for-line \*[IT]Peelee Island \" Set italic \*[PREV]Gewürztraminer \" Revert to former font (roman) 2000 (Canada) .MCR \" Return to top of column .TAB 2 \" Call tab 2; in multi-column mode, don't use .TN Jaune pâle. .MCR .TB 3 \" Notice that from here on, we use the alias TB instead of TAB Frais, fruité, ci\%tronné, arômes fortes de lichee et de fruits tropicaux. .MCR .TB 4 Doux, fruité, bien équilibré avec une bonne acidité. .MCR .TB 5 Bon apéro. Servir avec des plats .RW .1 \" Reduce Whitespace between letters to tighten this line indiens ou \%chinois. .RW 0 \" Back to normal spacing between letters .BR Excellent rapport qualité/prix. .MCX 8p \" Multi-column mode off; advance an extra 8 points .MCO \" Re-invoke multi-columns for next wine description .TB 1 \*[IT]Carau Pujol \*[ROM]Tannat 1995 (Uraguay) .MCR .TB 2 Rubis foncé, vio\%lacée, presque opaque. .MCR .TB 3 Belles arômes de fruits foncés (prunes, cerises noires, cassis). Odeurs tertiares de cuir, cèdre, violets, eucalyptus, avec une trace exotique de Band-Aid*\*[BU 12]. \# \# The \*[BU 12], above, pulls the period back so that it falls \# underneath the asterisk. \*[BP] could have been used instead \# if you prefer to use points rather than kern units. \# .MCR .TB 4 Très rond, tannins mûres et veloutés, avec un long finis fruité et doucement alcoolique. .MCR .TB 5 Superbe\|! Une aubaine à ne pas manquer. Prêt à boire maintenant. .MCX 1v \" Multi-columns off; advance an extra linespace \# \# Now, an example of a hanging indent. This is excessively fussy \# from a typographic standpoint in that it hangs the asterisk outside \# the current left margin so that the text following it lines up with \# with the text in the tasting notes. Notice that in order to use a \# hanging indent, you must first set a left indent. \# .FT I \" Change font to italic .PT_SIZE -.5 \" Reduce point size by 1/2 point .LS -.5 \" Reduce leading by 1/2 point .JUSTIFY \" Set text justified \# \# Now, move the left margin back by the width of an asterisk plus 2 points... \# .L_MARGIN -(\w'*'+2p) \# \# ...and set a left indent equal to the width of an asterisk plus 2 points \# .IL \w'*'+2p \# \# Now, set the hanging indent equal to the left indent, effectively \# pulling the first line of the following text back to the new left \# margin. Subsequent output lines will be indented by the .IL \# amount. Notice that when using the \w inline escape, there's no \# need to append a unit of measure. \# .HI \w'*'+2p *\*[FWD 1p]The term "Band-Aid" means the slightly sweet, vaguely chemical smell associated with medical-grade plastics. It is often found in wines from terroirs in South America. Provided a wine has a sufficient concentration of fruit .RW .04 \" Tighten the next line slightly, so "lipstick" doesn't hyphenate. aromas and complex tertiary characteristics, Band-Aid is a Good Thing. Otherwise, it smells like cheap lipstick. .RW 0 \" Reset kerning to 0 \# \# Notice, above, that although the values for IL and HI are the width \# of an asterisk plus 2 points, when setting the first line of text \# (the one with the asterisk at the beginning), we put only 1 point of \# space after the *. This is to compensate for the fact that in the \# italic font, the letter T doesn't align visually with the rest of \# the text. As already noted, this is an extremely fussy example. :) \# .IQ CLEAR \" Cancel and clear stored indent values .L_MARGIN 1i \" Reset left margin to its original value. \# .ALD 2P \" Add 2-picas extra space before next example \# .FAM T .FT B .PT_SIZE 12 .LS 14 \# Example 2: .ALD .25v \# .COMMENT In the next line, because the string to be underscored must be enclosed in double-quotes, you can't use the double-quote character itself around the word "Massaging". We circumvent this by using the groff inline escapes \[lq] and \[rq] (leftquote and rightquote). .COMMENT OFF \# .UNDERSCORE 3.75p "\[lq]Massaging\[rq] \*[BCK 1p]a passage of rag right text" .SP \" Add an extra linespace \# .PT_SIZE 12.5 .LS 14 .PT_SIZE -1 \" Reduce point size by 1 point Passage using groff spacing defaults \# .ALD .5v \" Add an extra 1/2 line space \# .PT_SIZE +1 \" Restore point size .QUAD LEFT \" Set quad left, fill mode .IB 3P \" Indent 3 picas from both the left and right margins .FT R The thousand injuries of Fortunato I had borne as I best could; but when he ventured upon insult, I vowed revenge. You, who so well know the nature of my soul, will not suppose, however, that I gave utterance to a threat. \*[IT]At length\*[PREV] I would be avenged; this was a point definitively settled\[em]but the very definitiveness with which it was resolved, precluded the idea of risk. I must not only punish, but punish with impunity. A wrong is unredressed when retribution overtakes its redresser. It is equally unredressed when the avenger fails to make himself felt as such to him who has done the wrong. .ALD 6p \# \# The next line is set quad right, nofill mode, 1/2 point smaller \# than the preceding text (using the \*[SIZE ] inline escape. \# .RIGHT \*[SIZE -.5]\[em]Edgar Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]\*[SIZE +.5] .SP \" Extra linespace .IBQ \" Disable "indent both" \# \# The passage above, while acceptable in a longer document, exhibits a \# few typographic flaws. The shape of the right margin rag exhibits \# a decidedly "rounded" appearance. The word "I" stands alone at the \# end of the third line. The space between the 1st and 2nd sentences \# ("...revenge. You...") is too large, owing to the letter "Y" that \# begins the 2nd sentence. The spacing between "A wrong..." (line 6) \# is equally too large because of the way "A" and "w" fit together. \# The em-dash before Edgar isn't vertically centered with the letter "E". \# And so on. The most important correction below is fixing the rag \# so that longer and shorter lines alternate. This is accomplished by \# manually breaking lines and then slightly lengthening and shortening \# them until a pleasing rag is achieved. The remainder of the little \# flaws are fixed with inline escapes. \# .FT B .PT_SIZE -1 .LEFT The same passage, \*[BU4]"massaged" \# .ALD .5v \# .FT R .PT_SIZE +1 .QUAD LEFT .HY OFF \" Turn automatic hyphenation off .BR_AT_LINE_KERN \" Automatically insert a line break (.BR) at each .RW and .EW .WS +1 \" Increase word space slightly .IB \" Turn "indent both" back on; values are the same as before \# The thousand injuries of Fortunato I had borne as I best could; but when he ventured upon insult, I \*[BU2]vowed revenge. \*[BU4]Y\*[BU6]ou, \*[BU4]who so \*[BU2]well know the nature .EW .2 of my soul, \*[BU2]will not suppose, however, that I gave utterance to a threat. \*[IT]At .EW .2 length\*[PREV] I would be avenged; this was a point definitively settled\[em]but the .EW .2 v\*[BU1]ery definitiveness with which it was resolved, precluded the idea of risk. .EW 0 I must not only punish, but punish with impunity. A \*[BCK 1p]wrong is unredressed .EW .1 when retribution overtakes its redresser. It is equally unredressed when the .RW .1 avenger fails to make himself felt as such to him \*[BU 2]who has done the wrong. .RW 0 \" Restore normal kerning .WS +0 \" Restore normal wordspacing .ALD 6p .PT_SIZE -.5 .RIGHT \*[UP 1.5p]\[em]\*[DOWN 1.5p]\*[BCK 1p]Edgar \*[BCK 1p]Allen Poe, \ \*[IT]The Cask of Amontillado\*[PREV] .IQ CLEAR \" Cancel and clear stored values of all indents \# .NEWPAGE \" Start a new page .T_MARGIN 1i \" Set top margin to 1i (approx. equivalent to .ALD 1i-1v above) \# .FAM T .FT B .PT_SIZE 12 .LS 14 .LEFT \# Example 3: .ALD .25v .UNDERSCORE 3.75p "A \*[BU2]recipe for enumerated lists using indents" .SP .75v \" Add an extra half line space .FAM T \" New Century Schoolbook family .FT R .PT_SIZE 12 .LS 14 .HY \" Turn hyphenation back on .JUSTIFY \" Justify text This example demonstrates the use of left and hanging indents for simple enumerated lists. Nested lists are possible, as the example shows; however, the more complex the nesting, the wiser it becomes to use (string) tabs, as seen in Example 4. .RLD .25v \" Move upwards 1/2 linespace .DBX .5 0 \n[.l]u 2P+9p \" Draw box; \n[.l]u means "the current line length" .IB 6p \" Indent from both left and right margins .ALD 14p \*[BD]Please note: mom\*[PREV] has macros that allow you to set enumerated lists automatically. These examples merely show hanging indents and string tabs in use. \# .SP .25v .JUSTIFY \" Justify text .IL \w'\0.\0' \" Establish a left indent equal to 2 figure spaces plus a period. .HI \w'\0.\0' \" Establish a hanging indent equal to the left indent. .ALD 6p \# \# 1.\0This is the first item in the list. N\*[BU2]otice how the first line "hangs" back from the remaining text, which is otherwise indented by the width of by two figure-spaces (digit-width spaces) and a period. .BR .HI \" Notice that HI doesn't require an argument once the value's set .ALD 6p 2.\0This is the second item in the list. As with the above item, notice the use of the \*[BU8]\\0 escape sequence in the input text. It's there to ensure that the space after the number/period combination always remains the same (i.e. doesn't stretch when the line is justified). That way, the text of each item always lines up perfectly. \# .COMMENT Now we're going to set a bullet-point list, indented from the text above by 1 pica. IL arguments are always added to whatever value is in already effect for IL, hence all we have to do is tell mom to indent (from the current left indent) 1 pica plus the width of the bullet character, \[bu]. \*[FWD 3p] puts three points of space after the bullet so that the bullet and the text are visually separated. .COMMENT OFF \# \# .IL 1P+\w'\[bu]\*[FWD 3p]' \# \# Hanging indents are always relative to the current left indent. \# The additional 1-pica indent, above, already having been taken \# care of, we only want to hang the first lines of bullet list \# items back by the width of the bullet character plus its 3 extra \# points of space. \# .ALD 6p .HI \w'\[bu]\*[FWD 3p]' \*[DOWN 1p]\[bu]\*[UP 1p]\*[FWD 3p]This is the first line of a sublist with bullets. N\*[BU2]otice how the first line (the one with the bullet) is indented exactly one pica from the text of the list item above it, while the remaining lines align with the left indent we set above. .ALD 6p .HI \*[DOWN 1p]\[bu]\*[UP 1p]\*[FWD 3p]This is the second item of the sublist with bullets. \*[BU4]We could go on indefinitely, but let's go back to the top level (numbered) list... \# \# The easiest way to return to a previous indent value is by \# subtraction. The argument to IL, above, was 1P+\w'[bu]\*[FWD \# 3p]', so we just reverse it by putting a minus sign in front. \# The parentheses are required for groff to evaluate the expression \# properly. \# .IL -(1P+\w'\[bu]\*[FWD 3p]') .HI \w'\0.\0' \" Reset hanging indent for use with numbered items. .ALD 6p 3.\0...and here we are. .IQ CLEAR \" Don't forget to cancel and/or clear indents! \# .FAM T .FT B .PT_SIZE 12 .LS 14 .LEFT .SP \# Example 4: .ALD .25v .UNDERSCORE 3.75p "A \*[BU 2]recipe for nested lists using string tabs" .SP .75v .FAM T .FT R .PT_SIZE 12 .LS 14 .JUSTIFY Although setting up string tabs is a bit more complex than setting up indents, it's \*[BU 3]well worth the effort, especially for nested lists. .ALD 6p \# .COMMENT The PAD line, below, sets up two string tabs. The first (ST1) is exactly the length of two figure spaces and a period. The second (ST2) is simply "the remainder of the line." .COMMENT OFF \# .SILENT \" Don't print any of this .PAD "\*[ST1]\0.\0\*[ST1X]\*[ST2]#\*[ST2X]" .ST 1 L \" String tabs must be "set" after being marked off in a line .ST 2 J \" ST 1 will be set flush left, nofill; ST 2 will be justified. .SILENT OFF \" Restore printing \# .TB 1 1.\c .TN \" Use .TN so text stays on the same baseline This is the first item in the list. N\*[BU 2]otice how, just as in Example 3, the first line hangs back from the remaining text, which is otherwise indented. .ALD 6p .TB 1 2.\c .TN This is the second item in the list. N\*[BU 2]otice that when setting "lists" with tabs, there's no need to use the \*[BU 8]\\0 escape sequence after the number/period combination in the input text. \# .COMMENT Now, set up the indented bullet-point sublist. The PAD line says: move forward 12 points (1 pica), then mark off a string tab (ST3) that's the length of the bullet character; move foward another three points, then make the next string tab (ST4) the length of remainder of the line. .COMMENT OFF \# .SILENT .PAD "\*[FWD 12p]\*[ST3]\[bu]\*[ST3X]\*[FWD 3p]\*[ST4]#\*[ST4X]" .ST 3 L .ST 4 J .SILENT OFF .ALD 6p .TB 3 \*[DOWN 1p]\[bu]\*[UP 1p]\c .TN This is the first line of a sublist with bullets. N\*[BU2]otice how the bullets and the text line up exactly the same as in Example 3. .ALD 6p .TB 3 \*[DOWN 1p]\[bu]\*[UP 1p]\c .TN This is the second item of the sublist with bullets. For the fun of it, lets add in an .SPREAD en-dashed sub-sublist. .BR \" We're in fill mode right now, so you must terminate the line with BR \# .SILENT .PAD "\*[FWD 12p]\*[ST5]\[en]\*[ST5X]\*[FWD 4p]\*[ST6]#\*[ST6X]" .ST 5 L .ST 6 J .SILENT OFF .ALD 6p .TB 5 \*[UP .75p]\[en]\*[DOWN .75p]\c .TN Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. .ALD 6p .TB 5 \*[UP .75p]\[en]\*[DOWN .75p]\c .TN At \*[BU 3]vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet. .ALD 6p .TB 1 3.\c .TN And here we are, back at the top-level numbered list with a minimum of muss and fuss, .ALD 6p .TB 1 4.\c .TN Generally speaking, once you get the hang of string tabs and the \*[BD]PAD\*[PREV] macro, you'll find setting up complex indenting structures easier than with the indent macros. .TQ \# .NEWPAGE .FAM T .FT B .PT_SIZE 12 .LS 14 .LEFT \# Example 5: .ALD .25v .UNDERSCORE 3.75p "Word spacing" .ALD 8p .FAM T .PT_SIZE 12 .LS 14 \# \# The "label" lines for the following are set in Helvetica \# bold, one point smaller than the examples themselves. This \# demonstrates the use of the groff inline escape \f[...] to change \# both family and font inline. It also shows using the mom inline \# \*S[...], which is an alternate form of the inline, \*[SIZE ] \# \f[HB]\*S[-1]Normal word spacing\*S[+1]\*[PREV] .FT R N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. .ALD 4p \f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]\*[BU1]2\*S[+1]\*[PREV] .FT R .WS +2 N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. .WS +0 .ALD 4p \f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]4\*S[+1]\*[PREV] .FT R .WS +4 N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. .WS +0 .ALD 4p \f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]6\*S[+1]\*[PREV] .FT R .WS +6 N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party. .WS DEFAULT .SP 1.5v \# .FAM T .FT B .PT_SIZE 12 .LS 14 \# .LEFT Example 6: .ALD .25v .UNDERSCORE 3.75p "Line kerning" .ALD 8p .FAM T \" Palatino family .FT R .PT_SIZE 12 .LS 15 \# \# Here, we set up some tabs so the examples can go into facing columns. \# .TAB_SET 1 0 19.5P L .TAB_SET 2 19.5P 19.5P L \# .MCO \" Turn multi-columns on .TB 1 \f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV] .FT R "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \f[HB]\*S[-1]Line "tightened" \[en] .RW .1\*S[+1]\*[PREV] .RW .1 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \# \# In the next line, notice that because it uses a different family \# (Helvetica instead of Palatino), the RW macro doesn't affect it. \# \f[HB]\*S[-1]Line "tightened" \[en] .RW .2\*S[+1]\*[PREV] .RW .2 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \f[HB]\*S[-1]Line "tightened" \[en] .RW .3\*S[+1]\*[PREV] .RW .3 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .RW 0 .MCR .TB 2 \f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV] "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \f[HB]\*S[-1]Line "loosened" \[en] .EW .1\*S[+1]\*[PREV] .EW .1 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \f[HB]\*S[-1]Line "loosened" \[en] .EW .2\*S[+1]\*[PREV] .EW .2 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .ALD 4p \f[HB]\*S[-1]Line "loosened" \[en] .EW .3\*S[+1]\*[PREV] .EW .3 "But this is \*[IT]important!\/"\*[PREV]she exclaimed. .MCX 1.5v \# .FAM T .FT B .PT_SIZE 12 .LS 14 .LEFT \# Example 7: .ALD .25v .UNDERSCORE 3.75p "Cutaround using left\*[FU 2]/right indents, \ multi columns and a dropcap" .SP \# .FT R .PT_SIZE 11 .LS 12 .BR_AT_LINE_KERN OFF \" In justified text, it's best to have this OFF \# .TAB_SET 1 0 18.5P J .TAB_SET 2 20.5P 18.5P J .MCO .ALD 5P+9p \# \# The little picture of tux. \# .if '\*[.T]'pdf' .PDF_IMAGE penguin.pdf 81p 96p .if '\*[.T]'ps' .PSPIC penguin.ps 81p 96p .MCR .TAB 1 .XCOLOR red \" Initialize the X11 color, red .DROPCAP_COLOR red .DROPCAP_FONT B .DROPCAP L 3 COND 80 \" i.e. the letter L dropped 3 lines, condensed to 80% of its normal width .EW .2 orem ipsum dolor sit amet, consetetur sa\%dip\%scing elitr, sed diam nonumy eir\%mod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. .EW 0 .TI 1P At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea taki- .SPREAD \" Force justify preceding line before starting indent .IR 3.5P kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor. .EW .2 .TI Invidunt ut labore et dolore magna ali\%qu\%yam erat, sed diam voluptua. At .EW 0 vero eos et accusam et justo duo dolores et ea rebum. .TI Stet clita kasd gubergren, no sea ta- .SPREAD \" Force justify preceding line before quitting indent .IRQ kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor in\%vi\%dunt ut labore et dolore magna aliquyam erat. Sed diam voluptua, at vero eos et accusam et justo duo .SPREAD .EW .3 dolores et ea rebum. Stet clita no kasd guber- .SPREAD .MCR .TB 2 gren, no sea takimata sanctus est lorem ipsum .EW 0 dolor sit amet. Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore. .TI Magna aliquyam erat, sed diam voluptua, at vero eos et accusam. Et justo duo dolores et ea .SPREAD .IL 3.5P rebum, stet clita kasd gubergren. No sea takimata sanctus est, lorem ipsum dolor sit amet. .TI Sit amet, consetetur sadipscing elitr, sed diam. Nonumy eirmod tempor in\%vi- .EW .3 dunt ut labore et dolore magna. Ali- .EW 0 quyam erat sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum stet. .ILQ .TI Dolores et ea rebum stet clita kasd gubergren, no sea takimata sanctus. Sadipscing elitr sed diam, nonumy eirmod tempor, invidunt ut labore et dolore magna aliquyam erat. Sed diam voluptua, at vero eos et accusam et justo duo dolores et ea rebum.