Quando compilo meu documento pdflatex
(no Ubuntu), ele funciona bem. Eu estava mudando xelatex
para alguns outros problemas, mas agora o código a seguir não será mais compilado:
\includegraphics[clip, trim={50px 50px 100px 100px}, width=\textwidth, height=\textwidth]{./images/image1.png}
Aqui está um MWE com o qual as pessoas podem brincar:
\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\begin{document}
\includegraphics[clip, trim={10px 40px 10px 40px}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
\end{document}
Erro:
Illegal unit of measure (pt inserted).
Eu sei px
que é uma unidade não padrão em látex, mas os gráficos incluídos são PNG, que são inerente e naturalmente medidos em pixels e preciso cortar em um número específico de pixels. Isso funcionou bem pdflatex
e fez sentido. (Se o PNG tivesse um dpi fora do padrão, acho que poderia mudar px
, \pdfpxdimen
embora não entenda por que ele não pode simplesmente ler os metadados e fazer isso sozinho).
Como cortar uma imagem por um número específico de pixels xelatex
?
EDITAR: Aqui está minha tentativa de solução alternativa com o mínimo de alterações possíveis na forma como incorporo a imagem (o que, espero, esclarecerá o que estou tentando fazer).
- Obtenha dpi da imagem. Por exemplo, com magia de imagem:
identify -format "%w x %h %x x %y" images/image1.png
. Saída:161 x 161 72 x 72
ou seja, as imagens têm 161x161 pixels e o dpi é 72 em ambas as dimensões. (O látex usa o dpi real de uma imagem? Ou apenas assume o padrão de 72?) - Calcule o comprimento do pixel em termos de uma unidade que o látex entende: 1 pixel = 1/72 pol = 0,0388 (também, aliás, 1 pixel = 1bpnesse caso, então eu poderia simplesmente trocar px por bp aqui, mas isso não é uma solução geral).
- Defina um comprimento
\mypx
com o valor apropriado e alternepx
para\mypx
:
%72 dpi -> 1 px = 1/72 in = .013889
\newlength{\mypx}
\setlength{\mypx}{0.013889in}
\includegraphics[clip, trim={50\mypx 50\mypx 100\mypx 100\mypx}, width=\textwidth, height=\textwidth]{./images/data041_arrIm_image_1.png}
Infelizmente isso não funciona. Parece que os comprimentos não podem ser usados como parâmetros de clipe? É importante para mim usar pixels como unidades (no sentido inglês da palavra 'unidades', não na definição de látex). Não quero calcular manualmente o valor de corte equivalente em pt, etc. toda vez que mexo com isso - preciso dizer 'tirar 13 pixels' e cortar exatamente 13 pixels da imagem. Eu tenho muitas imagens, todas com cortes diferentes necessários e o corte precisa retirar um determinado número inteiro de pixels.
Ainda não entendo por que isso é tão difícil no látex. O fato de ser capaz de incluir uma imagem raster significa quetem que serciente dos pixels em algum nível (ou não seria capaz de exibi-los), portanto deveria ser possível cortar diretamente por pixels em vez de por comprimentos.
Responder1
Se você quiser usar um comprimento definido \newlength
no parâmetro trim=
, como \mypx
no seu exemplo, você deve ter cuidado com as regras de análise do TeX:
Em
\includegraphics[clip, trim={10\mypx 40\mypx 10\mypx 40\mypx}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
os espaços após a sequência de controle \mypx
são usados como delimitadores da sequência de controle, não como espaços regulares, portanto não podem ser usados para separar os trim
argumentos. Então basicamente a linha acima é igual a
\includegraphics[clip, trim={10\mypx40\mypx10\mypx40\mypx}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
o que obviamente não pode funcionar. Você pode evitar isso adicionando colchetes em torno de cada dimensão. Então você pode usar
\documentclass{article}
\usepackage{graphicx}
\usepackage{mwe}
\newlength{\mypx}
\setlength{\mypx}{0.013889in}
\begin{document}
\includegraphics[clip, trim={{10\mypx} {40\mypx} {10\mypx} {40\mypx}}, width=\textwidth, height=\textwidth]{example-grid-100x100pt.png}
\end{document}