Captions alinhadas a esquerda com figures e tables, possível?

243 views
Skip to first unread message

Johann Hemmer

unread,
Mar 22, 2018, 9:49:41 PM3/22/18
to abnTeX2
Olá!

TL;DR: 

Preciso alinhar o caption a esquerda, junto com as ilustrações e tabelas, mas:
  • measuredfigure e \captionbox: não aceitam texto ou \legend;
  • \caption*: retorna o mesmo que o \caption (Figura 2 - ... continua virando Figura 2 - ... mesmo com o a estrela), o que pode ser algo do abnTeX2;
  • utilizar minipage é meio clunky para algumas pessoas e realmente demora mais do que uma solução ótima demoraria.

Texto completo:

Estou trabalhando duro para inserir o LaTeX na minha (através do abnTeX2) universidade e tenho ajuda de alguns professores que me apoiam, mas o obstáculo é adequar as normas BIZARRAS que a bendita instituição insiste em usar, já que a ABNT deixa de especificar várias coisas. Muitas coisas eu consegui arrumar/contornar, mas essa está sendo uma pedra no sapato: não consigo encontrar uma forma fácil de fazer com que o caption fique alinhado a esquerda, mas junto da ilustração/tabela. Encontrei algumas soluções promissoras como o environment measuredfigure, mas outro problema surge: não posso colocar texto dentro desse ambiente, nem um \legend, e por algum motivo, utilizando o pacote caption, o output de um \caption* está sendo EXATAMENTE o output da sua contraparte sem estrela (imaginei que isto podia ter algo a ver com o abnTeX2). Utilizar o \captionbox (que não está documentado no manual do caption) oferece o mesmo resultado de usar o measuredfigure

Na época que eu utilizava o LaTeX só pra mim, eu usava o environment minipage e ajustava o comprimento dela para fazer com que o caption ficasse alinhado, mas isso é bem chato de fazer e ruim para quem está aprendendo.

Dependo disso para disseminar esta ferramenta maravilhosa em mais uma universidade.

Muito grato!!

Johann Victor Hemmer
Message has been deleted

Emílio Kavamura

unread,
Mar 26, 2018, 7:25:48 AM3/26/18
to abnTeX2
Johann,

no modelo da UFPR eu fiz a inserção de figuras da seguinte forma:


% simplificação para colocar figuras
% ----------------------------------------------------------
\newcommand{\figura}[7]{
 \begin{center}\small
    \begin{figure}[!ht]
    \centering
        \caption{#1}
        \includegraphics[width=#2\textwidth]{#3}
        \label{fig:#5}
   
    %ajustado p/ a largura da imagem
    \begin{minipage}{#2\textwidth}
        \vspace{2mm}
        %\begin{flushleft}
            \par SOURCE:~#4
            \ifthenelse{\equal{#6}{}}{}
            { \par\hangindent=14mm NOTE: #6 }
           
            \ifthenelse{\equal{#7}{}}{}
            { \par\hangindent=14mm LEGEND: #7 }
        %\end{flushleft}
    \end{minipage}
    \end{figure}
 \end{center}
}



Exemplo:

\figura
{TESTE DE FIGURAS 2} %1 Legenda
{.55} %2  % da largura da área de texto
{fig/figure} %3 localização da figura
{\textcite[1]{abntex2modelo}} %4 fonte da figura
{teste} %5 etiqueta
{\url{https://goo.gl/EKFRak} TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2 TESTE DE FIGURAS 2} %6 Nota da figura
{} %7 Legenda da figura





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

e para as tabelas:

% simplificação para colocar tabelas
% ----------------------------------------------------------
\newsavebox{\mybox}
\newlength{\myboxlen}

\newcommand{\tabela}[6]
{\small
  \sbox{\mybox}{#2}
  \settowidth{\myboxlen}{\usebox{\mybox}}
  \noindent
  %\rule{\myboxlen}{1pt}\\
  \begin{table}[!ht]
    \centering
    \par\caption{#1}
   
    \par  #2
 
    \label{tab:#3}
 
     \begin{minipage}{\myboxlen}
        \vspace{2mm}
        %\begin{flushleft}
            SOURCE:~ #4
           
            \ifthenelse{\equal{#5}{}}{}
            {\hangindent=13mm NOTE: #5 }
           
            \ifthenelse{\equal{#6}{}}{}
            {\hangindent=13mm LEGEND: #6}
        %\end{flushleft}
    \end{minipage}
\end{table}
  % \centering
  % \usebox{\mybox}
  % box size: \the\myboxlen.
}



Exemplo:

\tabela{tabela teste} %1 Título da tabela
{
\begin{tabular}{c|c|c|c|c|c}
 teste1&teste2&teste3&teste1&teste2&teste3\\\hline\hline
  1&2&3&4&5&6\\\hline
 \end{tabular}
} %2 Tabela
{teste1} %3 Label da tabela
{\textcite{ISO5122:1979}}%4 Fonte da tabela
{ Nota de teste } %5 Nota da tabela
{testando as figuras e tabelas, fda} %6 Legenda da tabela

Johann Hemmer

unread,
Mar 26, 2018, 10:33:18 PM3/26/18
to abnTeX2
Muito grato pelas respostas Prof. Emílio e Youssef!

Fui atrás de documentação para criar comandos com argumentos opcionais e encontrei o pacote xkeyval, que usei para fazer comandos que ficaram bem similares aos do Prof. Emílio, mesmo sem eu ter lido antes (acredite se quiser).

Assim, desenvolvi o seguinte código para figuras (BASTANTE simples, realmente para iniciantes em LaTeX usarem para descomplicar a inserção de figuras):

\usepackage{xparse}

\NewDocumentCommand\figura{O{figure} m m m m m o}{% 
  \begin{#1}[ht]
    \centering
    \begin{minipage}{#5}
    \caption{#3}\label{#6}
    \includegraphics[width=\linewidth]{#2}
    \fonte{#4}
    \IfNoValueF{#7}{\nota{#7}}
    \end{minipage}
  \end{#1}
}

Não sei se estão familiarizados com esse pacote, mas segundo aquela sintaxe, o comando \figura é criado e admite 7 argumentos que são diferenciados por letras, temos "O" para opcional que, caso deixado vazio utiliza um valor padrão (naquele caso "figure"), "m" que seria obrigatório e "o" que seria opcional e não possui nenhum valor padrão. Os argumentos são numerados da esquerda para a direita, sendo que o #1 é o "O{figure}" e o #7 é o "o". O comando \IfNoValueF admite um argumento e, se não for vazio, realiza alguma função. Naquele caso, se o argumento #7 (opcional) não estiver vazio, ele utiliza o comando \nota e aplica o argumento #7 nele.

A ideia do primeiro argumento ser opcional e ser o justamente o environment seria para criar outros tipos de ilustrações, como mapas, esquemas, quadros, etc. se forma fácil.

Segue um exemplo de uso:

\figura[esquema] % ilustração será um Esquema
    {celula-rid-dif} % Caminho (se houver) e nome do arquivo
    {Célula ótica de um detector de índice de refração diferencial.} % Caption da ilustração
    {Adaptado de \citeonline{hplc-handbook}.} % Fonte consultada
    {6.5cm} % Comprimento da minipage
    {fig:celula-rid-dif} % Label

Simples, né? Tem um comando desse para tabelas também:

\NewDocumentCommand\tabela{O{table} m m m m o}{%
  \begin{#1}[ht]
    \centering
    \begin{threeparttable}
    \caption{#3}\label{#5}
    #2
    \fonte{#4}
    \IfNoValueF{#6}{\nota{#6}}
    \end{threeparttable}
  \end{table}
}

Funciona da mesma forma.

Não cheguei a testar sua solução, Emílio. É muito mais vantajosa?

Grato!

Johann


Emílio Kavamura

unread,
Mar 27, 2018, 8:34:35 AM3/27/18
to abnTeX2
Olá Johann,

Não vejo a minha versão como vantajosa, apenas por deixar de carregar um pacote a menos....

Acredito que a vantagem é ter um código "inteligível" e simples como é a filosofia do LaTeX,
o importante é termos alternativas e vermos como utilizá-las.

Obrigado por compartilhar sua versão.

Johann Hemmer

unread,
Mar 27, 2018, 1:31:15 PM3/27/18
to abnTeX2
Emílio,

Realmente a simplicidade ganha de mais pacotes, mas não possuo (ainda, creio eu) o know-how para fazer isso. Realmente queria me dedicar mais ao LaTeX, mas como estou na graduação e o pouco tempo que sobra para aprender LaTeX é quando não estou no trabalho, ou estudando ou escrevendo meu TCC. Sem falar que aprendi tudo que sei "sozinho" (no sentido de ter aprendido 100% do que sei pela internet, como esse grupo do abnTeX e o Stack Exchange), pois sou o primeiro aluno da instituição que usa LaTeX.

Abraço,

Johann 

Emílio eek

unread,
Mar 27, 2018, 1:36:48 PM3/27/18
to abn...@googlegroups.com
conte conosco para se aprimorar.

Emílio Eiji Kavamura, MSc

Professor Assistente
Curso de Expressão Gráfica - DEGraf/UFPR
41 3361-3642


--
abnTeX2 - http://abntex2.googlecode.com/
---
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "abnTeX2" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/abntex2/EzRAtx52tlM/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para abntex2+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para abn...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/abntex2/890de36f-163b-47f7-b8bf-48ac972fddd3%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Divina Landin que legal gostei muito!

unread,
Mar 28, 2018, 8:42:11 AM3/28/18
to abnTeX2


Em quinta-feira, 22 de março de 2018 22:49:41 UTC-3, Johann Hemmer escreveu:
Reply all
Reply to author
Forward
0 new messages