Post by giuseppe.on.usenetPost by Enrico GregorioPersonalmente uso il nero tondo (\mathbf) per vettori, con lettere
minuscole, e matrici, con lettere maiuscole.
http://pastebin.com/9p8bEdjG
ho raggiunto il risultato finale che volevo (incolonnare x_b e x_n),
ma facendo tutto "a mano" (\hspace, \qquad ecc.).
Se uso tabular con le colonne giustificate a destra, ho troppo spazio
tra una colonna e l'altra.
Se uso tabbing, lo spazio tra una tabulazione e l'altra mi va bene, ma
l'allineamento è a sinistra (forse c'è un comando per allineare con
precisione a destra? ho fatto qualche prova senza successo).
In conclusione, mi chiedevo se ci fosse un modo un po' più logico per
produrre la stessa cosa.
Come al solito, trattasi di codice che non devo distribuire in giro...
Tuttavia, migliorarsi fa sempre bene :-)
Fa abbastanza orrore. :)
Per questa soluzione occorre il pacchetto array: nel preambolo
scrivi
\usepackage{array}
\newcolumntype{R}{@{}>{{}}r<{{}}}
e poi
\begin{align*}
\min z = {}
&
\begin{array}[t]{RRRRR}
\vett{c}{N}\vett{x}{N}& + & \vett{c}{B}\vett{x}{B} & + & d \\
\matr{N}\vett{x}{N} & + & \matr{B}\vett{x}{B} & = & \matr{b} \\
\vett{x}{n}\rlap{,} & & \vett{x}{B} &\geq& 0
\end{array}
\end{align*}
L'idea di \textsc{#2} è piuttosto balzana: meglio
\newcommand{\vett}[3][]{\matr{#2}^{#1}_\textup{#3}}
Così hai (1) che il comando \vett è definito in termini di
\matr e non occorre ricordarsi di cambiare anche questo se
per caso decidi di modificare la resa di \matr; (2) indichi
le variabili con il loro nome.
Se non devi mai mettere esponenti alle tue variabili che
indichi con \vett, puoi usare la definizione più semplice
\newcommand{\vett}[2]{\matr{#1}^{}_\textup{#2}}
L'esponente vuoto serve per abbassare il pedice. Se usi esponenti,
con l'altra definizione li indichi come argomento opzionale:
\vett[2]{x}{N}
Tuttavia propenderei per un altro modo di rendere il tutto, non
vedo alcuna necessità di allineare verticalmente le variabili x.
\begin{align*}
\min z = {}
&\vett{c}{N}\vett{x}{N} + \vett{c}{B}\vett{x}{B} + d \\[1ex]
&\matr{N}\vett{x}{N} + \matr{B}\vett{x}{B} = \matr{b} \\
&\vett{x}{N},\vett{x}{B} \geq 0
\end{align*}
Normalmente i punti di allineamento si mettono prima di un
simbolo di relazione; in questo caso si mette dopo, ma allora
bisogna ricordarsi di un gruppo vuoto per mantenere la
spaziatura corretta dopo il simbolo =.
Ciao
Enrico