Tôi đang sử dụng MATLAB để vẽ các phân tích XRD trong đó các chỉ mục Miller được sử dụng để xác định các hướng của mặt phẳng tinh thể. Các chỉ mục này chứa 3 hoặc 4 số và giá trị âm được hiển thị với thanh trên số này.Làm thế nào để hiển thị các chỉ số Miller trong MATLAB?
Trong LaTeX, có thể viết bằng lệnh \([1\bar{1}1]\)
hoặc \([1\overline{1}1]\)
.
Để dán nhãn các dòng phổ của các tiêu chuẩn XRD Tôi đang sử dụng lệnh này: Lưu ý rằng các giá trị âm không được xem xét.
std_text_hkl(j)=text(theta{i}(j)-r,0.1,['[' hkl{j} ']'],... % position and label
of j-th line of i-th standard; hkl{j} holds Miller index in string format
'parent',ax_std(i),... % association with axes of i-th standard
'rotation',90,...
'fontsize',12,...
'fontname',Font); % Font holds global font setup
Làm thế nào tôi có thể tự động tạo thanh trên số âm mà không sử dụng 'Interpreter','latex'
sở hữu kể từ khi tôi muốn để có thể thay đổi 'FontName'
là tốt tài sản. Tại leat tôi muốn tránh phông chữ khác nhau trong nhãn và bọ ve.
EDIT:
Nhờ bình luận Magla của tôi có ý tưởng này:
- cửa hàng chỉ số như ma trận 3 cột
- nhãn hiệu riêng biệt thành 5 lĩnh vực văn bản
- nếu Miller chỉ là dòng hòa âm trên nó (dòng trên cùng của khung văn bản)
Đoạn mã thực tế:
rr=get(ax_std(i),'xlim'); % read x-axis limits of i-th standard
r=(rr(2)-rr(1))/150; % x-offset of Miller indexes
for j=1:size(dhkl,1)
theta{i}(j)=asin(lambda/(2*dhkl(j,1)))*360/pi(); %calculating of lines
%positions (Bragg's law)
line('parent',ax_std(i),...
'xdata',[theta{i}(j) theta{i}(j)],...
'ydata',[0 dhkl(j,2)],... % j-th line's reflection intensity
'color',[colors(1+mod(i-1,size(colors,1)),1:3)],...
'linewidth',3)
% Miller indexes
if theta{i}(j)>rr(1)&&theta{i}(j)<rr(2) % test if line is inside axes
std_text_lbrace(j)=text(theta{i}(j)-r,0.1,'[',...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font);
pos=get(std_text_lbrace(j),'position');
ext=get(std_text_lbrace(j),'extent');
std_text_h(j)=text(pos(1),pos(2)+ext(4)/1.5,int2str(abs(hkl(j,1))),...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font); % write 1st Miller index
pos=get(std_text_h(j),'position');
ext=get(std_text_h(j),'extent')
if hkl(j,1)<0 % if negative, draw line over it
wdth=get(ax0,'xlim');
wdth=wdth(2)-wdth(1);
set(std_text_h(j),'color','b','edgecolor','g')
line('parent',ax_std(i),...
'xdata',[pos(1)-wdth/280*ext(3),pos(1)-wdth/280*ext(3)],...
'ydata',[pos(2),pos(2)+ext(4)/wdth*100],...
'color','r')
end
end
Tôi không thể vừa với chiều dài của đường. Đối với chữ số duy nhất nó quá dài, cho hai chữ số nó phù hợp và cho nhiều hơn (về mặt lý thuyết) đó là cách quá ngắn. Tôi đang làm gì sai? MATLAB đo lường tính chất 'extent'
của văn bản được xoay vòng như thế nào?
Tôi sẽ sử dụng trường văn bản thứ hai chỉ có dấu gạch dưới và dịch hoặc xoay nó để khớp với số mục tiêu. Giải pháp này hoạt động tốt với phông chữ khoảng cách đều nhau mặc dù (chuyển phát nhanh mới, monospaced). – marsei
@Magla: Điểm tốt, '' _ \ newline [111] ''nên làm điều đó. Nhưng, như bạn nói, chỉ cho 'font chữ cố định' (có nên tăng gấp đôi khoảng trắng). – Crowley
Bạn đã cosidered nhiều câu trả lời để "sử dụng nhãn mủ latex", ví dụ: http://stackoverflow.com/a/9328945/2180721.Điều này không cho phép sử dụng bất kỳ phông chữ nào, nhưng cách giải quyết được đề xuất bởi Magla chỉ áp dụng cho yêu cầu cụ thể của bạn và nếu bạn có một số mủ phức tạp để hiển thị, việc sử dụng các đối tượng đồ họa sẽ trở nên không khả thi. – Oleg