1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902
|
\documentclass[a4paper,italian]{article}
\usepackage{multicol}
\usepackage{float}
\usepackage{makeidx}
\usepackage{layout}
\usepackage{array}
\usepackage{a4wide}
\usepackage{boxedminipage}
\usepackage{babel}
\ifx\pdfoutput\undefined % if we are not running pdftex
\usepackage[T1]{fontenc}
\else % if we are running pdftex
\usepackage{ae}
\usepackage[pdftex]{thumbpdf}
\pdfcompresslevel=9
\usepackage[pdftitle={Layout di pagina in LaTeX},
pdfauthor={Piet van Oostrum},linktocpage,
pdftex,colorlinks,hyperindex,plainpages=false]{hyperref}
\fi
\usepackage{url}
\frenchspacing
%% layout.sty does not support italian language
\renewcommand{\Headertext}{Intestazione}
\renewcommand{\Bodytext}{Corpo}
\renewcommand{\Footertext}{Pi\`e di pagina}
\renewcommand{\MarginNotestext}{Note a\\margine}
\renewcommand{\oneinchtext}{un pollice}
\renewcommand{\notshown}{non visibile}
%%\usepackage{fancyheadings}
%%\pagestyle{fancy}
%%\lhead{\rightmark}
%%\rhead{\thepage}
%%\cfoot{}
\makeindex
\title{Layout di pagina in \LaTeX}
\author{Piet van Oostrum\thanks{Una parte considerevole di questo
articolo \`e stata scritta da George Gr\"atzer (University of
Manitoba) in \emph{Notices Amer. Math. Soc.}
Grazie George!}\\
Dept.\ of Computer Science\\
Utrecht University}
\date{23 marzo 2001}
\def\latex/{\protect\LaTeX{}}
\def\tex/{\TeX}
\def\ams/{\protect\pAmS}
\def\pAmS{{\the\textfont2
A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}}
\def\amslatex/{\ams/-\latex/}
\newcommand{\PSNFSS}{{\sf
PSNFSS}}
\newcommand{\bs}{\symbol{'134}}
\newcommand{\Cmd}[1]{\texttt{\def\{{\char`\{}\def\}{\char`\}}\bs#1}}
\newcommand{\CmdIndex}[1]{\index{#1@\texttt{\bs#1}}}
\newcommand{\TTindex}[1]{\index{#1@\texttt{#1}}}
\newcommand{\SFindex}[1]{\index{#1@\textsf{#1}}}
\newcommand{\EMindex}[1]{\index{#1@\emph{#1}}}
\newcommand{\PSindex}[1]{\index{stile di pagina!#1@\texttt{#1}}}
%\floatstyle{ruled}
\restylefloat{figure}
\renewcommand{\topfraction}{0.9}
\renewcommand{\bottomfraction}{0.9}
\renewcommand{\textfraction}{0.05}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex}
\setlength{\emergencystretch}{4em}
\makeatletter
\renewcommand\l@section {\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother
\newenvironment{block}{\vspace{8pt}\begin{minipage}{\textwidth}}{\end{minipage}\vspace{8pt}}
\newenvironment{fblock}{\vspace{8pt}\begin{boxedminipage}{\textwidth}}{\end{boxedminipage}\vspace{8pt}}
\begin{document}
\maketitle
\begin{abstract}
Questo articolo spiega come personalizzare l'aspetto della pagina
nei documenti LaTeX, ossia come modificarne le dimensioni e i
margini, le intestazioni e le righe a pi\`e di pagina, il corretto
posizionamento di figure e tabelle (collettivamente chiamate oggetti
flottanti). Originariamente, questa era la documentazione del
pacchetto \textsf{fancyheadings}, ma conteneva anche altre
informazioni relative, per esempio, all'uso avanzato delle
marche. In seguito sono stati aggiunti ulteriori argomenti, come il
trattamento degli oggetti flottanti. La documentazione di
\textsf{fancyheadings} \`e stata aggiornata per adattarla alla
versione 2 di questo pacchetto\footnote{Questa versione dovrebbe
essere rilasciata molto presto.}. Per ragioni di compatibilit\`a
con alcuni sistemi operativi, il nome del pacchetto \`e stato
cambiato in \textsf{fancyhdr}.
Sebbene in questo articolo si utilizzino comandi \LaTeXe{}, la
maggior parte delle tecniche pu\`o essere utilizzata, con le
appropriate modifiche, anche su versioni pi\`u vecchie di \LaTeX.
Traduzione italiana di Giulio Agostini % <giulio.agostini@bigfoot.com>
e Mileto Rigido. % <m.rigido@inwind.it>
\end{abstract}
\tableofcontents
%%% Nota dei traduttori
\subsubsection*{Nota alla traduzione italiana}
Una copia di questo documento e altre traduzioni in italiano di
manuali su \LaTeX\ sono reperibili presso
\begin{itemize}
\item\url{http://guild.prato.linux.it}
\item\url{ftp://lorien.prato.linux.it/pub/guild}
\item\url{ftp://ftp.unina.it/pub/TeX/info/italian}
\end{itemize}
e su ogni sito CTAN, per esempio \url{ftp://ftp.tex.ac.uk/tex-archive/info/italian}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Introduzione}
\label{sec:intro}
La pagina di un documento \LaTeX{} \`e costituita da vari elementi,
come mostra la figura \ref{fig:layout}.
\begin{figure}[htbp]
\begin{center}
\leavevmode
\layout
\vspace{3cm}
\caption{Elementi della pagina. I valori indicati sono quelli
usati in questo documento, non quelli predefiniti.}
\label{fig:layout}
\end{center}
\end{figure}
%\thispagestyle{fancy}
\thispagestyle{plain}
Il corpo contiene il testo principale assieme ai cosiddetti oggetti flottanti
(tabelle e figure).
Le pagine sono costruite con la routine di output di \LaTeX, la quale
\`e abbastanza complicata e pertanto non dovrebbe essere modificata
dall'utente. Alcuni dei pacchetti descritti in questo articolo
contengono delle piccole modifiche alla routine di output finalizzate
al compimento di operazioni che non potrebbero essere realizzate in
altro modo. Per ottenere i risultati desiderati \`e preferibile
utilizzare questi pacchetti piuttosto che modificare direttamente la
routine di output.
Ci sono un certo numero di cose delle quali si deve essere a conoscenza:
\begin{enumerate}
\item I margini sulla sinistra non si chiamano \Cmd{leftmargin}, ma
\Cmd{evensidemargin} (nelle pagine con numerazione pari) e \Cmd{oddsidemargin}
(nelle pagine dispari). Nei documenti a una facciata si usa
\Cmd{oddsidemargin} per entrambe. Anche \Cmd{leftmargin} \`e un parametro
\latex/ valido ma ha un utilizzo differente (vale a dire per il rientro
delle liste).
\item La maggior parte dei parametri non dovrebbe essere cambiata nel
mezzo di un documento poich\'e alcune modifiche potrebbero avere effetto
dopo un'interruzione di pagina.
Se si vuole cambiare l'altezza di una sola pagina, si pu\`o usare il
comando \Cmd{enlargethispage}.
\end{enumerate}
L'area delle note a margine contiene brevi informazioni
create col comando \Cmd{marginpar}. Nei documenti a due facciate le
note a margine appaiono alternativamente a sinistra e a destra. Le
note a margine non sono collocate in un posto fisso rispetto al foglio, ma
approssimativamente alla stessa altezza del paragrafo a cui si riferiscono.
Sfortunatamente, a causa dell'algoritmo usato per decidere il loro
posizionamento, in un documento a due facciate
potrebbero apparire sul lato sbagliato se sono collocate nei pressi di
un'interruzione di pagina.
Se invece si vuole che le informazioni appaiano in posti
prefissati ai margini della pagina, si pu\`o usare la tecnica
descritta nelle sezioni \ref{sec:movie} e \ref{sec:thumb}.
La prima parte di questo articolo descrive come modificare le aree
dell'intestazione e del pi\`e di pagina. L'ultima parte descrive come
collocare gli oggetti flottanti nel punto desiderato.
\section{Intestazioni e pi\`e di pagina}
In \LaTeX{} le intestazioni e i pi\`e di pagina sono definiti dai
comandi \Cmd{pagestyle} e \Cmd{pagenumbering}. \Cmd{pagestyle}
definisce il contenuto generale delle intestazioni e dei pi\`e di
pagina (per esempio dove sar\`a stampato il numero della pagina),
mentre \Cmd{pagenumbering} definisce il formato del numero della
pagina. \LaTeX{} ha quattro stili di pagina predefiniti:
\begin{tabular}{>{\tt}lp{10cm}}
empty & nessuna intestazione o pi\`e di pagina \\
plain & nessuna intestazione, il pi\`e di pagina contiene al centro il numero
della pagina \\
headings & nessun pi\`e di pagina, l'intestazione contiene il nome del capitolo/sezione e/o
subsezione e il numero della pagina \\
myheadings & nessun pi\`e di pagina, l'intestazione contiene il numero
della pagina e altre informazioni fornite dall'utente.
\end{tabular}
Questi stili, sebbene utili, sono abbastanza limitati. Si
possono definire degli stili di pagina aggiuntivi attraverso comandi
del tipo \Cmd{ps@xxx}. Questo comando \`e eseguito quando un
\Cmd{pagestyle\{xxx\}} \`e dato nel documento. Il comando
\Cmd{ps@xxx} dovrebbe definire i seguenti comandi per il contenuto
delle intestazioni e dei pi\`e di pagina:
\noindent
\begin{tabular}{lp{10cm}}
\Cmd{@oddhead} & intestazione delle pagine dispari nei documenti a due
facciate (valido per tutte le pagine nei documenti a facciata singola) \\
\Cmd{@evenhead} & intestazione delle pagine pari nei documenti a due
facciate \\
\Cmd{@oddfoot} & pi\`e di pagina delle pagine dispari nei documenti a due
facciate (valido per tutte le pagine nei documenti a facciata singola) \\
\Cmd{@evenfoot} & pi\`e di pagina delle pagine pari nei documenti a due
facciate \\
\end{tabular}
Questi non sono comandi utente, ma piuttosto ``variabili'' utilizzate
dalla routine di output di \latex/.
Poich\'e i nomi dei comandi contengono il carattere '\texttt{@}',
dovrebbero essere definiti all'interno di un pacchetto, o altrimenti
essere inseriti tra i comandi \Cmd{makeatletter} e \Cmd{makeatother}.
Il comando \Cmd{pagenumbering} definisce l'aspetto del numero della
pagina e accetta uno dei seguenti parametri:
\begin{tabular}{>{\tt}ll}
arabic & numeri arabi \\
roman & numeri romani a caratteri minuscoli \\
Roman & numeri romani a caratteri maiuscoli \\
alph & lettere minuscole \\
Alph & lettere maiuscole
\end{tabular}
\Cmd{pagenumbering\{xxx\}} fa in modo che il comando \Cmd{thepage} sia
l'espansione del numero di pagina nella forma \texttt{xxx}.
Il comando pagestyle include quindi \Cmd{thepage} nel posto
appropriato. Inoltre il comando \Cmd{pagenumbering} resetta il
numero di pagina riportandolo a~1. \Cmd{pagestyle} e \Cmd{pagenumbering} hanno
effetto sulla pagina corrente, quindi dovrebbero essere collocati in
un punto del documento in cui sia chiaro a quale pagina vengono applicati (vd. sezione
\ref{sec:change}).
\section{Cosa \`e \textsf{fancyhdr}}
Il pacchetto di macro \textsf{fancyhdr} permette di personalizzare in
modo facile le intestazioni e i pi\`e di pagina in \latex/. Si possono
definire:
\begin{itemize}
\item intestazioni e pi\`e di pagina divisi in tre parti
\item linee decorative nelle intestazioni e nei pi\`e di pagina
\item intestazioni e pi\`e di pagina pi\`u larghi del testo
\item intestazioni e pi\`e di pagina su pi\`u linee
\item intestazioni e pi\`e di pagina distinti per le pagine pari e dispari
\item intestazioni e pi\`e di pagina diversi per le pagine in cui inizia un capitolo
\item intestazioni e pi\`e di pagina diversi sulle pagine con oggetti flottanti
\end{itemize}
Ovviamente si pu\`o anche avere completo controllo sui font, sull'uso
di caratteri maiuscoli o minuscoli, eccetera.
%%% \section{Where to get it?}\label{get}
%%% You only need the file \verb|fancyhdr.sty| which you can find at the
%%% \index{ftp}
%%% CTAN sites: \verb|ftp.shsu.edu| (U.S.), \verb|ftp.tex.ac.uk| (U.K.), and
%%% \verb|ftp.dante.de| (Germany).
%%% You will find it in the directory\\
%%% \verb|/tex-archive/macros/latex209/contrib/fancyhdr|. Although
%%% \textsf{fancyhdr}
%%% is a \latex/ 2.09 style file, it will work with \LaTeXe{}. Also this
%%% \TTindex{fixmarks.sty}
%%% \TTindex{extramarks.sty}
%%% article and the two packages \texttt{fixmarks} and \texttt{extramarks} can
%%% be found there. (The code for these packages given in this article is a
%%% simplified version.)
\section{Uso basilare di \textsf{fancyhdr}}
Per usare questo pacchetto in un documento \LaTeXe, si deve installare
il file \verb|fancyhdr.sty| in una directory/cartella dove \tex/ possa
trovarlo (normalmente nella directory/cartella di input) e includere
nel preambolo del documento, dopo
\begin{verbatim}
\documentclass{...}
\end{verbatim}
i commandi\footnote{Con LaTeX2.09 si deve specificare \texttt{[fancyhdr]}
in \Cmd{documentstyle} anzich\'e usare il comando \Cmd{usepackage}.}:
\PSindex{fancy}
\begin{verbatim}
\usepackage{fancyhdr}
\pagestyle{fancy}
\end{verbatim}
Possiamo rappresentare il layout di pagina che pu\`o essere ottenuto con
\textsf{fancyhdr} in questo modo:
\begin{fblock}
\noindent\makebox[\textwidth]{Intestazione S.\hfill
Intestazione C.\hfill Intestazione D.}
\noindent\makebox[\textwidth]{\hrulefill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hfill corpo della pagina\hfill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hrulefill}
\noindent\makebox[\textwidth]{Pi\`e di pagina S.\hfill
Pi\`e di pagina C.\hfill Pi\`e di pagina D.}
\end{fblock}
Intestazione S. e Pi\`e di pagina S. sono giustificati a sinistra;
Intestazione C. e Pi\`e di pagina C. sono centrati;
Intestazione D. e Pi\`e di pagina D. sono giustificati a sinistra.
Ognuno dei sei ``campi'' e le due linee decorative sono definiti
separatamente.
\section{Un semplice esempio} K. Grant scrive una relazione per Dean
A. Smith, su ``Il rendimento dei neolaureati'' con il seguente layout
di pagina:
\begin{fblock}
\noindent\makebox[\textwidth]{\hfill\bfseries Il rendimento dei neolaureati}
\noindent\makebox[\textwidth]{\hrulefill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hfill corpo della pagina\hfill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hrulefill}
\noindent\makebox[\textwidth]{Da parte di: K. Grant\phantom{3}\hfill
Per: Dean A. Smith\hfill \phantom{Da parte di: K. Grant}3}
\end{fblock}
\noindent dove ``3'' \`e il numero della pagina. Il titolo: ``Il
rendimento dei neolaureati'' \`e in grassetto.
Il tutto \`e realizzato con \Cmd{pagestyle\{fancy\}} seguito da questi
comandi%
\footnote{Notare che la versione 1 di fancyheadings usava il comando
\Cmd{setlength} per cambiare i parametri di \texttt{\bs...rulewidth}.}:
\CmdIndex{lhead}
\CmdIndex{rhead}
\CmdIndex{chead}
\CmdIndex{lfoot}
\CmdIndex{rfoot}
\CmdIndex{cfoot}
\CmdIndex{headrulewidth}
\CmdIndex{footrulewidth}
\begin{verbatim}
\lhead{}
\chead{}
\rhead{\bfseries Il rendimento dei neolaureati}
\lfoot{Da parte di: K. Grant}
\cfoot{Per: Dean A. Smith}
\rfoot{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
\end{verbatim}
(La macro \Cmd{thepage} mostra il numero della pagina corrente,
\Cmd{bfseries} \`e il comando di \LaTeXe per selezionare i caratteri
in grassetto).
In questo modo le impostazioni sono quasi del tutto corrette, l'unico
problema \`e che la prima pagina non ha bisogno di intestazioni e
pi\`e di pagina. Per eliminare tutto tranne il numero della pagina
centrato si usa il comando
\CmdIndex{thispagestyle}
\begin{verbatim}
\thispagestyle{plain}
\end{verbatim}
dopo i comandi
\Cmd{begin\{document\}}
e
\CmdIndex{maketitle}
\Cmd{maketitle}.
In alternativa, si pu\`o usare
\begin{verbatim}
\thispagestyle{empty}
\end{verbatim}
se non si vogliono intestazioni o pi\`e di pagina di alcun tipo.
Infatti le classi standard di \latex/ definiscono il comando \Cmd{maketitle}
in modo tale da utilizzare automaticamente
\Cmd{thispagestyle\{plain\}}, quindi se si vuole il layout fancy in una
pagina contenente \Cmd{maketitle} si deve mettere
\Cmd{thispagestyle\{fancy\}} subito dopo il comando \Cmd{maketitle}.
\section{Un esempio di stampa fronte/retro}\label{two-sided}
\TTindex{twoside}
Alcune classi di documenti, come \verb|book.cls|, sono predefinite per
la stampa fronte/retro: le pagine pari e quelle dispari hanno quindi
un aspetto differente. Altre classi di documenti, invece, richiedono
l'opzione \verb|twoside| per la stampa fronte/retro.
Proviamo adesso a stampare la nostra relazione su due facciate. Il
layout precedente sar\`a usato per le pagine dispari (sul lato destro)
e il seguente per le pagine pari (sul lato sinistro).
\begin{fblock}
\noindent\makebox[\textwidth]{\bfseries Il rendimento dei neolaureati \hfill}
\noindent\makebox[\textwidth]{\hrulefill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hfill corpo della pagina\hfill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hrulefill}
\noindent\makebox[\textwidth]{4\phantom{Per: Dean A. Smith}\hfill
Da parte di: K. Grant\hfill \phantom{4}Per: Dean A. Smith}
\end{fblock}
\noindent dove ``4'' \`e il numero della pagina.
Ecco i comandi:
\begin{verbatim}
\fancyhead{} % cancella tutti i campi
\fancyhead[RO,LE]{\bfseries Il rendimento dei neolaureati}
\fancyfoot[LE,RO]{\thepage}
\fancyfoot[LO,CE]{Da parte di: K. Grant}
\fancyfoot[CO,RE]{Per: Dean A. Smith}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
\end{verbatim}
\CmdIndex{fancyhead}
\CmdIndex{fancyfoot}
Sono stati usati i comandi, pi\`u generici, \Cmd{fancyhead} e \Cmd{fancyfoot}.
Questi prevedono un parametro addizionale tra parentesi quadre che
specifica a quali pagine e/o parti dell'intestazione/pi\`e di pagina
si applicano. Questo parametro \`e stato omesso nel primo comando
\Cmd{fancyhead}, che pertanto si applica a tutti i campi
dell'intestazione: in generale questo \`e utile solo per sbarazzarsi
di una definizione precedente, come in questo caso. I selettori che
possono essere usati tra parentesi quadre sono indicati nella
figura~\ref{fig:sel}. I selettori possono essere combinati insieme,
cos\`{\i} \Cmd{fancyhead[LE,RO]\{text\}} definir\`a il campo sia per
l'intestazione sinistra sulle pagine pari, sia per l'intestazione destra
sulle pagine dispari; se non si specifica \texttt{E} o \texttt{O}, la definizione si
applica a tutte. Un discorso analogo vale per \texttt{LRC}. Quindi l'uso di
\Cmd{lhead} nella sezione precedente non \`e che un'abbreviazione di
\Cmd{fancyhead[L]}. I selettori possono essere indicati
indifferentemente con le lettere maiuscole o minuscole.
\CmdIndex{fancyhf}
C'\`e anche un pi\`u generico comando \Cmd{fancyhf} che pu\`o essere
usato per specificare contemporaneamente le intestazioni e i pi\`e di
pagina. Questo comando ammette i selettori generali \texttt{H} (intestazione) e \texttt{F}
(pi\`e di pagina), infatti \Cmd{fancyhead} e \Cmd{fancyfoot} non sono
che \Cmd{fancyhf} con \texttt{H} e \texttt{F} gi\`a specificati.
\begin{figure}[tb]
\begin{center}
\leavevmode
\begin{tabular}{|l|l|}
\hline
E & Pagina pari \\
O & Pagina dispari \\
\hline
L & Campo sinistro \\
C & Campo centrale \\
R & Campo destro \\
\hline
H & Intestazione \\
F & Pi\`e di pagina \\
\hline
%% T & float at Top \\
%% B & float at Bottom \\
%% F & Float page \\
%% \hline
\end{tabular}
\end{center}
\caption{Selettori.}
\label{fig:sel}
\end{figure}
Inoltre si pu\`o usare \Cmd{thispagestyle\{plain\}} per ottenere un
layout adatto alla prima pagina.
\section{Ridefinire lo stile \texttt{plain}}
Alcuni comandi \latex/, come \Cmd{chapter}, usano il comando
\Cmd{thispagestyle} per selezionare automaticamente lo stile di pagina
\texttt{plain}, ignorando cos\`{\i} quello attualmente in uso.
Per personalizzare anche queste pagine, si deve ridefinire lo stile di
pagina \texttt{plain}. Come \`e stato indicato precedentemente, questo
pu\`o essere fatto ridefinendo il comando \Cmd{ps@plain}, ma
\textsf{fancyhdr} fornisce un modo pi\`u facile attraverso il comando
\Cmd{fancypagestyle}. Questo comando pu\`o essere usato per ridefinire gli
stili di pagina esistenti (come \texttt{plain}), o per definirne di
nuovi, ad esempio se una parte del documento deve usare uno stile di
pagina differente. Questo comando ha due parametri: uno \`e il nome
dello stile di pagina che si vuole definire, l'altro \`e costituito
dai comandi che cambiano le intestazioni e/o i pi\`e di pagina, ad
esempio \verb|fancyhead| eccetera. Sono anche ammesse delle modifiche a
\Cmd{headrulewidth} e \Cmd{footrulewidth}.
Come esempio, si pu\`o ridefinire lo stile \texttt{plain} per la
relazione della sezione~\ref{two-sided}, mettendo il numero di
pagina in grassetto.
\PSindex{plain}
\begin{verbatim}
\fancypagestyle{plain}{%
\fancyhf{} % cancella tutti i campi di intestazione e pi\`e di pagina
\fancyfoot[C]{\bfseries \thepage} % tranne il centro
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\end{verbatim}
\section{Il layout predefinito}\label{default}
Usiamo la classe \verb|book.cls| e le impostazioni predefinite di
\textsf{fancyhdr}, cos\`{\i} da dare soltanto i comandi
\begin{verbatim}
\usepackage{fancyhdr}
\pagestyle{fancy}
\end{verbatim}
e lasciamo che \textsf{fancyhdr} si occupi di tutto: nelle pagine in
cui inizia un nuovo capitolo, avremo al centro del pi\`e di pagina il
numero della pagina stessa, non ci sar\`a nessuna intestazione e
nessuna linea decorativa.
Sulle pagine pari, otterremo il layout:
\begin{fblock}
\noindent\makebox[\textwidth]{\sl 1.2 VALUTAZIONE\hfill
CAPITOLO 1. INTRODUZIONE}
\noindent\makebox[\textwidth]{\hrulefill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hfill corpo della pagina\hfill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hrulefill}
\noindent\makebox[\textwidth]{\hfill4\hfill}
\end{fblock}
Sulle pagine dispari, avremo il layout:
\begin{fblock}
\noindent\makebox[\textwidth]{\sl CAPITOLO 1. INTRODUZIONE\hfill
1.2 VALUTAZIONE}
\noindent\makebox[\textwidth]{\hrulefill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hfill corpo della pagina\hfill}\\[\baselineskip]
\noindent\makebox[\textwidth]{\hrulefill}
\noindent\makebox[\textwidth]{\hfill
3\hfill }
\end{fblock}
\noindent dove il testo dell'intestazione \`e a caratteri maiuscoli inclinati.
Questo layout predefinito \`e prodotto dai seguenti comandi:
\CmdIndex{rightmark}
\CmdIndex{leftmark}
\begin{verbatim}
\fancyhead[LE,RO]{\slshape \rightmark}
\fancyhead[LO,RE]{\slshape \leftmark}
\fancyfoot[C]{\thepage}
\end{verbatim}
Le impostazioni seguenti sono usate per le linee decorative:
\begin{tabbing}
\CmdIndex{headrulewidth}
\noindent \Cmd{headrulewidth}\qquad \qquad \qquad \=0.4\=pt\\
\CmdIndex{footrulewidth}
\Cmd{footrulewidth}\>0\>pt
\end{tabbing}
In \verb|book.cls| il testo delle intestazioni appare in caratteri
maiuscoli.
\section{Lo scoop sulle marche di \latex/}\label{sec:custom}
Di solito, per i documenti delle classi \verb|book| e \verb|report|,
\`e preferibile includere le informazioni sul capitolo e la sezione
nelle intestazioni (solo il capitolo se si stampa su una sola
facciata) e per i documenti della classe \verb|article|, le
informazioni sulla sezione e sulla sottosezione (solo la sezione se si
stampa su una facciata). \latex/ usa un meccanismo basato sulle marche
per ricordare le informazioni relative al capitolo e alla sezione (o alla
sezione e alla sottosezione) per una pagina. Questo argomento \`e
discusso in dettaglio nella sezione 4.3.1 del \emph{\latex/ Companion}.
Si possono utilizzare due modi per cambiare le informazioni di alto e
basso livello accessibili all'utente. Le macro:
\CmdIndex{rightmark}
\CmdIndex{leftmark}
\Cmd{leftmark}
(alto livello) e \Cmd{rightmark} (basso livello) contengono le
informazioni processate da \latex/ e possono essere utilizzati
direttamente come mostrato nella sezione~\ref{default}.
\Cmd{leftmark} contiene l'argomento di sinistra dell'\emph{ultimo} comando
\Cmd{markboth} nella pagina, mentre \Cmd{rightmark} contiene l'argomento di
destra del \emph{primo} comando \Cmd{markboth} o l'unico argomento del
\emph{primo} comando \Cmd{markright} nella pagina. Se in una pagina non ci
sono marche, esse sono ``ereditate'' dalla pagina precedente.
Si pu\`o influenzare il modo in cui le informazioni relative a capitolo,
sezione e sottosezione (solo due di questi!) sono mostrate ridefinendo
i comandi
\CmdIndex{chaptermark}
\Cmd{chaptermark},
\CmdIndex{sectionmark}
\CmdIndex{subsectionmark}
\Cmd{sectionmark} e \Cmd{subsectionmark}\footnote{Ci sono dei comandi
simili per \texttt{paragraph} e \texttt{subparagraph} ma sono usati
raramente.}. La ridefinizione deve essere messa dopo la prima
dichiarazione di \Cmd{pagestyle\{fancy\}}, poich\'e questo imposta i
valori predefiniti.
Si pu\`o illustrare quanto detto finora prendendo come esempio le
informazioni relative al capitolo, le quali sono composte da tre
parti:
\begin{itemize}
\CmdIndex{thechapter}
\item il numero (ad esempio, 2), mostrato dalla macro \Cmd{thechapter}
\item il nome (Capitolo), mostrato dalla macro
\CmdIndex{chaptername}
\Cmd{chaptername}
\item il titolo, contenuto nell'argomento di \Cmd{chaptermark}.
\end{itemize}
La figura~\ref{fig:markers} mostra alcune varianti di ``Capitolo 2.\
Tutto e subito'' (l'ultimo esempio \`e appropriato per alcune lingue
diverse dall'inglese). I segni \verb|%| alla fine delle righe servono a
evitare degli spazi indesiderati: si potrebbero togliere questi segni
e continuare su una sola riga\footnote{Il comando \texttt{\bs MakeUppercase}
\`e usato in \LaTeXe{} per generare del testo a
caratteri maiuscoli, mentre in \LaTeX{} 2.09 si usa \Cmd{uppercase}.
La differenza \`e che \Cmd{MakeUppercase} si occupa anche di lettere
non ASCII. Fancyhdr fa in modo che \Cmd{MakeUppercase}, se non \`e
definito, sia un alias di \Cmd{uppercase}.}.
\begin{figure}[tb]
\CmdIndex{chaptermark}
\CmdIndex{uppercase}
\CmdIndex{MakeUppercase}
\setlength{\columnsep}{20pt}\small
\begin{multicols}{2}
\noindent Codice:\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{\chaptername|\\
\verb| \ \thechapter.\ #1}{}}|\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{\MakeUppercase{%|\\
\verb| \chaptername}\ \thechapter.%|\\
\verb| \ #1}{}}|\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{\MakeUppercase{%|\\
\verb| \chaptername\ \thechapter.%|\\
\verb| \ #1}}{}}|\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{#1}{}}|\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{\thechapter.\ #1}{}}|\\
\mbox{}\\
\verb|\renewcommand{\chaptermark}[1]{%|\\
\verb| \markboth{\thechapter.%|\\
\verb| \ \chaptername.\ #1}{}}|\\
Stampa:\\
\mbox{}\\
Capitolo 2.\ Tutto e subito\\
\mbox{}\\
\mbox{}\\
\mbox{}\\
CAPITOLO 2.\ Tutto e subito\\
\mbox{}\\
\mbox{}\\
\mbox{}\\
\mbox{}\\
CAPITOLO 2.\ TUTTO E SUBITO\\
\mbox{}\\
\mbox{}\\
\mbox{}\\
\mbox{}\\
Tutto e subito\\
\mbox{}\\
\mbox{}\\
2.\ Tutto e subito\\
\mbox{}\\
\mbox{}\\
2.\ Capitolo.\ Tutto e subito\\
\mbox{}\\
\end{multicols}
\caption{Varianti di marche.}\label{fig:markers}
\end{figure}
Per le informazioni sul sezionamento di basso livello si pu\`o fare lo
stesso con \Cmd{markright}.
Cos\`{\i} se ``Sezione 2.2.\ Primi passi'' \`e la sezione corrente,
allora
\begin{verbatim}
\renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}}
\end{verbatim}
dar\`a
``2.2.\ Primi passi''.
La ridefinizione dei comandi \Cmd{chaptermark} e \Cmd{sectionmark}
potrebbe non eliminare tutte le maiuscole, ad esempio la bibliografia
avr\`a il titolo
\CmdIndex{uppercase}
\index{Bibliografia}
\textsc{bibliografia} nell'intestazione, poich\'e \Cmd{MakeUppercase}
\`e dato esplicitamente nella definizione di \Cmd{thebibliography}. Lo
stesso discorso vale per
\textsc{Indice Analitico} eccetera. Se non si vogliono ridefinire questi comandi, si
pu\`o usare il comando \Cmd{nouppercase} che \textsf{fancyhdr} mette a
disposizione nei campi dell'intestazione e del pi\`e di pagina. Si
noti che questo potrebbe dare problemi in altri casi, come per i
numerali romani maiuscoli nelle intestazioni, quindi dovrebbe essere
usato con cautela. Essenzialmente, questo comando compone il suo
argomento in un ambiente in cui \Cmd{MakeUppercase} e \Cmd{uppercase}
sono trasformati in operazioni nulle.
\begin{verbatim}
\lhead{\nouppercase{\rightmark}}
\rhead{\nouppercase{\leftmark}}
\end{verbatim}
Si dovrebbe tener presente che il meccanismo delle marche di \latex/
funziona bene con i capitoli (che cominciano sempre su una nuova
pagina) e le sezioni (che sono ragionevolmente lunghe), ma non
funziona altrettanto bene nel caso di sezioni brevi e di
sottosezioni. Ma questo problema riguarda \latex/, non \textsf{fancyhdr}.
Come esempio si consideri un layout di pagina in cui i \Cmd{leftmark} sono
generati dalle sezioni e i \Cmd{rightmark} dalle sottosezioni (com'\`e
predefinito nella classe \texttt{article}). Si ipotizzi una pagina con
alcune brevi sezioni, ad esempio
\begin{samepage}
\noindent Sezione 1.\\
sottosezione 1.1\\
sottosezione 1.2\\
Sezione 2.
\end{samepage}
Poich\'e il \Cmd{leftmark} contiene l'\emph{ultima} marca della pagina,
esso sar\`a ``Sezione 2.'', mentre il \Cmd{rightmark} sar\`a ``sottosezione
1.1'', dato che conterr\`a la \emph{prima} marcha della
pagina. Cos\`{\i} l'informazione dell'intestazione di pagina
combiner\`a la sezione 2 con la sottosezione 1.1, il che non \`e
molto coerente.
La miglior cosa da fare in questa situazione \`e usare solo i
\Cmd{rightmark} e ridefinire \Cmd{sectionmark} di conseguenza.
Un comando \latex/
\CmdIndex{firstleftmark}
\Cmd{firstleftmark} sarebbe auspicabile (vd. il pacchetto
\textsf{extramarks} nella sezione~\ref{sec:xmarks}).
Un altro problema con le marche nelle classi standard di \latex/ \`e
che i comandi di sezionamento di alto livello (ad esempio \Cmd{chapter})
invocano \Cmd{markboth} con un argomento destro vuoto. Questo
significa che sulla prima pagina di un capitolo (o di una sezione nello
stile article) \Cmd{rightmark} sar\`a vuoto. Se questo \`e un problema
si devono inserire manualmente dei comandi \Cmd{markright} aggiuntivi oppure
ridefinire i comandi \Cmd{chaptermark} (e \Cmd{sectionmark}) per dare
il comando \Cmd{markboth} con due parametri accettabili.
Come osservazione finale si noti che la forma asteriscata
dei comandi di sezionamento \emph{non} invoca i comandi
di marchio. Quindi, se si vuole che la prefazione imposti le
informazioni dell'intestazione ma non sia numerata e non compaia
nell'indice, si deve invocare manualmente il comando \Cmd{markboth}, ad esempio
\begin{verbatim}
\chapter*{Prefazione\markboth{Prefazione}{}}
\end{verbatim}
L'inserimento del comando \Cmd{markboth} dentro \Cmd{chapter*}
assicura che la marca non sia separata dal titolo del capitolo da
un'interruzione di pagina. Ovviamente con \Cmd{chapter*} non c'\`e,
questo rischio, anche mettendo il comando di marca dopo il titolo del
capitolo, poich\'e il comando \Cmd{chapter*} comincia su una nuova
pagina. Tuttavia con \Cmd{section*} potrebbe essere pericoloso dare:
\begin{verbatim}
\section*{Prefazione}
\markboth{Prefazione}{}
\end{verbatim}
poich\'e potrebbe verificarsi un'interruzione di pagina tra i due
comandi.
\section{Intestazioni stile dizionario}
\index{dizionario}
%\index{concordance}
I dizionari hanno, solitamente, un'intestazione
contenente la prima (oppure la prima e l'ultima) voce definita nella
pagina. Questo pu\`o essere facilmente realizzato utilizzando
\textsf{fancyhdr} e il meccanismo delle marche di \latex/. Ovviamente,
se si usano le marche per ottenere delle intestazioni stile
dizionario, non le si pu\`o usare per le informazioni relative al
capitolo e alla sezione. Perci\`o, qualora nel documento siano
presenti anche capitoli e sezioni, bisogna ridefinire \Cmd{chaptermark} e
\Cmd{sectionmark} al fine di renderli innocui.
\begin{verbatim}
\renewcommand{\chaptermark}[1]{}
\renewcommand{\sectionmark}[1]{}
\end{verbatim}
Basta ora invocare un comando \Cmd{markboth\{\#1\}\{\#1\}} per ogni
voce \verb|#1| del dizionario e usare \Cmd{rightmark} per la prima
voce definita nella pagina e \Cmd{leftmark} per l'ultima.
Se si vuole avere un'intestazione del tipo \textsf{prima voce--ultima
voce} sarebbe bene che questa assuma semplicemente la forma
\textsf{prima voce} se le due voci coincidono, cosa che pu\`o accadere
quando una sola voce occupa tutta la pagina. In questo caso si dovrebbe
compiere una verifica per controllare se le due marche sono
identiche, tuttavia le marche di \tex/ sono brutte bestie e non
possono essere messe a confronto con i comandi \Cmd{if} del plain
\tex/.
\SFindex{ifthen}
Fortunatamente, il pacchetto \textsf{ifthen} funziona bene:
\begin{verbatim}
\newcommand{\mymarks}{
\ifthenelse{\equal{\leftmark}{\rightmark}}
{\rightmark} % se uguali
{\rightmark--\leftmark}} % se non uguali
\fancyhead[LE,RO]{\mymarks}
\fancyhead[LO,RE]{\thepage}
\end{verbatim}
I dizionari sono spesso impostati su due colonne. Sfortunatamente
c'\`e un bug nell'opzione twocolumn di \latex/ che provoca la perdita
di alcune marche. Si pu\`o risolvere questo problema usando il
pacchetto illustrato nella figura~\ref{fig:fixmarks}\footnote{Si
tratta, in realt\`a, di una semplificazione del codice del pacchetto
vero e proprio, il quale pu\`o essere scaricato da un sito del
CTAN. Il pacchetto \textsf{multicol} usa una tecnica simile.}.
\begin{figure}[tb]
\small
\TTindex{fixmarks.sty}
\begin{verbatim}
% fixmarks.sty:
% Patch LaTeX's output routine to handle marks correctly with two columns.
% Joe Pallas <pallas@edu.stanford.neon>
% Corrected by Piet van Oostrum <piet@cs.ruu.nl> on Feb 5, 1993, Oct 5, 1994
\def\@outputdblcol{\if@firstcolumn \global\@firstcolumnfalse
% Remember the marks from the first column
\global\setbox\@leftcolumn\copy\@outputbox
\splitmaxdepth=\maxdimen \cbaddness=10000
\setbox\@outputbox\vsplit\@outputbox to\maxdimen
\xdef\@firstcoltopmark{\topmark}%
\xdef\@firstcolfirstmark{\splitfirstmark}%
\ifx\@firstcolfirstmark\empty\global\let\@setmarks\relax\else
\gdef\@setmarks{\let\firstmark\@firstcolfirstmark
\let\topmark\@firstcoltopmark}%
\fi
% End of change
\else \global\@firstcolumntrue
\setbox\@outputbox\vbox{\hbox to\textwidth{\hbox to\columnwidth
{\box\@leftcolumn \hss}\hfil \vrule width\columnseprule\hfil
\hbox to\columnwidth{\box\@outputbox \hss}}}\@combinedblfloats
% Override current first and top with those of first column if necessary
\@setmarks
% End of change
\@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
\@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}\endgroup
\fi}
\end{verbatim}
\caption{Correzione del comportamento delle marche nello stile a due colonne.}
\label{fig:fixmarks}
\end{figure}
\section{Layout fantasiosi}
\index{linee multiple}
Si pu\`o creare un campo multilinea con il comando \Cmd{\bs}. \`E
anche possibile mettere dello spazio aggiuntivo in un campo con il
comando \Cmd{vspace}. Si noti che, se si fa questo, si dovr\`a
probabilmente aumentare l'altezza dell'intestazione
\CmdIndex{headheight}
\CmdIndex{footskip}
(\Cmd{headheight}) e/o del pi\`e di pagina (\Cmd{footskip}),
\index{Overfull \verb+\vbox+ \ldots}
altrimenti si potrebbero ottenere dei messaggi di errore \texttt{``Overfull
\Cmd{vbox} \ldots has occurred while \Cmd{output} is active''}%
\footnote{Probabilmete questo accorgimento sar\`a necessario anche se
si usa \texttt{11pt} o \texttt{12pt}, perch\'e i valori predefiniti di
\latex/ sono abbastanza piccoli.}. Si veda la sezione 4.1 del \latex/
\emph{Companion} per i dettagli.
Per esempio, il codice seguente metter\`a su due righe, nell'angolo in
alto a destra, il titolo della sezione e della sottosezione di un
articolo:
\begin{verbatim}
\documentclass{article}
\usepackage{fancyhdr}
\pagestyle{fancy}
\addtolength{\headheight}{\baselineskip}
\renewcommand{\sectionmark}[1]{\markboth{#1}{}}
\renewcommand{\subsectionmark}[1]{\markright{#1}}
\rhead{\leftmark\\\rightmark}
\end{verbatim}
Si possono anche personalizzare le lineee decorative, rendendole molto
sottili con
\CmdIndex{headrulewidth}
\begin{verbatim}
\renewcommand{\headrulewidth}{0.6pt}
\end{verbatim}
oppure si possono far scomparire le linee decorative nell'intestazione
e nel pi\`e di pagina con
\CmdIndex{footrulewidth}
\begin{verbatim}
\renewcommand{\footrulewidth}{0pt}
\end{verbatim}
Le linee decorative sono definite nelle due macro \Cmd{headrule} e
\Cmd{footrule}. Per esempio, se nell'intestazione si vuole una linea
punteggiata anzich\'e intera, si pu\`o ridefinire il comando
\Cmd{headrule}:
\begin{verbatim}
\renewcommand{\headrule}{\vbox to 0pt{\hbox
to\headwidth{\dotfill}\vss}}
\end{verbatim}
\CmdIndex{footruleskip}
Si pu\`o inoltre impostare un parametro addizionale \Cmd{footruleskip}
che definisce la distanza tra la linea decorativa e la parte superiore
della riga di testo del pi\`e di pagina. L'impostazione predefinita
\`e pari al 30\% della normale distanza tra le righe. Se nel pi\`e di
pagina si usano dei font particolarmente grandi o particolarmente
piccoli, potrebbe essere opportuno ridimensionarla con
\Cmd{renewcommand}.
\section{Due esempi di libri}
Le definizioni seguenti forniscono approssimativamente lo stile usato nel
libro di \latex/ di L.~Lamport.
L'intestazione di Lamport sporge sul margine, vediamo come si ottiene questo
effetto.
L'ampiezza dell'intestazione e del pi\`e di pagina \`e \Cmd{headwidth},
il cui valore predefinito \`e pari alla larghezza del testo
(\Cmd{textwidth}). Si pu\`o allargare o stringere questa misura ridefinendo
\Cmd{headwidth} con i comandi \Cmd{setlength} e \Cmd{addtolength}.
Per far sporgere l'intestazione sull'area dove vengono stampate le note
al margine,
\CmdIndex{marginparsep}
\CmdIndex{marginparwidth}
si aggiunga \Cmd{marginparsep} e \Cmd{marginparwidth} a
\Cmd{headwidth} con i comandi:
\begin{verbatim}
\addtolength{\headwidth}{\marginparsep}
\addtolength{\headwidth}{\marginparwidth}
\end{verbatim}
\begin{flushleft}
Bisogna inserire questi comandi \emph{dopo} il primo comando
\Cmd{pagestyle\{fancy\}}, perch\'e quest'ultimo ripristiner\`a il valore
predefinito di \Cmd{headwidth}\footnote{Nella versione 2 di
\textsf{fancyhdr}, generalmente, funziona anche se li si mette prima,
ma si consiglia comunque di metterli dopo.}.
\end{flushleft}
Ed ora una definizione completa dello stile del libro di Lamport:
\begin{verbatim}
\documentclass{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\addtolength{\headwidth}{\marginparsep}
\addtolength{\headwidth}{\marginparwidth}
\renewcommand{\chaptermark}[1]{\markboth{#1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
\fancyhf{}
\fancyhead[LE,RO]{\bfseries\thepage}
\fancyhead[LO]{\bfseries\rightmark}
\fancyhead[RE]{\bfseries\leftmark}
\fancypagestyle{plain}{%
\fancyhead{} % leva l'intestazione
\renewcommand{\headrulewidth}{0pt} % e la linea
}
\end{verbatim}
\PSindex{plain}
Si noti che i comandi \Cmd{chaptermark} e \Cmd{sectionmark} sono stati
ridefiniti per eliminare i numeri di capitolo e le maiuscole.
Come secondo esempio, consideriamo il libro di \amslatex/.% \cite{gG93B}.
% George Gratzer, Math into LaTeX, An Introduction to LaTeX and AMS-LaTeX,
% Birkhauser Boston, ISBN 0-8176-3805-9
Le pagine in cui iniziano i capitoli sono prive di intestazione e pi\`e
di pagina. Si dichiari perci\`o
\begin{verbatim}
\thispagestyle{empty}
\end{verbatim}
per ogni pagina di questo tipo, cos\`{\i} non c'e' bisogno di ridefinire
\texttt{plain}.
I titoli dei capitoli e delle sezioni appaiono nella forma:
\mbox{2.\ TUTTO E SUBITO}, quindi bisogna ridefinire \Cmd{chaptermark}
e \Cmd{sectionmark} come segue (si veda la sezione~\ref{sec:custom}):
\begin{verbatim}
\renewcommand{\chaptermark}[1]%
{\markboth{\MakeUppercase{\thechapter.\ #1}}{}}
\renewcommand{\sectionmark}[1]%
{\markright{\MakeUppercase{\thesection.\ #1}}}
\end{verbatim}
In un'intestazione ``pari'', il numero di pagina viene stampato
nell'intestazione a sinistra, e le informazioni relative al capitolo
nell'intestazione a destra; in un'intestazione ``dispari'', le
informazioni relative alla sezione sono stampate nell'intestazione a
sinistra e il numero di pagina nell'intestazione a destra. Le parti
centrali delle intestazioni sono vuote. Non ci sono pi\`e di pagina.
C'\`e una linea decorativa nell'intestazione. \`E alta \texttt{0.5pt},
quindi bisogna inserire i comandi:
\begin{verbatim}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\end{verbatim}
Il font usato nell'intestazione \`e lo Helvetica, grassetto, 9 pt.
Il sistema \PSNFSS\ ideato da Sebastian Rahtz usa il nome abbreviato
(Karl Berry) \verb|phv| per indicare Helvetica, quindi questo font
\`e selezionato con i comandi:
\begin{verbatim}
\fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont
\end{verbatim}
(Si vedano le sezioni~7.6.1 e~11.9.1 del \emph{\latex/ Companion}.)
Definiamo una scorciatoia per questa selezione:
\begin{verbatim}
\newcommand{\helv}{%
\fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont}
\end{verbatim}
Ora tutto \`e pronto per l'intero layout:
\begin{verbatim}
\documentclass{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\chaptermark}[1]%
{\markboth{\MakeUppercase{\thechapter.\ #1}}{}}
\renewcommand{\sectionmark}[1]%
{\markright{\MakeUppercase{\thesection.\ #1}}}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\newcommand{\helv}{%
\fontfamily{phv}\fontseries{b}\fontsize{9}{11}\selectfont}
\fancyhf{}
\fancyhead[LE,RO]{\helv \thepage}
\fancyhead[LO]{\helv \rightmark}
\fancyhead[RE]{\helv \leftmark}
\end{verbatim}
\section{Layout di pagina speciale per le pagine di soli oggetti flottanti}
\label{sec:float}
\EMindex{float page}
Alcuni preferiscono conferire un aspetto particolare alle pagine che raccolgono
solo oggetti flottanti (\emph{float pages}). Dato che queste pagine sono generate
automaticamente da \latex/, l'utente non ha alcun controllo su di esse.
Non esiste un comando \Cmd{thispagestyle} per le pagine di soli oggetti flottanti,
e qualsiasi cambiamento di stile influenzer\`a almeno anche la pagina che le precede.
Con \textsf{fancyhdr}, comunque, nei campi dell'intestazione e del pi\`e di pagina,
si pu\`o specificare
\Cmd{iffloatpage\{}testo per pagine di oggetti flottanti\verb|}{|testo per le altre pagine\verb|}|
Si pu\`o usare questo sistema anche per sbarazzarsi della linea decorativa,
basta definire:
\begin{verbatim}
\renewcommand{\headrulewidth}{\iffloatpage{0pt}{0.4pt}}
\end{verbatim}
Se si desidera cambiare il layout anche per pagine che contengono
un oggetto flottante in cima o in fondo alla pagina, \textsf{fancyhdr} fornisce
i comandi \Cmd{iftopfloat} e \Cmd{ifbotfloat}, simili a \Cmd{iffloatpage}.
Nota: le marche negli oggetti flottanti non saranno visibili nella routine
di output di \latex/, perci\`o \`e inutile mettercele. Attualmente non \`e
possibile far s\`{\i} che un oggetto flottante (ad esempio una didascalia di una
figura) influenzi l'intestazione o il pi\`e di pagina.
\section{Quelle pagine vuote\ldots}
\label{sec:blank}
Nella classe \texttt{book}, quando non si fornisce l'opzione
\texttt{openany}, o nella classe \texttt{report}, quando si fornisce
l'opzione \texttt{openright}, i capitoli iniziano nelle pagine
dispari, causando nella met\`a dei casi l'inserimento di una pagina
vuota. Alcuni preferiscono che queste pagine siano completamente
vuote, cio\`e senza intestazione e pi\`e di pagina. Questo non si
pu\`o ottenere con \Cmd{thispagestyle}, in quanto sarebbe necessario
invocare questo comando nella pagina \emph{precedente}. Non \`e
necessaria alcuna magia per ottenere questo effetto, comunque:
\PSindex{empty}
\CmdIndex{clearpage}
\CmdIndex{cleardoublepage}
\begin{verbatim}
\clearpage{\pagestyle{empty}\cleardoublepage}
\end{verbatim}
Dal momento che il comando \Cmd{pagestyle\{empty\}} \`e contenuto in un
gruppo, ha effetto solo sulla pagina che potrebbe essere generata da
\Cmd{cleardoublepage}. Si pu\`o ovviamente definire tutto ci\`o in un comando
``privato''. Se si vuole che questo sia fatto automaticamente all'inizio di
ogni capitolo o quando si vuole che compaia del testo in quelle pagine,
allora bisogna ridefinire il comando \Cmd{cleardoublepage}.
\index{pagine vuote}
\begin{verbatim}
\makeatletter
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
\hbox{}
\vspace*{\fill}
\begin{center}
Questa pagina contiene intenzionalmente solo questa frase.
\end{center}
\vspace{\fill}
\thispagestyle{empty}
\newpage
\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\makeatother
\end{verbatim}
\section{Numeri di pagina nella forma ``\textsf{m} di \textsf{n}''}
\label{sec:nofm}
Alcuni autori adottano una nuerazione delle pagine nella forma ``\textsf{m} di
\textsf{n}'', dove \textsf{m} \`e il numero di pagine nel documento.
\`E
\TTindex{nofm.sty}
disponibile un pacchetto chiamato \texttt{nofm.sty}, ma alcune versioni
sono difettose, e perlopi\`u non funzionano con \textsf{fancyhdr} perch\'e
prendono il controllo dell'intero
\TTindex{lastpage.sty}
layout di pagina. C'\`e un pacchetto per \LaTeXe{} chiamato
\textsf{lastpage}, che pu\`o essere usato con \textsf{fancyhdr} come
segue:
\begin{verbatim}
\usepackage{lastpage}
...
\cfoot{\thepage\ di \pageref{LastPage}}
\end{verbatim}
Se si utilizza il vecchio \latex/2.09 e non si pu\`o passare a \LaTeXe{},
bisogna usarne una versione compatibile con \latex/2.09,
\texttt{lastpage209.sty}, che \`e definita di seguito:
\begin{verbatim}
\let\origenddocument=\enddocument
\def\enddocument{\clearpage\if@filesw
{\addtocounter{page}{-1} \immediate\write\@mainaux
{\string\newlabel{LastPage}{{}{\thepage}}}}\origenddocument}
\end{verbatim}
Il valore dell'etichetta \texttt{LastPage} pu\`o essere usato per
ottenere intestazioni o pi\`e di pagina differenti per l'ultima pagina
del documento. Ad esempio, se si vuole che il pi\`e di pagina in ogni pagina
dispari, eccetto l'ultima, contenga il testo ``voltare pagina, prego'',
lo si pu\`o fare in questo modo\footnote{Per questo \`e necessaria una versione
ragionevolmente recente del pacchetto \textsf{ifthen}.}:
\begin{verbatim}
\usepackage{lastpage}
\usepackage{ifthen}
...
\rfoot{\ifthenelse{\isodd{\value{page}} \and \not
\value{page}=\pageref{LastPage}{voltare pagina, prego}{}}
\end{verbatim}
\section{Numeri di pagina legati ai capitoli o alle sezioni}
Nella documentazione tecnica molto spesso le pagine sono numerate nella
forma ``2-10'', dove il primo numero \`e il numero del capitolo e il secondo
\`e il numero di pagina relativo al capitolo. A volte si usa il numero di
sezione al posto di quello del capitolo. Il pacchetto \textsf{chappg}
pu\`o essere usato per ottenere questo effetto. Se si desidera cambiare
il layout, ad esempio per usare un punto invece di un trattino,
o le sezioni invece dei capitoli, bisogna fare una copia del pacchetto e
modificarla.
Esso ridefinisce \Cmd{thepage} cos\`{\i}:
\Cmd{arabic\{chapter\}-}\Cmd{arabic\{page\}}.
Sfortunatamente questo fornisce numeri, e non lettere, per le appendici.
Una definizione migliore potrebbe essere
\Cmd{thechapter-}\Cmd{arabic\{page\}}, ma si pu\`o comunque dare questa
definizione dopo il comando \Cmd{usepackage\{chappg\}}.
Il pacchetto, inoltre, riporta il numero di pagina a 1 all'inizio di ogni
capitolo.
C'\`e una differenza fondamentale tra la numerazione del tipo
``\textsf{m} di \textsf{n}'' descritta nella sezione precedente e quella appena
esposta. Lo stile ``\textsf{m} di \textsf{n}'' si usa solo nell'intestazione o
nel pi\`e di pagina, ma non nell'indice, nell'indice analitico, o nei
riferimenti, come ``Vedi pagina \textsf{m}''.
Perci\`o il comando \Cmd{thepage} non viene alterato. Lo stile di numerazione
``2-10'', invece, va utilizzato in tutti i riferimenti al numero di pagina,
quindi il comando \Cmd{thepage} va ridefinito.
\section{Quando cambiare intestazione e pi\`e di pagina?}
\label{sec:change}
A volte si vuole cambiare il layout dell'intestazione e del
pi\`e di pagina all'interno del documento. Alcuni di questi cambiamenti
possono essere realizzati usando il meccanismo delle marche come si \`e visto
nelle sezioni~\ref{sec:custom} e \ref{sec:xmarks}.
Comunque, in alcuni casi sono necessari cambiamenti pi\`u drastici,
ad esempio cambiare la numerazione della pagina da romana ad araba
(con \Cmd{pagenumbering}), cambiare uno dei campi
\index{stile di pagina!cambiamenti}
di \textsf{fancyhdr} o impostare un altro stile di pagina.
A volte si potrebbe rimanere sorpresi del fatto che i cambiamenti hanno
effetto troppo presto. Generalmente i cambiamenti summenzionati hanno effetto
immediato, cio\`e nella pagina che il sistema sta analizzando attualmente.
Se l'intenzione \`e quella di attuare i cambiamenti nella pagina
successiva bisogna assicurarsi che la pagina corrente sia finita. Nella
\CmdIndex{clearpage}
maggior parte dei casi, questo pu\`o essere ottenuto utilizzando il comando
\Cmd{clearpage} prima di questi cambiamenti. Se questo non \`e possibile,
si pu\`o usare il pacchetto
\TTindex{afterpage.sty}
\textsf{afterpage} cos\`{\i}:\\
\Cmd{afterpage\{}\Cmd{lhead\{nuovo valore\}\}} oppure
\CmdIndex{pagenumbering}
\Cmd{afterpage\{}\Cmd{pagenumbering\{roman\}}. Non si pu\`o usare
\Cmd{afterpage} per cambiare il \Cmd{pagestyle}, in quanto i comandi
invocati da \Cmd{afterpage} sono locali al gruppo, e il comando
\Cmd{pagestyle} effettua solo cambiamenti locali. Il comando
\Cmd{pagenumbering} e i comandi del pacchetto \textsf{fancyhdr}
effettuano cambiamenti globali, e perci\`o funzioneranno, cos\`{\i} come
il comando \Cmd{thispagestyle}.
Si noti che, sebbene i comandi di \textsf{fancyhdr}, come \Cmd{fancyhead},
abbiano effetto immediato, questo non significa che qualsiasi
``variabile'' usata all'interno di questi comandi prenda il valore
che ha nel punto in cui \`e stata invocata. Ad esempio, se si scrive
\Cmd{fancyfoot[C]\{}\Cmd{thepage\}}, il numero di pagina che sar\`a
inserito nel pi\`e di pagina non \`e il numero della pagina dove questo
comando viene invocato, ma piuttosto il numero della pagina dove
effettivamente il pi\`e di pagina viene costruito. Naturalmente per
il numero di pagina questo \`e ci\`o che ci si aspetta, ma questo \`e
anche vero per altri comandi.
Perci\`o, se in un libro ogni capitolo \`e stato scritto da un autore
diverso, e si vuole che il suo nome appaia nell'angolo in basso a sinistra,
si possono usare i seguanti comandi:
\begin{verbatim}
\newcommand{\TheAuthor}{}
\newcommand{\Author}[1]{\renewcommand{\TheAuthor}{#1}}
\lfoot{\TheAuthor}
\end{verbatim}
\noindent e cominciare ogni capitolo con
\Cmd{Author\{Nome Cognome\}}.
Se, comunque, il nome dell'autore cambiasse prima del completamento
di una pagina, nel pi\`e di pagina comparirebbe il nome sbagliato.
Questo succede se si invoca il comando \emph{prima} del comando
\Cmd{chapter}, invece che dopo.
Un'altra fonte di problemi \`e il fatto che la routine di output di \tex/
elabora i comandi in anticipo, quindi potrebbe aver gi\`a elaborato
qualche comando che produce testo che appare nella pagina successiva.
Nella prossima sezione viene fornito un esempio.
\section{Intestazioni e pi\`e di pagina indotti dal testo}
\label{sec:xmarks}
Si \`e visto come si possono usare le marche di \LaTeX{} per
visualizzare informazioni relative al contenuto del documento nelle
intestazioni e nei pi\`e di pagina. Quello delle marche \`e
l'unico meccanismo affidabile che si pu\`o usare per ottenere informazioni
dinamiche in queste parti di pagina. Questo \`e perch\'e \latex/ potrebbe
impaginare il documento prima di decidere di interrompere la pagina.
A volte le due marcature che \latex/ offre non sono sufficienti. Ad esempio:
\begin{quote}
Se la soluzione di un esercizio supera la lunghezza della pagina, si
desidera avere ``Segue nella pagina successiva\ldots\index{Segue\ldots}''
in fondo alla prima pagina e ``Seguito\ldots'' nel margine superiore della
pagina successiva.
\end{quote}
Non si pu\`o usare il meccanismo di marcatura di \latex/ in questo caso,
se si vogliono anche usare informazioni relative a capitoli e sezioni.
Il codice della figura~\ref{fig:xmarks} costituisce un pacchetto che fornisce
altre due marche che possono essere utilizzate in queste situazioni%
\footnote{Dopo aver realizzato questo pacchetto ho scoperto il paccheto
\texttt{secret.sty}, che fa una cosa simile, marcando paragrafi
confidenziali se attraversano un'interruzione di pagina. Lo fa, comunque,
cambiando la routine di output.}.
\begin{figure}[tb]\small
\CmdIndex{extramarks}
\begin{verbatim}
% extramarks.sty
\def\@leftmark#1#2#3#4{#1}
\def\@rightmark#1#2#3#4{#2}
\def\markboth#1#2{{\def\protect{\noexpand\protect\noexpand}
\let\label\relax \let\index\relax \let\glossary\relax
\expandafter\@markboth\@themark{#1}{#2}
\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
\def\markright#1{{\def\protect{\noexpand\protect\noexpand}
\let\label\relax \let\index\relax \let\glossary\relax
\expandafter\@markright\@themark
{#1}\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
\def\@markright#1#2#3#4#5{\gdef\@themark{{#1}{#5}{#3}{#4}}}
\def\@markboth#1#2#3#4#5#6{\gdef\@themark{{#5}{#6}{#3}{#4}}}
\def\leftmark{\expandafter\@leftmark\botmark{}{}{}{}}
\def\rightmark{\expandafter\@rightmark\firstmark{}{}{}{}}
\def\firstleftmark{\expandafter\@leftmark\firstmark{}{}{}{}}
\def\lastrightmark{\expandafter\@rightmark\botmark{}{}{}{}}
\def\@themark{{}{}{}{}}
\def\extramarks#1#2{{\def\protect{\noexpand\protect\noexpand}
\let\label\relax \let\index\relax \let\glossary\relax
\expandafter\@markextra\@themark{#1}{#2}
\mark{\@themark}}\if@nobreak\ifvmode\nobreak\fi\fi}
\def\@markextra#1#2#3#4#5#6{\gdef\@themark{{#1}{#2}{#5}{#6}}}
\def\firstxmark{\expandafter\@firstxmark\firstmark{}{}{}{}}
\def\topxmark{\expandafter\@firstxmark\topmark{}{}{}{}}
\def\lastxmark{\expandafter\@lastxmark\botmark{}{}{}{}}
\def\@firstxmark#1#2#3#4{#3}
\def\@lastxmark#1#2#3#4{#4}
\end{verbatim}
\caption{Pacchetto per marche aggiuntive in \latex/.}
\label{fig:xmarks}
\end{figure}
Ecco un modo di usare questo pacchetto:
\begin{verbatim}
\usepackage{extramarks}
...
\pagestyle{fancy}
\lhead{\firstxmark}
\rfoot{\lastxmark}
...
\extramarks{}{Segue nella pagina successiva\ldots}
Il testo pu\`o attraversare l'interruzione di pagina oppure no\ldots
\extramarks{Seguito\ldots}{}
\end{verbatim}
\CmdIndex{extramarks}
Si noti che i comandi \Cmd{extramarks} devono trovarsi attaccati al testo,
ovvero senza linee vuote in mezzo, altrimenti la pagina potrebbe spezzarsi
proprio l\`{\i}, e le ``\emph{extramarks}'' apparirebbero nella pagina sbagliata.
Ci sono due nuove marche che possono essere usate nel layout della
pagina con questo pacchetto. Se si invocano i comandi nella forma
\verb|\extramarks{|$m_1$\verb|}{|$m_2$\verb|}|
\CmdIndex{firstxmark}
\CmdIndex{lastxmark}
\Cmd{firstxmark} fornisce il primo valore di $m_1$ e
\Cmd{lastxmark} fornisce l'ultimo valore di $m_2$
nella pagina corrente.
\CmdIndex{firstleftmark}
\CmdIndex{lastrightmark}
Il pacchetto fornisce inoltre i comandi \Cmd{firstleftmark}
e \Cmd{lastrightmark}, che complementano le marche standard di \latex/.
Per sottolineare il fatto che usare le marche \`e il modo corretto di
procedere, si vuole esporre una ``soluzione'' che non
funziona\footnote{In effetti c'\`e un altro modo, ma richiede due passate
di \latex/: si possono mettere comandi \Cmd{label}
prima e dopo il testo e confrontare le \Cmd{pageref}.}:
\begin{verbatim}
\lhead{Seguito\ldots}
\rfoot{Segue nella pagina successiva\ldots}
Il testo pu\`o attraversare l'interruzione di pagina oppure no\ldots
\lhead{}
\rfoot{}
\end{verbatim}
Si potrebbe essere tentati di pensare che i primi \Cmd{lhead} e \Cmd{rfoot}
saranno attivi quando \tex/ interrompe la pagina nel mezzo del testo,
e che gli ultimi lo saranno quando la pagina si interrompe dopo il testo.
Questo non \`e vero, in quanto l'intero paragrafo (incluse le ultime
definizioni) sar\`a processato
\index{interruzione di pagina}
prima che \tex/ consideri l'interruzione di pagina, perci\`o quando
effettivamente avviene l'interruzione, le ultime definizioni sono attive,
sia che l'interruzione di pagina capiti all'interno del testo che al di
fuori di esso. Nemmeno mettere una interruzione di paragrafo
tra il testo e le ultime definizioni funzioner\`a, perch\`e non si
desidera che le prime definizioni siano attive quando \tex/ decide di
interrompere la pagina esattamente in quel punto. A dire il vero, il
meccanismo delle marche \`e stato inventato per sbarazzarsi di questo tipo
di problemi.
Nell'esempio precedente, ``Seguito\ldots'' compare nell'intestazione.
Potrebbe
\index{margine}
essere preferibile metterlo al margine. Questo effetto pu\`o essere
raggiunto facilmente mettendolo in una posizione ben precisa rispetto
all'intestazione.
In plain \tex/ bisognerebbe usare un cumulo di \Cmd{hbox to 0pt},
\Cmd{vbox to 0pt}, \Cmd{hskip},\Cmd{vskip}, \Cmd{hss} e
\Cmd{vss}, ma fortunatamente l'ambiente \texttt{picture} di
\latex/ d\`a la possibilit\`a di farlo in un modo pi\`u pulito.
Per non disturbare il normale layout dell'intestazione, si pu\`o
mettere il testo in un ambiente \texttt{picture} di dimensione zero.
Generalmente questo \`e il modo migliore di posizionare oggetti in punti
fissi della pagina, dopodich\'e si possono usare anche le normali
intestazioni.
Si veda anche la sezione~\ref{sec:thumb} per un altro esempio di questa
tecnica.
\TTindex{picture}
\begin{verbatim}
\lhead{\setlength{\unitlength}{\baselineskip}%
\begin{picture}(0,0)
\put(-2,-3){\makebox(0,0)[r]{\firstxmark}}
\end{picture}\leftmark}
\end{verbatim}
Questa soluzione, naturalmente, pu\`o essere usata per il pi\`e di pagina.
Basta assicurarsi di mettere l'ambiente \texttt{picture} all'inizio per le
voci sul lato sinistro e alla fine per quelle sul lato destro.
Per finire si potrebbe voler mettere ``(Seguito\ldots)'' nel \emph{testo}
piuttosto che nell'intestazione o nel margine. In quel caso bisogna usare
il pacchetto \TTindex{afterpage.sty}
\texttt{afterpage}. Si pu\`o anche decidere di avere un ambiente separato per
questo.
\begin{verbatim}
\newenvironment{continued}{\par
\extramarks{}{Segue nella pagina successiva\ldots}
\afterpage{\noindent\firstxmark\vspace{1ex}}
}{\extramarks{(Seguito\ldots)}{}\par}
\end{verbatim}
\`E un po' pericoloso usare \Cmd{firstxmark} fuori dalla routine
del layout di pagina, ma sembra che con \Cmd{afterpage} funzioni.
Se si ha bisogno delle informazioni pi\`u avanti all'interno della
pagina, bisogna registrare lo stato delle marche in una variabile opportuna.
Questo pu\`o essere fatto in uno dei campi di \textsf{fancyhdr}. Per
esempio, se si vuole aggiungere qualcosa \emph{dopo} il brano che \`e stato
interrotto, si pu\`o fare cos\`{\i}:
\begin{verbatim}
\newcommand{\mysaved}{}
\newenvironment{continued}{\par
\extramarks{}{Segue nella pagina successiva\ldots}
}{\extramarks{(Seguito\ldots)}{}\par\vspace{1ex}\mysaved}
\lhead{\leftmark}
\chead{\ifthenelse{\equal{\lastxmark}{}}
{\gdef\mysaved{}}
{\gdef\mysaved{\noindent[Segue dalla pagina precedente]}}}
\end{verbatim}
Se si vuole includere una marca o altre informazioni variabili nel testo
salvato, bisogna usare \Cmd{xdef} invece di \Cmd{gdef}.
\section{Animazioni}
\label{sec:movie}
\index{animazioni}
\TTindex{picture}
Se si stampa nello stesso punto di ogni pagina una figura che cambia di poco
da una pagina all'altra, si pu\`o ottenere un effetto simile ad
un'animazione scorrendo rapidamente le pagine. Con \textsf{fancyhdr} \`e
facile farlo. Per semplicit\`a si assuma che ogni
immagine sia un file PostScript (EPS) di nome
\texttt{img}$\langle n\rangle$.\texttt{ps}, dove $\langle n\rangle$ \`e il
numero di pagina, e si utilizzi il pacchetto \textsf{graphics} o
\textsf{graphicx}\footnote{Se si usa una versione non aggiornata di
\LaTeX{} si pu\`o usare il pacchetto \textsf{epsf} o \textsf{epsfig}.}.
\SFindex{graphics}
\SFindex{graphicx}
\SFindex{epsf}
\SFindex{epsfig}
Per mettere l'animazione nell'angolo in basso a destra, si proceda in questo
modo:
\begin{verbatim}
\rfoot{\setlength{\unitlength}{1mm}
\begin{picture}(0,0)
\put(5,0){\includegraphics{img\thepage.ps}}
\end{picture}}
\end{verbatim}
Si noti che il parametro \Cmd{unitlength} va modificato localmente
nel campo di \textsf{fancyhdr} in modo da evitare interferenze
indesiderate con il suo valore all'interno del testo.
\section{Indici stile rubrica}
\label{sec:thumb}
\index{bibbie}
Alcune guide stradali e bibbie di lusso hanno il cosiddetto
\EMindex{thumb-index}
\emph{thumb-index}, cio\`e dei segni sul bordo delle pagine che
indicano dove si trovano i capitoli. Si pu\`{o} ottenere questo effetto stampando
riquadri neri sul margine delle pagine. La posizione verticale
va determinata in base al numero del capitolo, o in base a qualche altro
contatore. Dal momento che la posizione \`e indipendente dal contenuto
della pagina, questi riquadri devono far parte dell'intestazione
in una \texttt{picture} di dimensioni zero, come descritto nella precedente
sezione.
Naturalmente bisogna prestare attenzione alla stampa in fronte/retro,
inoltre si potrebbe volere una pagina di indice con tutti i riquadri posizionati
correttamente. Sono richieste un po' di regolazioni di fino per
ottenere dei riquadri distanziati verticalmente.
Nel documento che ho dovuto redigere c'erano 12 sezioni, perci\`o le ho
posizionate a 18~mm l'una dall'altra, cio\`e riquadri larghi 9~mm separati
da 9~mm di spazio. Per evitare calcoli le ho costruite in un ambiente
\texttt{picture} con \Cmd{unitlength} uguale a 18~mm. Ho messo i numeri
di pagina nei lati esterni dell'intestazione e ad essi ho collegato i
riquadri. In questo esempio i numeri di sezione sono utilizzati per
posizionare i riquadri, ma potete sostituirli con qualsiasi valore
numerico.
Si rimanda alla figura~\ref{fig:overview} per la pagina di riepilogo e alla
figura~\ref{fig:thumb} per il codice.
\begin{figure}[htbp]
\setlength{\unitlength}{9mm}
\newcommand{\blob}{\rule[-.2\unitlength]{1\unitlength}{.5\unitlength}}
\newcounter{line}
\newcommand{\secname}[1]{\addtocounter{line}{1}%
\put(1,-\value{line}){\blob}
\put(-7.5,-\value{line}){\arabic{line}}
\put(-7,-\value{line}){#1}}
\newcommand{\overview}{1
\begin{picture}(0,0)
\secname{Introduzione}
\secname{Il primo anno}
\secname{Specializzazione}
\end{picture}}
\begin{center}
\leavevmode
\begin{picture}(11.3,5)
\put(0,0){\framebox(11.3,5)[tr]{}}
\put(9,4.5){\overview}
\end{picture}
\end{center}
\caption{Pagina di riepilogo del \emph{thumb-index}.}
\label{fig:overview}
\end{figure}
\begin{figure}[hp]\small
\begin{verbatim}
\setlength{\unitlength}{18mm}
\newcommand{\blob}{\rule[-.2\unitlength]{2\unitlength}{.5\unitlength}}
\newcommand\rblob{\thepage
\begin{picture}(0,0)
\put(1,-\value{section}){\blob}
\end{picture}}
\newcommand\lblob{%
\begin{picture}(0,0)
\put(-3,-\value{section}){\blob}
\end{picture}%
\thepage}
\pagestyle{fancy}
\cfoot{}
\newcounter{line}
\newcommand{\secname}[1]{\addtocounter{line}{1}%
\put(1,-\value{line}){\blob}
\put(-7.5,-\value{line}){\Large \arabic{line}}
\put(-7,-\value{line}){\Large #1}}
\newcommand{\overview}{\thepage
\begin{picture}(0,0)
\secname{Introduzione}
\secname{Il primo anno}
\secname{Specializzazione}
...etc...
\end{picture}}
\begin{document}
\fancyhead[R]{\overview}\mbox{}\newpage % Questo produce la pagina di riepilogo
\fancyhead[R]{} % Qui si puo' mettere altro "front matter"
\clearpage
\fancyhead[RE]{\rightmark}
\fancyhead[RO]{\rblob}
\fancyhead[LE]{\lblob}
\fancyhead[LO]{{\leftmark}
...
\end{verbatim}
\caption{Codice per il \emph{thumb-index}.}
\label{fig:thumb}
\end{figure}
\section{Posizionamento degli oggetti flottanti}
Gli oggetti flottanti sono elementi della pagina che ``fluttuano''
rispetto al resto del documento. Gli oggetti flottanti standard
sono le tabelle e le figure, ma con il pachetto \textsf{float} se ne
possono facilmente creare di nuovi, come gli algoritmi. Perlopi\`u
questi oggetti funzionano in modo soddisfacente, ma a volte \LaTeX{}
sembra intestardirsi e non fa quello che gli si chiede. Questa sezione
descrive come si pu\`o influenzare \LaTeX{} in modo che faccia come
gli si dice. Ci potrebbero essere, comunque, alcuni casi patologici
in cui \`e impossibile convincere \LaTeX{} a comportarsi bene.
Nel seguito si adopereranno le figure come esempio, ma tutto ci\`o
pu\`o applicarsi anche ad altri oggetti flottanti.
I problemi pi\`u frequenti con gli oggetti flottanti sono:
\begin{enumerate}
\item Si desidera un oggetto in una certa posizione nel testo, ma \LaTeX{}
lo sposta, solitamente nella pagina successiva.
\item Da un certo punto in avanti, \LaTeX{} sposta tutti gli oggetti
flottanti alla fine del documento o alla fine del capitolo.
\item \LaTeX{} si lamenta del fatto che ci sono troppi oggetti flottanti
(\texttt{Too many floats}).
\end{enumerate}
Nei primi due casi bisogna prima controllare se all'oggetto \`e stato
fornito un corretto parametro di posizionamento (``placement''). Ad
esempio, \Cmd{begin\{figure\}[htp]} specifica che la figura pu\`o essere
posizionata: qui (``Here'') (cio\`e nel punto del testo dove viene
invocato il comando), nella parte superiore (``Top'') di una pagina (che
potrebbe essere la stessa pagina dove viene invocato il comando), oppure
in una pagina (``Page'') separata di soli oggetti flottanti. Si pu\`o
anche specificare \texttt{[b]} per la parte inferiore (``Bottom'') di una pagina.
L'ordine delle lettere \`e irrilevante, non si pu\`o costringere \LaTeX{} a
provare prima in fondo ad una pagina e poi in cima specificando \texttt{[bt]}.
Se \LaTeX{} non mette gli oggetti flottanti dove ci si aspettava, la causa \`e
solitamente una delle seguenti:
\begin{enumerate}
\item L'oggetto era troppo grande per quella pagina. In questo caso deve
essere spostato nella pagina successiva, o anche oltre. Se non si \`e
specificato \texttt{[t]} o \texttt{[b]} come parametro di posizionamento,
\latex/ deve tenerlo in memoria finch\'e ne ha abbastanza per una pagina di
soli oggetti flottanti. Per questo motivo, \`e meglio non specificare solo
\texttt{[h]}. Se si vuole dare a \latex/ la possibilit\`a di mettere
l'oggetto in una pagina di soli oggetti mobili, bisogna anche specificare
\texttt{[p]}.
\item Il posizionamento violerebbe i vincoli imposti dai parametri di \latex/
riguardanti il posizionamento degli oggetti flottanti. Questa \`e una delle
cause pi\`u frequenti e pu\`o essere corretta facilmente cambiando i
parametri. Eccone un elenco:
\end{enumerate}
\begin{center}
\CmdIndex{topfraction}
\CmdIndex{bottomfraction}
\CmdIndex{textfraction}
\CmdIndex{floatpagefraction}
\TTindex{topnumber}
\TTindex{bottomnumber}
\TTindex{totalnumber}
\begin{tabular}{>{\tt}l p{8cm} c}
\hline
\multicolumn{3}{c}{Contatori -- modificabili con \Cmd{setcounter}}\\
\hline
topnumber & Numero massimo di oggetti in cima alla pagina & 2 \\
bottomnumber & Numero massimo di oggetti in fondo alla pagina & 1 \\
totalnumber & Numero massimo di oggetti su una pagina & 3\\
\hline
\multicolumn{3}{c}{Comandi -- modificabili con \Cmd{renewcommand}}\\
\hline
\bs topfraction & Massima frazione della parte superiore della pagina
allocabile ad oggetti flottanti & 0.7 \\
\bs bottomfraction & Massima frazione della parte inferiore della pagina
allocabile ad oggetti flottanti & 0.3 \\
\bs textfraction & Minima frazione della pagina da allocare al testo
& 0.2 \\
\bs floatpagefraction & Minima frazione di una pagina di soli oggetti
flottanti da allocare ad essi & 0.5 \\
\hline
\end{tabular}
\end{center}
Possono essercene altri nel caso di oggetti flottanti larghi due colonne
in documenti a due colonne.
Nella colonna di destra sono rappresentati i valori predefiniti per le
classi \latex/ standard. Altre classi potrebbero usare valori
diversi. Come si pu\`o notare, con i valori predefiniti, un oggetto
non pu\`o comparire in fondo ad una pagina se la sua altezza \`e maggiore
del 30\% dell'altezza della pagina. Quindi se si specifica \texttt{[hb]} per
un oggetto che \`e pi\`u alto di questa misura, verr\`a spostato in una
pagina di soli oggetti flottanti. Tuttavia, se \`e alto meno del 50\%
dell'altezza della pagina, dovr\`a aspettare finch\'e qualche altro oggetto
viene inserito, prima che una pagina di questo tipo possa essere riempita in
modo da soddisfare il parametro \Cmd{floatpagefraction}. Se ci si imbatte in
comportamenti di questo tipo, si possono facilmente aggiustare i parametri,
ad esempio:
\begin{verbatim}
\renewcommand{\textfraction}{0.05}
\renewcommand{\topfraction}{0.95}
\renewcommand{\bottomfraction}{0.95}
\renewcommand{\floatpagefraction}{0.35}
\setcounter{totalnumber}{5}
\end{verbatim}
Bisogna stare attenti a non rendere \Cmd{floatpagefraction} troppo piccolo,
altrimenti si otterranno tante piccole pagine di soli oggetti flottanti.
Si pu\`o costringere \latex/ ad ignorare gran parte dei parametri per uno
specifico oggetto includendo un punto esclamativo (\texttt{!}) tra i
parametri di posizionamento, ad esempio
\begin{verbatim}
\begin{figure}[!htb]
\end{verbatim}
Oggetti flottanti che contengono \texttt{[t]} tra i parametri possono
essere posizionati prima del punto in cui ne viene richiesto l'inserimento
(ma sulla stessa pagina).
Questo \`e il comportamento normale di \latex/, ma ad alcuni questo non piace.
Ci sono diversi modi di impedirlo:
\begin{enumerate}
\item Certamente cancellare \texttt{[t]} risolver\`a, ma generalmente
questo non \`e desiderabile, in quanto si potrebbe voler posizionare
l'oggetto in cima alla pagina successiva.
\item Usare il pacchetto \textsf{flafter}, che fa in modo che gli oggetti
flottanti non siano mai posizionati ``prematuramente''.
\item Usare il comando \Cmd{suppressfloats[t]}\footnote{Questo comando e
il parametro di posizionamento \texttt{[!]} non sono definiti in
\LaTeX2.09.}. Questo comando far\`a in modo che gli oggeti flottanti
posizionati nella parte superiore \emph{di questa pagina} siano spostati
in quella successiva. Questo pu\`o essere fatto anche per il parametro
\texttt{[b]} o senza parametro per tutti gli oggetti di questa pagina.
\end{enumerate}
Se nonostante tutti questi tentativi \latex/ sposta ancora gli oggetti
alla fine del documento o di un capitolo, si pu\`o usare un comando
\Cmd{clearpage}. Esso comincer\`a una nuova pagina, e vi inserir\`a tutti gli
oggetti flottanti in coda prima di continuare. Se non si desidera avere
un'interruzione di pagina, si pu\`o usare il pacchetto \textsf{afterpage}
e il seguente comando:
\begin{verbatim}
\afterpage{clearpage}
\end{verbatim}
In questo modo, \latex/ aspetter\`a fino alla fine della pagina corrente e
poi scaricher\`a tutti gli oggetti flottanti in coda. In alcune circostanze
patologiche, comunque, \texttt{afterpage} potrebbe fornire risultati inaspettati.
Per finire, se si vuole un oggetto flottante solo dove \`e stato specificato,
senza che \latex/ lo sposti da qualche altra parte, si pu\`o usare il pacchetto
\textsf{float} e inserire il comando:
\begin{verbatim}
\restylefloat{figure}
\end{verbatim}
nel preambolo. Si pu\`o ora specificare \texttt{[H]} come parametro di
posizionamento, che significa ``QUI e soltanto QUI''. Questo, comunque,
potrebbe causare un'interruzione di pagina indesiderata\footnote{Esisteva
uno stile \texttt{here.sty} con lo stesso effetto, ma questo \`e
incompatibile con \LaTeXe}. Se la si vuole evitare, cio\`e lasciare che
\LaTeX{} sposti l'oggetto solo se non ci sta sulla pagina, si usi il pacchetto
\textsf{afterpage} e il seguente comando:
\begin{verbatim}
\afterpage{\clearpage \begin{figure}[H] \ldots \end{figure}}
\end{verbatim}
Il fatto che \latex/ si lamenti che ci sono troppi oggetti flottanti
(\texttt{Too many floats}) \`e solitamente causato da uno dei problemi sopracitati:
oggetti impossibili da sistemare e \latex/ che di conseguenza ne raccoglie
troppi in coda. Le soluzioni fornite sopra, specialmente quelle contenenti
\Cmd{clearpage}, di solito funzionano. In alcuni casi ci sono veramente
troppi oggetti flottanti, in quanto \latex/ ha un numero limitato di
``scatole'' in cui memorizzare gli oggetti flottanti. Il pacchetto
\textsf{morefloats} pu\`o essere usato per aumentare questo numero. Se ancora
non bastano, bisogna modificare una copia privata di questo file,
ma ci potrebbe ancora essere qualche limite che non pu\`o essere oltrepassato.
A questo punto l'unica cosa che rimane da fare \`e cambiare il documento.
\section{Oggetti flottanti su pi\`u pagine}
Gli oggetti flottanti di \LaTeX\ non possono essere spezzati su pi\`u pagine.
Qualche volta, comunque, sorge la necessit\`a di disporre tabelle o
figure che non stanno su una pagina. La soluzione pi\`u semplice \`e
quella di suddividerle in pi\`u ambienti \texttt{table} o \texttt{figure},
ma questo causa diversi effetti indesiderati:
\begin{itemize}
\item Dove si divide? Questo \`e generalmente pi\`u difficile per le tabelle
che per le figure.
\item Come tenerle unite?
\item Bisognerebbe avere una sola voce nell'elenco delle figure/tabelle.
\end{itemize}
Anche se questi problemi non sempre sono completamente risolvibili, ecco
un paio di suggerimenti:
\subsection{Tabelle}
Per tabelle pi\`u lunghe di una pagina si pu\`o usare il pacchetto
\textsf{longtable}.
\SFindex{longtable}
Questo pacchetto definisce un ambiente \texttt{longtable} che \`e una specie
di fusione tra \texttt{table} e \texttt{tabular}. Ha approssimativamente
la stessa sintassi dell'ambiente \texttt{tabular}, ma gli aggiunge alcune
funzionalit\`a di \texttt{table}, come le didascalie. Le \texttt{longtable}
saranno automaticamente spezzate quando non ci stanno su una pagina, e
saranno immesse nell'elenco delle tabelle se si fornisce una didascalia.
Esse non saranno flottanti, comunque, e non possono essere usate all'interno
di un ambiente flottante. Questo potrebbe significare che un altro ambiente
\texttt{table}, che \`e stato definito prima della \texttt{longtable}, verr\`a
spostato pi\`u avanti, e quindi la numerazione potrebbe risultarne alterata.
Inoltre, se la \texttt{longtable} comincia troppo in basso nella pagina,
non \`e una vista piacevole. Se l'intenzione \`e quella di far cominciare
la \texttt{longtable} all'inizio di una pagina, la cosa migliore da fare \`e
quella di includerla in un comando \Cmd{afterpage} (fornito dal pacchetto
\textsf{afterpage}). Dal momento che una \texttt{longtable} \`e grande per
definizione, \`e meglio metterla in un file separato, e usare \Cmd{input}
all'interno del comando \Cmd{afterpage}:
\CmdIndex{afterpage}
\begin{verbatim}
\afterpage{\input{miatabella}}
\end{verbatim}
\begin{verbatim}
\afterpage{\clearpage\input{miatabella}}
\end{verbatim}
La seconda forma ha il vantaggio che alcuni degli oggetti flottanti
pendenti potranno essere stampati.
\subsection{Figure}
Non esiste una soluzione equivalente tipo \textsf{longfigure}, perci\`o
le figure vanno spezzate a cura dell'autore. Generalmente questo \`e il
problema minore. Comunque, il problema che si pone adesso \`e come tenerle
unite, cio\`e come distribuire i pezzi su pi\`u pagine, e ottenere una sola
voce nell'elenco delle figure.
Bisogna spezzare la figura in pi\`u parti, e mettere ogni pezzo in un
diverso ambiente \texttt{figure}. Per tenerli insieme \`e meglio usare
l'argomento \texttt{[p]}, in modo che saranno disposti su pagine di soli
oggetti flottanti. Dato che sono pi\`u grandi di una pagina, questo \`e
appropriato. Alla prima parte si attribuir\`a quindi una didascalia
(\Cmd{caption}), mentre le parti successive ne saranno prive. Se si vuole
aggiungere testo a mo' di didascalia, inseritelo come testo normale,
anzich\'e come \Cmd{caption}, in modo che non sar\`a inserito nell'elenco
delle figure. Potrebbe anche essere desiderabile l'utilizzo del comando
\Cmd{clearpage}, proprio come per le \texttt{longtable}, racchiudendolo
nel comando \Cmd{afterpage}. Ad esempio:
\begin{verbatim}
\afterpage{\clearpage\input{miafigura}}
\end{verbatim}
dove \texttt{miafigura.tex} contiene:
\begin{verbatim}
\begin{figure}[p]
\includegraphics{miafigura1.eps}
\caption{Questa \`e una figura spezzata su pi\`u pagine.}
\label{fig:xxx}
\end{figure}
\begin{figure}[p]
\includegraphics{miafigura2.eps}
\begin{center}
Figura~\ref{fig:xxx} (continua)
\end{center}
\end{figure}
\end{verbatim}
Bisogna accertarsi che l'ultima parte sia grande abbastanza, altrimenti \LaTeX{}
potrebbe decidere di posticiparla fino a che ha raccolto abbastanza oggetti
flottanti. Questo si pu\`o fare rendendo la figura grande abbastanza (ad
esempio aggiungendo un po' di \Cmd{vspace}), oppure aggiustando
il parametro \Cmd{floatpagefraction}%
\CmdIndex{floatpagefraction}.
Se si vuole far cominciare la figura spezzata in una pagina a sinistra
(in una pagina pari) si pu\`o introdurre una condizione (fornita dal pacchetto
\texttt{ifthen}) nel comando \Cmd{afterpage}:
\begin{verbatim}
\afterpage{\clearpage
\ifthenelse{\isodd{\value{page}}{\afterpage{\input{miafigura}}} % pagina dispari
{\input{miafigura}}}} % pagina pari
\end{verbatim}
Se ci sono troppi oggetti flottanti nella pagina che viene saltata, comunque,
pu\`o darsi che la figura non cominci sulla pagina pari.
\clearpage
\section{Contatti}
Piet van Oostrum\\
Dept.\ of Computer Science\\
Utrecht University\\
P.O. Box 80.089\\
3508 TB Utrecht, The Netherlands\\
Telefono: +31 30 2531806 Telefax: +31 30 2513791\\
E-mail: piet@cs.ruu.nl \\
WWW: http://www.cs.ruu.nl/people/piet
\printindex
\end{document}
% Local Variables:
% mode: latex
% TeX-master: t
% End:
|